Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 谁能帮我分析下原因吗

回复:
user: user-1
content: 为何不用wchar_t 呢？

user: user-2
content: 自己去分字太麻烦了, 你可以把文字转换成unicode, 这样自动分了

user: user-3
content: 很多汉字的第二个字节并不比 0x80 大。

user: user-1
content: 引用 11 楼 u014325402 的回复:引用 3 楼 paschen 的回复:为何不用wchar_t 呢？不用wchar_t 用char会出现问题吗？  用wchar_t就不用考虑这些了

user: user-0
content: 引用 3 楼 paschen 的回复:为何不用wchar_t 呢？不用wchar_t 用char会出现问题吗？

user: user-0
content: 引用 9 楼 user-3 的回复:[quote=引用 6 楼 u014325402 的回复:] [quote=引用 5 楼 user-3 的回复:] [quote=引用 4 楼 u014325402 的回复:] [quote=引用 1 楼 user-3 的回复:] 很多汉字的第二个字节并不比 0x80 大。 GB2312的 第一、二字节都大于0x80,中文标点符号一样。[/quote]  GBK 可不是哦。  while(*ped != *(date + *len ))  这里是 ped != date + *len 吧。[/quote] n你说的这种以判断地址方式，也可以， 我那种是判断地址里的内容。[/quote]  内容可能会重啊。  你遇到一个串是 "啊哦啊啊哦啊啊哦" 你想会怎么样。 而且不同的汉字字也会有重复的字节。[/quote]谢谢老师啊，我改正你那种方式好了，谢谢啊，。对了对于把它转化成unicode,方式，具体是如何做的呢？老师你有没有相关的参考程序或者资料的链接？

user: user-3
content: 引用 6 楼 u014325402 的回复:[quote=引用 5 楼 user-3 的回复:] [quote=引用 4 楼 u014325402 的回复:] [quote=引用 1 楼 user-3 的回复:] 很多汉字的第二个字节并不比 0x80 大。 GB2312的 第一、二字节都大于0x80,中文标点符号一样。[/quote]  GBK 可不是哦。  while(*ped != *(date + *len ))  这里是 ped != date + *len 吧。[/quote] n你说的这种以判断地址方式，也可以， 我那种是判断地址里的内容。[/quote]  内容可能会重啊。  你遇到一个串是 "啊哦啊啊哦啊啊哦" 你想会怎么样。 而且不同的汉字字也会有重复的字节。

user: user-0
content: 引用 5 楼 user-3 的回复:[quote=引用 4 楼 u014325402 的回复:] [quote=引用 1 楼 user-3 的回复:] 很多汉字的第二个字节并不比 0x80 大。 GB2312的 第一、二字节都大于0x80,中文标点符号一样。[/quote]  GBK 可不是哦。  while(*ped != *(date + *len ))  这里是 ped != date + *len 吧。[/quote]  您遇到这种问题一般是如何处理的？我那个程序有哪些判断不足的地方？

user: user-0
content: 引用 2 楼 zzz3265 的回复:自己去分字太麻烦了, 你可以把文字转换成unicode, 这样自动分了如何 把gb2312转化成unicode，小弟也这几天才遇到这个问题，对了，我程序里的那种判断有哪些不足之处恳请你帮忙看下，你遇到这种问题一般是如何处理的？

user: user-0
content: 引用 5 楼 user-3 的回复:[quote=引用 4 楼 u014325402 的回复:] [quote=引用 1 楼 user-3 的回复:] 很多汉字的第二个字节并不比 0x80 大。 GB2312的 第一、二字节都大于0x80,中文标点符号一样。[/quote]  GBK 可不是哦。  while(*ped != *(date + *len ))  这里是 ped != date + *len 吧。[/quote] n你说的这种以判断地址方式，也可以， 我那种是判断地址里的内容。

user: user-3
content: 引用 4 楼 u014325402 的回复:[quote=引用 1 楼 user-3 的回复:] 很多汉字的第二个字节并不比 0x80 大。 GB2312的 第一、二字节都大于0x80,中文标点符号一样。[/quote]  GBK 可不是哦。  while(*ped != *(date + *len ))  这里是 ped != date + *len 吧。

user: user-0
content: 引用 1 楼 user-3 的回复:很多汉字的第二个字节并不比 0x80 大。 GB2312的 第一、二字节都大于0x80,中文标点符号一样。
user-0 提问: 一个C的小程序，将一个浮点数的整数和小数剥离分别存入两个数组，再合并。但是小数部分合并后总是出错。

回复:
user: user-1
content: cents[i] = (long)(100.0*(amounts[i] - dollars[i])); 加一句：printf("%.20f\n", amounts[i] - dollars[i]);多打印几位小数点后的数字楼主就明白了 http://blog.csdn.net/hello_shadow/article/details/8824295

user: user-2
content: 引用 6 楼 a520025a 的回复:引用 3 楼 raining 的回复:cents[i] = (long)round(100.0*(amounts[i] - dollars[i])); 这个只是四舍五入吧？ 先四舍五入，在转为long

user: user-3
content: 浮点数格式 http://bbs.csdn.net/topics/390676437

user: user-4
content: 引用 7 楼 a520025a 的回复:[quote=引用 4 楼 paschen 的回复:] 因为你将浮点数直接转换成long并不是四舍五入，而是截断，如4.9得到的只是4  而很多十进制的小数用二进制是没法精确表示的，如5.02在内存中实际是5.01999998，按你公式计算并截断后就成了1  你应该使用四舍一篇而不是直接转换成long不应该取long？那也不对啊，四舍五入的话，比如5.146一截取就变成5.15了，有没有办法只是截取5.14不要四舍五入？[/quote]  乘以100后再四舍五入

user: user-0
content: 引用 2 楼 wang0635 的回复:几乎所有小数都存的不准确，比如5.2实际上存成了5.1999999之类没有解决办法吗？

user: user-0
content: 引用 4 楼 paschen 的回复:因为你将浮点数直接转换成long并不是四舍五入，而是截断，如4.9得到的只是4  而很多十进制的小数用二进制是没法精确表示的，如5.02在内存中实际是5.01999998，按你公式计算并截断后就成了1  你应该使用四舍一篇而不是直接转换成long不应该取long？那也不对啊，四舍五入的话，比如5.146一截取就变成5.15了，有没有办法只是截取5.14不要四舍五入？

user: user-0
content: 引用 3 楼 raining 的回复:cents[i] = (long)round(100.0*(amounts[i] - dollars[i])); 这个只是四舍五入吧？

user: user-2
content: cents[i] = (long)round(100.0*(amounts[i] - dollars[i]));

user: user-5
content: 几乎所有小数都存的不准确，比如5.2实际上存成了5.1999999之类

user: user-6
content: 觉得应该是类型转换的问题，坐等大神指导

user: user-4
content: 因为你将浮点数直接转换成long并不是四舍五入，而是截断，如4.9得到的只是4  而很多十进制的小数用二进制是没法精确表示的，如5.02在内存中实际是5.01999998，按你公式计算并截断后就成了1  你应该使用四舍一篇而不是直接转换成long
user-0 提问: 大神们帮我看看这段代码。。

回复:
user: user-1
content: #include "stdafx.h" #include<iostream> #include<string> #include<iomanip> using namespace std; #define N 4 void  main() {  int i,j;  int a[N][N];   for(i=0; i< N; i++)  { 	       for(j=0; j < N; j++) 	 { 		          a[i][j] = (i + 1)*(j+1); 	 }  }   for(i=0; i< N; i++)  { 	       for(j=0; j < N; j++) 	 { 		 if((j+1)==4) 			  cout<<a[i][j]<<endl; 		 else 			  cout<<a[i][j]<<"  "; 		 	 }  } }修改后的代码

user: user-0
content: 引用 6 楼 raining 的回复:第一个问题，n的值好像都还没有。  我后来加了一行 printf 来定义 n 的值

user: user-2
content: int a[i][j];这句错了，数组的大小必须是固定的。或者是使用动态分配内存

user: user-0
content: 引用 7 楼 60 的回复:你的代码有编译错误，注意看看错误提示。  我只是想打出  1  2 3 4  2  4 6 8 3  6 9 12 4  8 12 16  n*n 的样子。。但是算法就是错的，后来又添加了 printf 让用户自己填写初始数字，但还是不行的。。。

user: user-3
content: 你的代码有编译错误，注意看看错误提示。

user: user-4
content: 第一个问题，n的值好像都还没有。

user: user-5
content: int n, i, j;  int a[i][j];  // 不能这样定义数组，除非i，j为const变量，或者#define了i，j

user: user-0
content: 引用 4 楼 ko999123 的回复:int n; 	int **a; 	a = (int**)malloc(sizeof(int*)*n);  // 动态申请数组 	for (int i = 0; i< n;i++) 	{ 		a[i] = (int*)malloc(sizeof(int)*n); 	}  	for (int i = 0; i < n; i++) 	{ 		for (int j = 0; j < n ; j++) 		{ 			a[i][j] = (i+1)(j+1); 		} 	}  我的 i 和 j 是希望之后用户自行定义的。然后那个malloc这个我们还没有学到。。。

user: user-6
content: int n; 	int **a; 	a = (int**)malloc(sizeof(int*)*n);  // 动态申请数组 	for (int i = 0; i< n;i++) 	{ 		a[i] = (int*)malloc(sizeof(int)*n); 	}  	for (int i = 0; i < n; i++) 	{ 		for (int j = 0; j < n ; j++) 		{ 			a[i][j] = (i+1)(j+1); 		} 	}

user: user-7
content: int a[i][j]; 大小不能在编译时确定，需要动态申请内存  或者写成 int a[4][4];
user-0 提问: 求助帖，关于SM2用openssl实现

回复:
user: user-1
content: 库本身有椭圆参数，根据不同ID区分，比如1172是官方推荐的

user: user-2
content: 参考：https://download.csdn.net/download/csdddn/4604633

user: user-3
content: 同问 linux下
user-0 提问: do   while  循环出错的原因？？？？

回复:
user: user-1
content: 改正前应该是字符串没有以 \0  结尾

user: user-0
content: 怎样在不改变do  while 循环体结构下，将程序改对？？？？

user: user-2
content: 使用do while时，先读取文件内容，再判断文件读指针是否到达结尾

user: user-0
content: 程序我已改好了，可是我想知道那个do while 循环中为什么会错误！！！  我估计是do  while  循环中的  i++  出问题了，可是大家能给个合理的解释吗？？？（具体点最好了，哈哈）
user-0 提问: C语言的dalao们，来帮我看看个简单的问题!!!

回复:
user: user-0
content: 引用 3 楼 user-1 的回复:[quote=引用 2 楼 qq_15173325 的回复:] [quote=引用 1 楼 user-1 的回复:] 这个要查函数 mysql_query 吧，没有这个函数的任何信息。 我不要用res 获取mysql_query的返回值了吗？[/quote] 是不是获取返回值并不能改变返回值。你现在要查的是为什么返回值不对，那么应该去查函数本身。[/quote]  这个函数不是只要查到数据就会返回0吗？  但是有没有数据第一次都是返回0，第二次以后都返回1，我都不知道要怎么找问题

user: user-1
content: 引用 2 楼 qq_15173325 的回复:[quote=引用 1 楼 user-1 的回复:] 这个要查函数 mysql_query 吧，没有这个函数的任何信息。 我不要用res 获取mysql_query的返回值了吗？[/quote] 是不是获取返回值并不能改变返回值。你现在要查的是为什么返回值不对，那么应该去查函数本身。

user: user-0
content: 引用 1 楼 user-1 的回复:这个要查函数 mysql_query 吧，没有这个函数的任何信息。 我不要用res 获取mysql_query的返回值了吗？

user: user-1
content: 这个要查函数 mysql_query 吧，没有这个函数的任何信息。

user: user-1
content: 引用 4 楼 qq_15173325 的回复:[quote=引用 3 楼 user-1 的回复:] [quote=引用 2 楼 qq_15173325 的回复:] [quote=引用 1 楼 user-1 的回复:] 这个要查函数 mysql_query 吧，没有这个函数的任何信息。 我不要用res 获取mysql_query的返回值了吗？[/quote] 是不是获取返回值并不能改变返回值。你现在要查的是为什么返回值不对，那么应该去查函数本身。[/quote]  这个函数不是只要查到数据就会返回0吗？  但是有没有数据第一次都是返回0，第二次以后都返回1，我都不知道要怎么找问题[/quote] 按照你的描述，是函数有问题，你查这边有啥用呢？
user-0 提问: 合并两个有序的单链表 C语言

回复:
user: user-1
content: merge sortion

user: user-0
content: typedef struct {         node_t * head;         node_t * tail; } LL_t;   typedef struct _node{         int data;         struct _node *next; } node_t;  你是说这段code吗    prev1 , curre1 还有curr2 只是我自己创建的node

user: user-2
content: curr1, prev1等变量都没有赋初值啊，代码没法看明白。
user-0 提问: 求解

回复:
user: user-1
content: 引用 2 楼 berger 的回复:不好意思啊，手机端问题发不完整，问题补充如下： 在后续函数编辑时，形参却要用该指针的指针，理由是，该函数要修改列表，而c中要修改调用的变量，必须用指针，以上内容认可，但这个问题直接用指向节点的指针不也可以改变节点的内容吗？为什么一定要用指向节点的指针的指针呢？？看了下后面的函数定义过程，也是用*号对形参取了一次值再用的嘛……  比如为结点分配内存，你需要用指针的地址作为参数，否则函数参数是通过值传递的，函数中的指针只是一个复制品，你申请的内存只是赋值给一个复制后的指针，并没有改变原指针

user: user-2
content: 参考： 《深入理解C指针》  楼主可以写一个swap交换两个整数的函数，在main中：输出两个数，调用swap交换两个数，再输出两个数。 然后改写成交换两个指针变量的值，就容易理解为什么形参要用指针的指针了。

user: user-3
content: typedef typedef type-declaration synonym;  The typedef keyword defines a synonym for the specified type-declaration. The identifier in the type-declaration becomes another name for the type, instead of naming an instance of the type. You cannot use the typedef specifier inside a function definition.  A typedef declaration introduces a name that, within its scope, becomes a synonym for the type given by the decl-specifiers portion of the declaration. In contrast to the class, struct, union, and enum declarations, typedef declarations do not introduce new types — they introduce new names for existing types.  Example  // Example of the typedef keyword typedef unsigned long ulong;  ulong ul;     // Equivalent to "unsigned long ul;"  typedef struct mystructtag {    int   i;    float f;    char  c; } mystruct;  mystruct ms;   // Equivalent to "struct mystructtag ms;"  typedef int (*funcptr)();  // funcptr is synonym for "pointer                            //    to function returning int"  funcptr table[10];   // Equivalent to "int (*table[10])();"

user: user-0
content: 引用 7 楼 小灸舞的回复:要在函数内修改指针的指向，必须传指针的指针才行（因为形参和实参并不是同一个指针，他们只是指向同一个地址而已） 如果在函数内仅仅修改指针所指向的内存区域的值，传普通指针就行 嗯了解了，感谢…………

user: user-4
content: 要在函数内修改指针的指向，必须传指针的指针才行（因为形参和实参并不是同一个指针，他们只是指向同一个地址而已） 如果在函数内仅仅修改指针所指向的内存区域的值，传普通指针就行

user: user-2
content: 引用 5 楼 berger 的回复:感谢楼上两位解答，我说的例子中，形参如果不用指针的指针，是无法改变形参的值的，如果直接用指针，则只能利用它访问它指向的区域，而无法修改它本身的值，是这个意思没错吧？  对的

user: user-0
content: 感谢楼上两位解答，我说的例子中，形参如果不用指针的指针，是无法改变形参的值的，如果直接用指针，则只能利用它访问它指向的区域，而无法修改它本身的值，是这个意思没错吧？

user: user-0
content: 不好意思啊，手机端问题发不完整，问题补充如下： 在后续函数编辑时，形参却要用该指针的指针，理由是，该函数要修改列表，而c中要修改调用的变量，必须用指针，以上内容认可，但这个问题直接用指向节点的指针不也可以改变节点的内容吗？为什么一定要用指向节点的指针的指针呢？？看了下后面的函数定义过程，也是用*号对形参取了一次值再用的嘛……

user: user-1
content: typedeff可以为某个类型取一个别名，要吧将一个节点的结构体类型用ypdedef指定一个别名  另参看：http://en.cppreference.com/w/cpp/language/typedef
user-0 提问: C语言调用函数传输指针变量问题

回复:
user: user-1
content: 你的变量定义方式肯定不一样，一个是指针，一个是非指针

user: user-0
content: 谢谢各位了，问了一个学长，已经解决的

user: user-2
content: 建议你贴一下代码。 什么叫传输方式不同？ 在函数内要改变指针的指向，必须传二级指针。 在函数内如果仅仅需要改变指针所指的内容，传一级指针就足够。

user: user-3
content: 给出的信息太少。可能L只是一个指针，没有分配内存。 运行阶段出错，可以考虑用异常来处理和定位错误。
user-0 提问: 关于const char* 与 char*的问题

回复:
user: user-1
content: 引用问题来了，p指向的目标和cp指向的目标相同，换句话讲，p指向的目标就是cp指向的目标，那么p指向的目标可以被修改，也就是说cp指向的目标可以被修改了？如果这个逻辑没错，为何*cp='c' 会报错呢？  const char* 指向的地址不能去修改，但不表示其只能指向不能被修改的内存地址，也不表示他指向的内存一定要是不能修改的

user: user-2
content: cp是常量，所以不能够通过cp来改变其地址值。

user: user-2
content: p没有限制，所以可以通过p来改变其地址值。

user: user-2
content: const表示的是常量，意思就是只能够读，不能够写。

user: user-3
content: 允许通过 p 改，但是不允许通过 cp 来改。
user-0 提问: c语言内容求助

回复:
user: user-1
content: 引用 2 楼 baidu_36765881 的回复:您好，如果避免局部变量与形参同名应该怎样定义呢，我这部分学的很蒙。。。 额。。。。你把它改个名字就可以了啊 int a[10][10]={0}, i=0,j=0,temp=0;这句里的int a[10][10]应该没用吧，你函数里写的那些a应该是传进来的参数

user: user-0
content: 您好，如果避免局部变量与形参同名应该怎样定义呢，我这部分学的很蒙。。。

user: user-1
content: 函数调用的时候用special (b);还有你的函数写的也不对吧，局部变量a[10][10]和形参同名了啊
user-0 提问: 关于pow(double x,double y)函数的小问题

回复:
user: user-1
content: pow没有参数为int的版本，建议传参时用显示类型转换  浮点会有精度误差，这样可能导舍入后结果错误  区分整数除法与浮点数除法

user: user-2
content: 浮点数格式 http://bbs.csdn.net/topics/390676437

user: user-0
content: 引用 1 楼 user-3 的回复:C 语言的运算符的运算规则 与 数学 中的是不同。  C 语言中的运算符在数值运算之外，还要考虑参与运算的对象的类型，结果的类型，等，并且根据这些不同可能给出不同的结果。  同时，C 语言中的浮点类型不能精确表示所有十进制小数，有很多事近似值（就想十进制里，用 0.333333 表示 1/3）。  ================================ pow 的结果是double，i 与 z 是 int 。  i / pow(...) ，是 int 与 double 的除法，会按 double 与 double 的除法处理，结果为 double 。 z = pow(...) ，隐含了一个 double 到 int 的转换。 i / z ，是 int 与 int 的除法，结果为 int 。 意思就是类型不匹配，必须要用一个中间变量将double隐式转换成同类型的数才可以进行带入吗？

user: user-3
content: C 语言的运算符的运算规则 与 数学 中的是不同。  C 语言中的运算符在数值运算之外，还要考虑参与运算的对象的类型，结果的类型，等，并且根据这些不同可能给出不同的结果。  同时，C 语言中的浮点类型不能精确表示所有十进制小数，有很多事近似值（就想十进制里，用 0.333333 表示 1/3）。  ================================ pow 的结果是double，i 与 z 是 int 。  i / pow(...) ，是 int 与 double 的除法，会按 double 与 double 的除法处理，结果为 double 。 z = pow(...) ，隐含了一个 double 到 int 的转换。 i / z ，是 int 与 int 的除法，结果为 int 。
user-0 提问: 利用栈判断括号是否配对且不相交，哪里错了呀

回复:
user: user-1
content: 程序第19行，if(a[top-1] == a[j])，你这里是要判断if(stack[top-1] == a[j])么？还有，你前面写的都是正向的括号，例如{,(,[，而a[j]的位置都是反向的括号，例如},),]，这个判断是无法成立的，需要你做单独处理。 顺便说一下，这个不是什么机密文件不用贴图吧？贴图还贴一张歪的，这明显是不想让人细看的节奏哈。

user: user-2
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-3
content: 仅供参考：#include<stdio.h> #include<malloc.h> #include<string.h> #define STACK_INIT_SIZE 10 #define STACK_GROW_SIZE 5 #define ELEMTYPE char #define OK 1 #define ERROR 0 typedef struct { /*建立一个栈的首结点*/     ELEMTYPE * base;     ELEMTYPE * top;     int stacksize; } SpStack; int InitStack(SpStack *s) { /*建立空的栈并返回首地址*/     s->base=((ELEMTYPE*)malloc(STACK_INIT_SIZE*sizeof(ELEMTYPE)));     if (!s->base) return ERROR;     s->top=s->base;     s->stacksize=STACK_INIT_SIZE;     return OK; } int StackEmpty(SpStack *s) { /*判断栈是否为空*/     if (s->top==s->base) return OK;     else                 return ERROR; } int Push(SpStack *s,ELEMTYPE e) { /*往栈顶插入元素即进栈*/     if (s->top-s->base>=s->stacksize) { /*判断是否栈满*/         s->base=((ELEMTYPE*)realloc(s->base,(s->stacksize+STACK_GROW_SIZE)*sizeof(ELEMTYPE)));         if (!s->base) return ERROR;         s->stacksize+=STACK_GROW_SIZE;         s->top=s->base+s->stacksize;     }     *s->top++=e;     return OK; } int Pop(SpStack *s,ELEMTYPE *e) { /*让栈顶元素依次输出即出栈*/     if (StackEmpty(s)) return ERROR;     *e=*(--s->top);     return OK; } int Comp(ELEMTYPE a,ELEMTYPE b) {     if ((a=='('&&b!=')')       ||(a=='['&&b!=']')       ||(a=='{'&&b!='}')) {         return ERROR;     } else return OK; } int Count(SpStack *s) {     ELEMTYPE e[STACK_INIT_SIZE*2];     ELEMTYPE e1;     int i;      InitStack(s);     fgets(e,STACK_INIT_SIZE*2,stdin);     if ('\n'==e[strlen(e)-1]) e[strlen(e)-1]=0;     printf("%s\n",e);     for (i=0;e[i]!='\0';i++) {         switch (e[i]) {         case '(':         case '[':         case '{':             Push(s,e[i]);             break;         case ')':         case ']':         case '}':             if (StackEmpty(s)) {                 printf("%*s↖右括号多余\n",i+1,"");                 return(ERROR);             } else Pop(s,&e1);             if (!Comp(e1,e[i])) {                 printf("%*s↖左右匹配出错\n",i+1,"");                 return(ERROR);             }         }     }     if (!StackEmpty(s)) {         printf("%*s↖左括号多余\n",i,"");         return(ERROR);     } else {         printf("匹配正确\n");         return(OK);     } } void main() {     SpStack s;     Count(&s);     free(s.base); }
user-0 提问: 这是出现空指针了吗，请各位高手帮帮忙

回复:
user: user-1
content: LinkList L;是对象的形式，不需要分配内存了，只有写成LinkList *L;这样的指针形式才需要分配内存 本来形参L是指向你main函数中分配的内存的，你L = (LinkList*)malloc(sizeof(LNode));后，形参就指向新malloc的内存了。

user: user-0
content: 这样真的没有出错了，是因为我重复分配内存了吗，，能具体解释一下吗，谢谢

user: user-2
content: 你主函数中LinkList L;  L本身就是一个对象，不需要在InitList中再分配内存
user-0 提问: C语言程序运行结果是乱码

回复:
user: user-1
content: 最简单的办法。。重新写程序。。

user: user-2
content: http://stackoverflow.com/questions/5939573/what-float-value-makes-sprintf-s-produce-1-qo

user: user-3
content: 检查浮点数是否除以了0

user: user-4
content: 没源程序怎么知道？
user-0 提问: C语言程序运行结果乱码

回复:
user: user-1
content: http://stackoverflow.com/questions/5939573/what-float-value-makes-sprintf-s-produce-1-qo

user: user-2
content: 上源码。光看输出结果猜不出原因。 我可以写个程序，让它就输出楼主的这些乱码。  所以结果可能相同，但是原因不同，想查清原因，只有调试源码。

user: user-3
content: 检查浮点数是不是除了0
user-0 提问: 当输入int a[4][4]={a[1][1]=0}的结果

回复:
user: user-1
content: 我猜楼主需要的是这个：  int a[4][4]={[1][1]=1};  这个需要一个至少支持 C99 的编译器才行。

user: user-2
content: 尽量按照标准的写法初始化

user: user-3
content: 不知道楼主是用什么编译器编译的，我在用C编译器编译的时候只有a[0][0]被初始化为1，而其他值并没有。在使用g++编译的时候才会出现这种情况，原因楼上已经说了。至于C编译的时候只有a[0][0]初始化为1估价是编译器先计算了a[3][3] = 1，然后再对int a[4][4]进行了初始化，只把位置a[0][0] 初始化为a[3][3]，之后又把a[3][3]改为了0。 感觉这种知道就行，如果用于实际会让人很崩溃

user: user-1
content: 这才 C 中是不合法的。

user: user-4
content: 这样的语句最好别用。

user: user-5
content: int a[4][4]={1,2,3} 会将前3个元素赋值1 2 3，你后面的表达式是在第一个元素的位置，所以会初始第一个元素

user: user-5
content: 应该是 nt a[4][4]={a[1][1]=1吧，先初始化了a[1][1]，使之为1，因为是第一个，所以用此值初始数组第一个元素（a[0][0]），于是其值也为1，其余没初始使的会用0填充

user: user-6
content: 不是 int a[4][4]={a[1][1]=0} 的时候吧。 把最后那个0改为1才能得到你说的结果。 就是 int a[4][4]={a[1][1]=1}  a[1][1]=1 这个表达式的值也是1，所以相当于 int a[4][4] = {1} 这里初始化了a[0][0]
user-0 提问: 图的邻接表存储，帮忙看一下错在哪

回复:
user: user-1
content: scanf读取%c的时候，要注意输入缓冲区是不是有遗留的字符（比如回车符） 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。
user-0 提问: 讲二维数组做实参传递到函数中

回复:
user: user-0
content: 引用 4 楼 cyfcsd 的回复:[quote=引用 2 楼 KOMO_TI 的回复:] 就是说，比如说我的二维数组是int arr[2][3]，然后我创建了一个函数int **fun(int arr_a[3])，现在我想把我的arr[1][0-2]的内容作为实参传到函数形参中，在主函数中调用fun(arr[1]),那我调用的是arr[1]的首地址，那么arr_a指的地址不就是arr[1][0]的地址么,那我在函数中调用arr_a[1]不就相当于在调用arr[1][1]么？但编译器说不能这么弄，我想知道为什么，然后也想问一下，有什么办法能够完成将arr[1]这部分值传过去？ 可以啊，你用的什么编译器啊，fun(arr[1])就是把第二行元素的首地址传过去了，arr_a[1]就是arr[1][1] 不过你要想传arr[1][0-2]就必须把函数定义为fun(int arr_a[], int n)然后用fun(arr[1], 2)去调用，否则在函数里你只能自己判断到底下标最大值是多少[/quote]不好意思，把这事忘了，一直没结帖

user: user-0
content: 引用 3 楼 zzz3265 的回复:可以的, 参考  int	test(int ary[]) { 	return ary[0]+ary[1]+ary[2]; }  void	main1() { 	int		i, dat[4][4]; 	for(i=0; i<16; i++) 		dat[0][i] = i; 	int		c=test(dat[2]); } 不好意思，把这事忘了，一直没结帖

user: user-1
content: 引用 1 楼 cyfcsd 的回复:不知道你的代码是干什么的，里面好像没有传二维数组的地方啊，值看到返回一个二维数组 传递二维数组一般用数组指针的形式，int (*p)[n]这种，或者写成 int a[][n] 至于你说的传一部分，传递数组本来就是只传一个首地址，后面数组长度要另外用别的参数传递！  这个回答不错，赞一个

user: user-2
content: 引用 2 楼 KOMO_TI 的回复:就是说，比如说我的二维数组是int arr[2][3]，然后我创建了一个函数int **fun(int arr_a[3])，现在我想把我的arr[1][0-2]的内容作为实参传到函数形参中，在主函数中调用fun(arr[1]),那我调用的是arr[1]的首地址，那么arr_a指的地址不就是arr[1][0]的地址么,那我在函数中调用arr_a[1]不就相当于在调用arr[1][1]么？但编译器说不能这么弄，我想知道为什么，然后也想问一下，有什么办法能够完成将arr[1]这部分值传过去？ 可以啊，你用的什么编译器啊，fun(arr[1])就是把第二行元素的首地址传过去了，arr_a[1]就是arr[1][1] 不过你要想传arr[1][0-2]就必须把函数定义为fun(int arr_a[], int n)然后用fun(arr[1], 2)去调用，否则在函数里你只能自己判断到底下标最大值是多少

user: user-3
content: 可以的, 参考  int	test(int ary[]) { 	return ary[0]+ary[1]+ary[2]; }  void	main1() { 	int		i, dat[4][4]; 	for(i=0; i<16; i++) 		dat[0][i] = i; 	int		c=test(dat[2]); }

user: user-0
content: 就是说，比如说我的二维数组是int arr[2][3]，然后我创建了一个函数int **fun(int arr_a[3])，现在我想把我的arr[1][0-2]的内容作为实参传到函数形参中，在主函数中调用fun(arr[1]),那我调用的是arr[1]的首地址，那么arr_a指的地址不就是arr[1][0]的地址么,那我在函数中调用arr_a[1]不就相当于在调用arr[1][1]么？但编译器说不能这么弄，我想知道为什么，然后也想问一下，有什么办法能够完成将arr[1]这部分值传过去？  引用 1 楼 cyfcsd 的回复:不知道你的代码是干什么的，里面好像没有传二维数组的地方啊，值看到返回一个二维数组 传递二维数组一般用数组指针的形式，int (*p)[n]这种，或者写成 int a[][n] 至于你说的传一部分，传递数组本来就是只传一个首地址，后面数组长度要另外用别的参数传递！

user: user-2
content: 不知道你的代码是干什么的，里面好像没有传二维数组的地方啊，值看到返回一个二维数组 传递二维数组一般用数组指针的形式，int (*p)[n]这种，或者写成 int a[][n] 至于你说的传一部分，传递数组本来就是只传一个首地址，后面数组长度要另外用别的参数传递！
user-0 提问: 求大神看看语法上哪里出错了

回复:
user: user-1
content: scanf读取%c的时候，要注意输入缓冲区是不是有遗留的字符（比如回车符） 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-2
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 //请今后要用 int c; scanf("%c",&c); //时，都改为 char s[2]; int c; scanf("%1s",s); c=s[0];

user: user-3
content: 我撤销我说的话，没有语法错误，抱歉啊

user: user-3
content: 我好像认为你结构哪里出错了，是那样初始化吗

user: user-4
content: 大神没看到语法错误！
user-0 提问: 请帮忙看看错误出在哪？？？？

回复:
user: user-0
content: 输出 的 是  0

user: user-0
content: #include <stdio.h>      int main()   {       int i,j;       int c = i / 10000;       printf("请输入利润：");       scanf("%d",&i);       if(c > 10)           c = 10;       switch(c)       {           case 0:               j = i * 0.1;               break;           case 1:               100000 * 0.1 + ( i - 100000 ) * 0.075;               break;           case 2:               break;           case 3:               200000 * 0.1 + (i - 200000) * 0.05;               break;           case 4:               break;           case 5:               400000 * 0.1 + (i - 400000) * 0.03;               break;           case 6:               break;           case 7:               break;           case 8:               break;           case 9:               600000 * 0.1 + (i - 600000) * 0.015;               break;           case 10:               1000000 * 0.1 + (i - 1000000) * 0.01;               break;           default:               break;          }       printf("利润是：%d\n",j);       return 0;   }   这个错误在哪？？？？

user: user-0
content: 谢谢啦  各位

user: user-1
content: case'B' :Printf("80~89\n");break; 的“P”大写了

user: user-2
content: case'B' :Printf("80~89\n");break; 中：  Printf 改成 printf

user: user-3
content: 学会看错误提示

user: user-4
content: 有个 printf   P 大写了
user-0 提问: 帮我看看这个小程序哪里出问题了

回复:
user: user-0
content: 哎呀，好气啊。。没注意到

user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-2
content: while循环是个死循环，每次i没有变化，j会一直不为0

user: user-3
content: 你这个while (j != 0)   //循环求i一共有几位数 		{ 			j = i / 10; 			k++; 		} 死循环了，你的i都没有变化 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-4
content: while循环一直出不来
user-0 提问: 32位环境下写的代码，在64位环境下运行结果错误，求解

回复:
user: user-0
content: 谢谢楼上大佬们的解答，重新写了一下，没问题了

user: user-1
content: 这个32位下也是不正确的。不信你试试列向量(1 2 3) 乘以行向量(4 5 6)。

user: user-2
content: 不想改的话 可以试一下用兼容模式运行看会不会出错

user: user-0

user: user-0
content: 猜测应该是bool Matmult(TSMatrix t1,TSMatrix t2,TSMatrix &mt)函数的问题
user-0 提问: 文本读取两个字符串问题

回复:
user: user-1
content: 你药品编号几个字符？三个字符的话可以存的下。4个字符的话就存不下, 字符串结束符 跑到后面变量的位子去了。后面变量赋值之后，两个字符串就连起来了额。 不妨把编号数组设长点儿， 另外首先把Medecine清零：  memset(&Medcine, 0,  sizeof(DataType)*10);

user: user-2
content: 初始化一下   for (; i < line; i++) { memset(Medcine[i].num, 0, 4); memset(Medcine[i].name, 0, 32); fscanf(pFile, "%s", Medcine[i].num);  fscanf(pFile, "%s\t%f\t%d\t%f", Medcine[i].name, &Medcine[i].price, &Medcine[i].count, &Medcine[i].sale);         cout << Medcine[i].num << '\t'<<Medcine[i].name << '\t' << Medcine[i].price << '\t' << Medcine[i].count << '\t' << Medcine[i].sale << endl; } }

user: user-1
content: 编号尾巴上少了字符串结束符'\0'

user: user-0
content: 编译器是vs2015

user: user-0
content: 回复一楼加上\0没有用， fscanf(pFile, "%s", Medcine[i].num);  cout << Medcine[i].num ; fscanf(pFile, "%s\t%f\t%d\t%f", Medcine[i].name, &Medcine[i].price, &Medcine[i].count, &Medcine[i].sale);         cout<<Medcine[i].name << '\t' << Medcine[i].price << '\t' << Medcine[i].count << '\t' << Medcine[i].sale << endl; 这样输出和上面就不一样是什么引起的

user: user-0
content: 不行啊，是不是cout原因
user-0 提问: 请问这个用vc++6.0与VS2012分别怎么用

回复:
user: user-1
content: VC++6.0创建c++工程： http://jingyan.baidu.com/article/1612d50058c986e20f1eee77.html vs创建c++工程 这两个都是详细的教程，照着一步步做就可以了

user: user-2
content: C++里没有public static long GetNum(int n)这种语法
user-0 提问: scanf函数输入浮点数时，格式控制字符串包含了忽略空格，函数怎么知道一个数输入结束？

回复:
user: user-1
content: 看起来大家很喜欢揪scanf这个函数的问题啊，前面还有人提回车啥的，楼主%*[ ,$]%lf是针对%lf前面忽略掉一个空格、逗号、$，而$2. 50，这个值$2.已经满足了%*[ ,$]%lf的录入条件，因此赋值结束，进入下一次赋值，也就是说，如果楼主数组长度再多一个，就会发现amounts[4]上将50读进去了。 说实话scanf这种貌似知道有这么回事，知道处理模式就好，没有人会真的不做任何出错处就硬靠scanf这点特性来写程序。那纯粹就是坐等程序崩溃的节奏。

user: user-2
content: 仅供参考：#include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 //k,v,n=0,123,3 //skip char[ ] //k,v,n=0,123,3 //skip char[a] //k,v,n=0,123,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.

user: user-0
content: 引用 4 楼 zzz3265 的回复:scanf 设置的格式控制只能忽略前面的部分, 中间的空格是没用的 如果现有的数据跟预想的数据格式不一致, 那就把这个先处理下转换下, 把这个空格删掉 那请问是不是只能先将其作为字符串读入，然后进行判断，截取，转换？

user: user-2
content: 不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:仅供参考：#include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 //k,v,n=0,123,3 //skip char[ ] //k,v,n=0,123,3 //skip char[a] //k,v,n=0,123,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.  谢谢赵老师！看了这段代码我明白两点：一是scanf读取整数时，忽略前面的空格。%n格式转换符，不仅计算前面读入的整数，还要计算前面忽略的空格字符数。二是当我把p删除，直接用数组名s来替代p时，提示错误，原因应该是数组s是个常量字符串数组，数组名s是个常量字符串指针，不能进行递加、复合赋值操作。不知道理解是否正确？

user: user-3
content: scanf 设置的格式控制只能忽略前面的部分, 中间的空格是没用的 如果现有的数据跟预想的数据格式不一致, 那就把这个先处理下转换下, 把这个空格删掉

user: user-4
content: 引用 2 楼 lbc_77 的回复:[quote=引用 1 楼 user-4 的回复:] $2.  50 这里你点后面多了个空格。 这个是书上的原题，本来就有个空格的。 [/quote]  你输入时输入$2.50

user: user-0
content: 引用 1 楼 user-4 的回复:$2.  50 这里你点后面多了个空格。 这个是书上的原题，本来就有个空格的。

user: user-4
content: $2.  50 这里你点后面多了个空格
user-0 提问: 新手简单编程一些求教大神

回复:
user: user-1
content: for(i=1;i<=numword;i++) 		for(j=1,k=start;;j++)  内存循环一直退出不了，导致溢出崩溃  建议单步跟踪程序运行，观察分析原因

user: user-2
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。
user-0 提问: 求解答

回复:
user: user-1
content: 引用 2 楼 user-2 的回复:你的s是个结构体数组，你字符数组内容复制到结构体数组想干嘛 想考验考验C编译器在AI方面的最新进展。

user: user-0
content: 这就是一个面试题  ，我就想知道经过memcpy函数后，s这个结构体数组变成什么样了

user: user-2
content: 你的s是个结构体数组，你字符数组内容复制到结构体数组想干嘛

user: user-0
content: 顶起来 不要沉
user-0 提问: automake 如何生成预编译后的文件

回复:
user: user-1
content: 不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件，或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如： A将请求数据写到文件a.txt，写完后改名为aa.txt B发现aa.txt存在时，读取其内容，调用相应功能，将结果写到文件b.txt，写完后删除aa.txt，改名为bb.txt A发现bb.txt存在时，读取其内容，读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境，B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢？ 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话，文本文件的格式问题可参考json或xml  共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多，下面仅列出我现在能想到的： ·进程之间松耦合 ·进程可在同一台机器上，也可跨机，跨操作系统，跨硬件平台，甚至跨国。 ·方便调试和监视，只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务，只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务，而且几乎不可能发生队列满的情况（除非硬盘空间满） ·……  “跨语言、跨机，跨操作系统，跨硬件平台，跨国，跨*.*的”苦海无边， 回头是“使用共享纯文本文件进行信息交流”的岸！
user-0 提问: void *在函数中传递数组的问题

回复:
user: user-1
content: 就是这个啦 引用 3 楼 qq_36409192 的回复:函数没有返回值(返回d1)，那么你在函数体里面改变了d1的值并不会影响你主函数中d1的值。所以你输出的其实就是两个不同的d1。

user: user-2
content: 你想在getdata函数内，改变指针的指向，必须传一级指针的引用或者二级指针才行

user: user-3
content: 函数没有返回值(返回d1)，那么你在函数体里面改变了d1的值并不会影响你主函数中d1的值。所以你输出的其实就是两个不同的d1。

user: user-4
content: getdata 的d1在栈上，被改变了……与main 的d1是不一样的。

user: user-5
content: 维数只是偏移量的算法不同，传首地址就OK，而且跟void没有任何关系 用float就OK

user: user-6
content: 打印出来结果肯定是不同的，因为函数参数是按值传递的，函数中的参数只是一个复制后的d1，而不是主函数中的d1
user-0 提问: C语言位字段

回复:
user: user-1
content: http://c.biancheng.net/cpp/html/102.html

user: user-0
content: 引用 3楼user-4 的回复:问题3 ：看头文件<limits.h>中的宏UINT_MAX那剩下几点对不对？

user: user-2
content: 仅供参考：#include <stdio.h> #pragma pack(push,1) union U {     unsigned char byte;     struct BF {         unsigned int b0:1;//a         unsigned int b1:1;//b         unsigned int b2:1;//c     } bf; } u; #pragma pack(pop) unsigned char bt; int a,b,c; int main() {     for (bt=0;bt<8;bt++) {         u.byte=(unsigned char)bt;         a=u.bf.b0;         b=u.bf.b1;         c=u.bf.b2;         printf("byte 0x%02x -- c:%d b:%d a:%d\n",bt,c,b,a);     }     for (c=0;c<2;c++)     for (b=0;b<2;b++)     for (a=0;a<2;a++) {         u.bf.b0=a;         u.bf.b1=b;         u.bf.b2=c;         bt=u.byte;         printf("c:%d b:%d a:%d -- byte 0x%02x\n",c,b,a,bt);     }     return 0; } //byte 0x00 -- c:0 b:0 a:0 //byte 0x01 -- c:0 b:0 a:1 //byte 0x02 -- c:0 b:1 a:0 //byte 0x03 -- c:0 b:1 a:1 //byte 0x04 -- c:1 b:0 a:0 //byte 0x05 -- c:1 b:0 a:1 //byte 0x06 -- c:1 b:1 a:0 //byte 0x07 -- c:1 b:1 a:1 //c:0 b:0 a:0 -- byte 0x00 //c:0 b:0 a:1 -- byte 0x01 //c:0 b:1 a:0 -- byte 0x02 //c:0 b:1 a:1 -- byte 0x03 //c:1 b:0 a:0 -- byte 0x04 //c:1 b:0 a:1 -- byte 0x05 //c:1 b:1 a:0 -- byte 0x06 //c:1 b:1 a:1 -- byte 0x07

user: user-3
content: http://en.cppreference.com/w/cpp/language/bit_field

user: user-4
content: 问题3 ：看头文件<limits.h>中的宏UINT_MAX

user: user-4
content: 问题2，所有整数型[signed / unsigned]<char, short, int, long, long long>

user: user-4
content: 问题1：是整个为32
user-0 提问: 关于调用typedef结构体变量的疑问

回复:
user: user-1
content: 我猜是字节对齐不一致或未初始化或乱踩内存惹的祸。

user: user-2
content: 如果是debug版本调试，建议rebuild工程， 如果是release版本调试，则不可直接相信VS的输出值，那是不准确的

user: user-3
content: 你函数有没用对，dwStop为3452816845可能这个变量还未初始化
user-0 提问: 关于回调函数的理解

回复:
user: user-1
content: 还可以在回调函数中设断点，当中断时，看Call Stack获知回调函数是被谁调用的。

user: user-1
content: 参考crt\src\qsort.c

user: user-2
content: 引用 3 楼 qq_18310569 的回复:[quote=引用 1 楼 u010370871 的回复:] // initiate HAL (must provide valid argument otherwise HAL_Init will return error(S_ERR_PARA).) 你这下边不是有注释么  我是说程序的执行过程，就是如何体现回调的？static void CBError(S_ERR _err)在2楼。[/quote] 没体现回调，赋值到s_fpError 了。然后由s_fpError 做后续处理。

user: user-0
content: 引用 1 楼 u010370871 的回复:// initiate HAL (must provide valid argument otherwise HAL_Init will return error(S_ERR_PARA).) 你这下边不是有注释么  我是说程序的执行过程，就是如何体现回调的？static void CBError(S_ERR _err)在2楼。

user: user-0
content: static void CBError(S_ERR _err) { 	if( S_ERR_NO_BUFFER == _err) 	{         // blank 	} 	else 	{ 		HAL_Reset(); 		init_appl_data(); 	} }

user: user-3
content: // initiate HAL (must provide valid argument otherwise HAL_Init will return error(S_ERR_PARA).) 你这下边不是有注释么
user-0 提问: 初学者，我用c语言写的水仙花数为什么不对

回复:
user: user-1
content: 除了pow函数参数len不等于3。在for循环里，每次循环，sum没有清零。

user: user-2
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-3
content: double c＝pow(r,len)这句话，你求的是r的len次方，而不是r的3次方。你觉得呢？你可以把len改成3，我用手机逛的论坛。没有办法为你测试了

user: user-4
content: 建议单步跟踪程序运行，观察每一步结果与你期望的是否一致
user-0 提问: 求解  谢谢

回复:
user: user-1
content: fread和fwrite用于读写记录，这里的记录是指一串固定长度的字节，比如一个int、一个结构体或者一个定长数组。参数size指出一条记录的长度，而nmemb指出要读或写多少条记录，这些记录在ptr所指的内存空间中连续存放，共占size * nmemb个字节，fread从文件stream中读出size * nmemb个字节保存到ptr中，而fwrite把ptr中的size * nmemb个字节写到文件stream中。      nmemb是请求读或写的记录数，fread和fwrite返回的记录数有可能小于nmemb指定的记录数。例如当前读写位置距文件末尾只有一条记录的长度，调用fread时指定nmemb为2，则返回值为1。如果当前读写位置已经在文件末尾了，或者读文件时出错了，则fread返回0。如果写文件时出错了，则fwrite的返回值小于nmemb指定的值。下面的例子由两个程序组成，一个程序把结构体保存到文件中，另一个程序和从文件中读出结构体  下面是一个例子，供参考：  #include <stdio.h>   #include <stdlib.h>   struct record  {       char name[10];       int age;   };   int main(void)   {   	struct record array[3] = {{"熊猫", 24}, {"狗", 15},{"仙鹤",80}};       FILE *fp = fopen("recfile.txt", "w");       if (fp == NULL)  	{           perror("Open file recfile.txt");           exit(1);       }       fwrite(array, sizeof(struct record), 3, fp);       fclose(fp);  	fp = fopen("recfile.txt", "r");       if (fp == NULL)  	{           perror("Open file recfile.txt");           exit(1);       }       fread(array, sizeof(struct record), 3, fp);       printf("Name1: %s\tAge1: %d\n", array[0].name, array[0].age);       printf("Name2: %s\tAge2: %d\n", array[1].name, array[1].age);  	printf("Name3: %s\tAge3: %d\n", array[2].name, array[2].age);      fclose(fp);       return 0;   }

user: user-1
content: nanan.txt这个文件，你怎么写的？

user: user-2
content: 你读的时候就顺便打印下看看fread有没有成功。 看看是读取的问题还是你链表的连接问题

user: user-0
content: 引用 7楼振翅高飞 的回复:nanan.txt这个文件，你怎么写的？直接在D盘存了有九个int型整数的一个记事本

user: user-3
content: 推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-4
content: "D:\nanan.txt"  改成：  "D:\\nanan.txt"

user: user-0
content: 用的devc++

user: user-0

user: user-0
content: 那应该不影响，加了也不行，还是读不出数据，

user: user-2
content: 路径应该是2个反斜杠或者1个正斜杠 fp = fopen("D:\\nanan.txt", "rb");  单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。
user-0 提问: linux下socket连接返回报文丢失问题

回复:
user: user-1
content: 看链接指向的帖子。

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:建议楼主先学会使用抓包软件比如wireshark  void HexDump(char *buf,int len,int addr) {     int i,j,k;     char binstr[80];      for (i=0;i<len;i++) {         if (0==(i%16)) {             sprintf(binstr,"%08x -",i+addr);             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         } else if (15==(i%16)) {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);             sprintf(binstr,"%s  ",binstr);             for (j=i-15;j<=i;j++) {                 sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');             }             printf("%s\n",binstr);         } else {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         }     }     if (0!=(i%16)) {         k=16-(i%16);         for (j=0;j<k;j++) {             sprintf(binstr,"%s   ",binstr);         }         sprintf(binstr,"%s  ",binstr);         k=16-k;         for (j=i-k;j<i;j++) {             sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');         }         printf("%s\n",binstr);     } }   不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://bbs.csdn.net/topics/380167545你在说禅啊，我咋听不懂

user: user-1
content: 建议楼主先学会使用抓包软件比如wireshark  void HexDump(char *buf,int len,int addr) {     int i,j,k;     char binstr[80];      for (i=0;i<len;i++) {         if (0==(i%16)) {             sprintf(binstr,"%08x -",i+addr);             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         } else if (15==(i%16)) {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);             sprintf(binstr,"%s  ",binstr);             for (j=i-15;j<=i;j++) {                 sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');             }             printf("%s\n",binstr);         } else {             sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);         }     }     if (0!=(i%16)) {         k=16-(i%16);         for (j=0;j<k;j++) {             sprintf(binstr,"%s   ",binstr);         }         sprintf(binstr,"%s  ",binstr);         k=16-k;         for (j=i-k;j<i;j++) {             sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');         }         printf("%s\n",binstr);     } }   不知道有多少前人掉在TCP Socket send(人多)send(病少)send(财富) recv(人多病)recv(少财富) 陷阱里面啊！ http://bbs.csdn.net/topics/380167545

user: user-0
content: 引用 1 楼 sunyongliang118 的回复:单步调试。或者你贴全代码，别人给你调试。这就是全码，最多没包含引入的库文件

user: user-2
content: 单步调试。或者你贴全代码，别人给你调试。
user-0 提问: char *a[10]与a[10][10]的区别，用itoa函数时发现错误

回复:
user: user-1
content: char *a[10] 数组中每个元素是一个指针，但你需要为指针分配了内存才能使用  而char a[10][10] 是一个二维数组，已经分配好了空间

user: user-2
content: 引用 9 楼 zhao4zhong1 的回复:http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素 http://edu.csdn.net/course/detail/2455 C语言指针与汇编内存地址-二.函数 http://edu.csdn.net/course/detail/2517 C语言指针与汇编内存地址-四.三维数组 赞！

user: user-3
content: http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素 http://edu.csdn.net/course/detail/2455 C语言指针与汇编内存地址-二.函数 http://edu.csdn.net/course/detail/2517 C语言指针与汇编内存地址-四.三维数组

user: user-2
content: 引用 7 楼 zhao4zhong1 的回复:http://edu.csdn.net/course/detail/2516 C语言指针与汇编内存地址-三.数组和二维数组  请问其他课视频在哪？

user: user-3
content: http://edu.csdn.net/course/detail/2516 C语言指针与汇编内存地址-三.数组和二维数组

user: user-2
content: char a[100][100];   sizeof(a)等于10000 char* b[100];  sizeof(b)等于400 说明b数组里面只是100个指针，且没有分配内存。可以这样分配内存： for(i=0; i<100; i++) {         b[i] = new char [100]; } 但是要自己释放内存。 for(i=0; i<100; i++) {         delete [] b[i]; }

user: user-0
content: 谢谢各位，我懂了

user: user-4
content: char *a[100];是指针数组的形式， a有100个元素（每个元素是个char *指针），并且没有初始化过，指向了未知区域，尝试写入会出现异常

user: user-5
content: 你犯了两个错误:1.指针没有初始化;2.没内存，你往哪写？？

user: user-6
content: 简单说就是char* a和char a[10]的区别，一个是没有指向任何有效内存的指针，一个字符数组

user: user-7
content: char *a[10]是定义了齐哥字符指针，也可以说是10个字符串，但是没有分配空间，需要手动申请  a[10][10]是定了10*10的二维字符数组，最多可以存储100个字符，也可以说最多存储10个长度不超过10的字符串
user-0 提问: c语言怎么求110度正切值?

回复:
user: user-1
content: 包含math.h  然后可以使用里面的tan函数，不过参数是弧度制的

user: user-2
content: tan(110.0*3.14159/180.0);

user: user-3
content: 头文件:#include<math.h> 函数:tan(弧度值) 返回:x的正切值
user-0 提问: 宏定义的理解

回复:
user: user-1
content: 引用 6 楼 qq_18310569 的回复:[quote=引用 3 楼 paschen 的回复:] 引用这一句的 (*(ADC_COFIN *)MN_BUFFER)是什么意思？  把MN_BUFFER这块buffer按ADC_COFIN 类型去解析得到的那个结构体  adc_stCofIn 就代表 (*(ADC_COFIN *)MN_BUFFER) (ADC_COFIN *)和   *(ADC_COFIN *)分别是什么意思呢？[/quote]  ADC_COFIN就是表示那个结构体，这不是宏，了解typedef用法  *(ADC_COFIN *)就是转换成ADC_COFIN *再解引

user: user-0
content: 引用 3 楼 paschen 的回复:引用这一句的 (*(ADC_COFIN *)MN_BUFFER)是什么意思？  把MN_BUFFER这块buffer按ADC_COFIN 类型去解析得到的那个结构体  adc_stCofIn 就代表 (*(ADC_COFIN *)MN_BUFFER) (ADC_COFIN *)和   *(ADC_COFIN *)分别是什么意思呢？

user: user-2
content: 这样不见得多好，万一MN_BUFFER空间不够，就会有越界的风险！想了解宏定义用法，推荐你看windows系统里各种库的头文件！

user: user-3
content: 引用 2 楼 qq_18310569 的回复:[quote=引用 1 楼 zhao4zhong1 的回复:] 理解和讨论之前请先学会如何观察！  VC编译选项加/EP /P（项目、属性、配置属性、C/C++、预处理器、预处理到文件：是，预处理取消显示行号：是），重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898 能简单说一下嘛？[/quote] 很多时候，使用的工具越先进，人越笨；得到得越轻松，人越懒。

user: user-1
content: 引用这一句的 (*(ADC_COFIN *)MN_BUFFER)是什么意思？  把MN_BUFFER这块buffer按ADC_COFIN 类型去解析得到的那个结构体  adc_stCofIn 就代表 (*(ADC_COFIN *)MN_BUFFER)

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:理解和讨论之前请先学会如何观察！  VC编译选项加/EP /P（项目、属性、配置属性、C/C++、预处理器、预处理到文件：是，预处理取消显示行号：是），重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898 能简单说一下嘛？

user: user-3
content: 理解和讨论之前请先学会如何观察！  VC编译选项加/EP /P（项目、属性、配置属性、C/C++、预处理器、预处理到文件：是，预处理取消显示行号：是），重新编译，查看宏展开后对应的.i文件。gcc加-E http://bbs.csdn.net/topics/391003898
user-0 提问: 跪求大佬帮忙看一下这个代码 判断线性方程是否有唯一解，有什么不对？

回复:
user: user-1
content: 边界条件 输入输出格式 ……

user: user-2
content: OJ有时候就是这样的，可以参考下别人AC的代码，然后看看区别。 多试一些测试用例，特别是边界条件

user: user-0
content: 修改后提交，oj评分60。。。。。似乎是算法错误  #include<stdio.h> #include<stdlib.h> #include<string.h> void exchange_(double *a, double*b, const int n); double beishu(double a,const double b); void xiaoqu(double *a, double *b, double k, int n);  int main() { 	int n; 	int a, b; 	double ** p; 	scanf("%d", &n); 	p = (double**)malloc(sizeof(double*) * n);//为二维数组分配n行 	for (a = 0; a < n; a++) //为每行分配n+1个大小空间 	{ 		p[a] = (double*)malloc(sizeof(double) * n + 1); 	} 	for (a = 0; a < n; a++) 	{ 		for (b = 0; b < n + 1; b++) 		{ 			scanf("%lf", &p[a][b]); 			printf("\n"); 		} 	}//输入数组成功  	int i, j,t=0;//主元定位下标 	for (i = 0, j = 0; i < n - 1; i++, j++) 	{ 		a = i; 		while (p[a][j] == 0 && a < n) 		{ 			a = a + 1; 		} 		exchange_(p[a], p[i], n);//选出主元 		if (p[i][j] == 0) 		{ 			t=1; 			break;//存在自由变量 		} 		for (a = i + 1; a < n; a++)//分别处理主元下各行 		{ 			double k; 			if (p[a][j] == 0) 				continue; 			k = beishu(p[i][j], p[a][j]); 			xiaoqu(p[i], p[a], k, n); 		} 	}//化简完成 	if(t==1) 		printf("NO"); 	else { 		if (p[n - 1][n - 1] == 0) 			printf("NO"); 		else 		printf("YES"); 	} 	getchar(); 	getchar(); 	return 0; } void exchange_(double *a, double*b, const int n)//交换两行 { 	double  p; 	for (int i = 0; i < n + 1; i++) 	{ 		p = a[i]; 		a[i] = b[i]; 		b[i] = p; 	} }

user: user-1
content: if ... if 要改为 if ... else if ...

user: user-3
content: 代码逻辑问题帮不到你，建议你在必要的地方设置断点，然后单步跟踪程序运行，观察每一步结果与你期望的是否一致

user: user-4
content: 你的具体算法，我不了解哈，我不是数学家 但是如果看代码的话，你看看下面这一部分 if (p[n - 1][n - 1] == 0) printf("NO"); printf("YES");  当p[n - 1][n - 1] == 0时，先是打印“NO”，之后，不管什么条件又打印出来一个"YES"，这明显悖论啊！！！  最好在每一个if选择分支加上{。。。。}大括号进行区分  从代码51到58行，你自己好好想想。
user-0 提问: 如何从已有文件中读出数据，并且格式保持不变，用C语言编写的，大家给点意见呗

回复:
user: user-0
content: 可以了结果是这样：  姓名	学号	语文	数学	英语 张明明 1.000000 67.000000 78.000000 82.000000 李成友 2.000000 78.000000 91.000000 88.000000   谢谢大神了，哈哈

user: user-0
content: 谢谢，不过我试了一下还是不对。运行后是这样的结果：  姓名	学号	语文	数学	英语 张明明    0 1072693248    0 1079033856 李成友    0 1073741824    0 1079214080

user: user-1
content: 你的studentID和3个score都是float的，应该用%f才对 fscanf(fp1,"%s%4d%4d%4d%4d",&S1[i].name, &S1[i].studentID, &S1[i].score.chinese,//按指定格式读出文件中数据 &S1[i].score.math, &S1[i].score.english);	 改成：  fscanf(fp1, "%s%4f%4f%4f%4f", &S1[i].name, 			&S1[i].studentID, 			&S1[i].score.chinese,//按指定格式读出文件中数据 			&S1[i].score.math, 			&S1[i].score.english);
user-0 提问: 文件输入输出。哪里错了？谢谢

回复:
user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-2
content: 你的文件不对。 改成这样：（不要带注释） 2 1 7  9 8

user: user-3
content: FILE *fin； 后面的分号你用成全角的，要英文下的
user-0 提问: c问题求助

回复:
user: user-1
content: strcpy( gread[i],"优");  printf("%d个同学成绩等级%s",i+1,gread[i]);

user: user-0
content: 谢谢大家 终于弄出来了

user: user-0
content: #include "stdio.h" #define N 10 int main() {   char gread[N][8];   int i,score[N];    for(i=0;i<10;i++)  {   printf("请输入第%d个人的成绩:",i+1);	   scanf("%d",&score[i]);   if(score[i]>=90)   gread[i]="优";   else  if(score[i]>=80)   gread[i]="良";   else  if(score[i]>=70)   gread[i]="中";   else  if(score[i]>=60)   gread[i]="及格";   else  gread[i]="不及格"; }  	   for(i=0;i>10;i++)   printf("%d个同学成绩等级%c",i+1,gread[i]);	 }  这样为啥还是不行

user: user-2
content: 或者用两个单独的数组，一个数组存成绩，一个数组存等级。

user: user-2
content: 用一个结构体，包括成绩和等级两个成员。 用一个数组，数组成员是结构体。

user: user-3
content: https://zhidao.baidu.com/question/207069299.html

user: user-0
content: 是的，但是我不知道该怎么用

user: user-4
content: 是想让你用二维数组吗？
user-0 提问: 我这里有一窜代码，希望大家能够帮我看看，我想把我输入的一个字符串变为一个4*4的数组，数组必须两个以上

回复:
user: user-1
content: 楼上说了几个问题。 还有就是str[len] = '0';应该是str[len] = '\0';   （'0'是字符0，和'\0'是有区别的）  单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-2
content: 另外你main函数中间有个return 0;  导致后面的代码将没有机会执行了

user: user-2
content: if(k=1)  改成  if(k==1)
user-0 提问: 学习郭天祥第十课，根据他视频上讲写的，写到键盘扫描时，随着按下键的次数，显示时秒的后三位有轻微闪烁，但光标地址实际在走，希望大神指点

回复:
user: user-1
content: 按键需要防抖？
user-0 提问: 位运算

回复:
user: user-1
content: 理解和讨论之前请先学会如何观察！  计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 多用小脑和手，少用大脑、眼睛和嘴，会更快地学会编程！ 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步Debug版对应汇编一行！ 单步Debug版对应汇编千行不如单步Release版对应汇编一行！ 不会单步Release版对应汇编？在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有，然后在IDE中运行。（一般人我不告诉他！）  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。

user: user-2
content: 引用 2 楼 loveqise 的回复:[quote=引用 1楼user-4 的回复:]1. 在 C 语言里，01 是一个八进制整型常量，值为 1，类型为 int  2. 在计算 01 & n 之前，会发生Usual arithmetic conversions，将两者转换为同一类型。n 也为 int ，那个两者都被转换为 int (不变）；如果 n 为 long long int ，那个 01 也会被转换为 long long int 类型的 1 。谢谢，Usual arthimetic conversions的转换规则是什么？1、是进行位运算时才会转换，还是所有运算都会转换2、同类型，如int是短整型转为长整型吗？3、不同类型，如int和char等怎么转换[/quote]  1、是的，会进行隐式转换 2、int在不同平台上可能是短/长整型，但同一个平台上不会同时是两种 3、char类型变量会转换成一个int的临时变量

user: user-3
content: 隐式类型转化，在进行运算时，以表达式中最长类型为主，将其他类型位据均转换成该类型

user: user-0
content: 引用 1楼user-4 的回复:1. 在 C 语言里，01 是一个八进制整型常量，值为 1，类型为 int  2. 在计算 01 & n 之前，会发生Usual arithmetic conversions，将两者转换为同一类型。n 也为 int ，那个两者都被转换为 int (不变）；如果 n 为 long long int ，那个 01 也会被转换为 long long int 类型的 1 。谢谢，Usual arthimetic conversions的转换规则是什么？1、是进行位运算时才会转换，还是所有运算都会转换2、同类型，如int是短整型转为长整型吗？3、不同类型，如int和char等怎么转换

user: user-4
content: 1. 在 C 语言里，01 是一个八进制整型常量，值为 1，类型为 int  2. 在计算 01 & n 之前，会发生Usual arithmetic conversions，将两者转换为同一类型。n 也为 int ，那个两者都被转换为 int (不变）；如果 n 为 long long int ，那个 01 也会被转换为 long long int 类型的 1 。
user-0 提问: 简单程序问题

回复:
user: user-1
content: 嵌套循环呗  你只有一层循环，那只能交换一次相邻位置的元素，最小的未定已经到了最前，最大的未必到了最后  好好理解一下冒泡排序...

user: user-2
content: 不加i和j怎么进行排序呢？ 而且你这个排序的内存j循环不需要循环那么多次。 http://blog.csdn.net/hguisu/article/details/7776068

user: user-3
content: 其实就是个冒泡排序。http://blog.csdn.net/qq_25371579/article/details/50763111?locationNum=2&fps=1

user: user-4
content: 按分数由大到小排序？？？，好像还写得有点冗余

user: user-5
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。
user-0 提问: 用dvc++怎么对二叉树的遍历进行单步调试

回复:
user: user-1
content: 1. 编译通过(ctrl+F9)  2. 设置断点(ctrl+F5)  3. 调试(F8)  4. 增加观察变量（在左边的debug观察窗口右键增加或者F4）  5. 单步调试：F7  6. 结束调试：ctrl+alt+f2

user: user-2
content: 你可以直接在csdn上搜dev c++的单步调试的博客，上面讲的很清楚。

user: user-3
content: http://blog.csdn.net/qq_32209643/article/details/50981181
user-0 提问: VS2015/2013编译C程序提示找不到指定文件  

回复:
user: user-1
content: 你的项目里有多个源文件中，存在多个main方法。  解决方法：将所有其它的main方法给为与源文件同名，如 void mian_source03（），只留一个你需要调试、运行的那个main方法。、当你需要调试、运行另一个源文件中的mian方法时，再进行改名。

user: user-2
content: 项目里面还有个 Source03.cpp。 从项目中去掉这个文件。

user: user-3
content: cpp file

user: user-4
content: 关闭UAC、防火墙、杀毒软件、……

user: user-0
content: 引用 2 楼 user-6 的回复:链接失败，你是不是包含了其他源文件，里面也定义了main  没有呀

user: user-0
content: 引用 3 楼 qq423399099 的回复:重新建个win32控制台项目试试。   win32控制台可以

user: user-5
content: 重新建个win32控制台项目试试。

user: user-6
content: 链接失败，你是不是包含了其他源文件，里面也定义了main

user: user-0
content: 最简单的HelloWorld都不行
user-0 提问: const应该如何定义

回复:
user: user-0
content: 引用 4 楼 sunyongliang118 的回复:char*  const zpDataBasePathIngoreCharArr = "~.\\/*";  1年后回过头看，你的回答才是正确的 。

user: user-1
content: 跟const没关系，是你的类型初始化错误。 一个char*指针，却用一个初始化列表来初始化，且列表中的各个值都还是字符类型不是指针类型。 初始化列表是用来对数组初始化的。

user: user-2
content: int* const zpDataBasePathIngoreCharArr 呢

user: user-0
content: 引用 4 楼 sunyongliang118 的回复:char*  const zpDataBasePathIngoreCharArr = "~.\\/*";  我已经改的差不多了

user: user-0
content: 引用 2 楼 sdghchj 的回复:跟const没关系，是你的类型初始化错误。 一个char*指针，却用一个初始化列表来初始化，且列表中的各个值都还是字符类型不是指针类型。 初始化列表是用来对数组初始化的。  谢谢你哈

user: user-3
content: char*  const zpDataBasePathIngoreCharArr = "~.\\/*";

user: user-3
content: 引用 2 楼 sdghchj 的回复:跟const没关系，是你的类型初始化错误。 一个char*指针，却用一个初始化列表来初始化，且列表中的各个值都还是字符类型不是指针类型。 初始化列表是用来对数组初始化的。 表示完全同意。
user-0 提问: 关于指针

回复:
user: user-1
content: 理解和讨论之前请先学会如何观察！  仅供参考：//char (*(*x[3])())[5];//x是什么类型的变量? // //分析C语言声明，关键是搞清楚这个变量是个什么东西（函数、指针、数组）， //是函数那么剩下的就是他的参数和返回值， //是指针那剩下部分是说明他指向什么， //是数组剩下的部分就是说明数组的成员是什么类型。 //解析C语言声明规则： //从左侧第一个标识符开始，按照优先级进行结合。*表示是..的指针，const表示只读的，volatile表示可变的，[]表示是数组，()表示是函数。 // //x和[3]结合说明是一个大小为3的数组，该数组的每个元素为一类指针，该类指针指向一类函数，该类函数无参数，返回一类指针，该类指针指向一个大小为5的char型数组 #include <stdio.h> #include <typeinfo.h> char num[5]; char (*x00())[5] {     return # } int main() {     char (*(*x[3])())[5];//是个数组，大小为3     char (*(*x0  )())[5];//数组的元素，是个函数指针     char (*( x00 )())[5];//函数原型，参数为空，返回值为指针     char (*  x000   )[5];//返回值      x0 = x00;     x[0] = x0;     x[1] = x0;     x[2] = x0;     printf("typeid(x).name() is %s\n",typeid(x).name());     return 0; } //typeid(x).name() is char (* (__cdecl**)(void))[5]

user: user-2
content: 返回值void应该改成int *

user: user-3
content: 楼主似乎晕了，void fun怎么会有返回值，而且你这里就算是有返回值，那返回的确实是n的地址，要想返回n的地址，得解引，既return *n。

user: user-4
content: 这样的写法有些编译器都过不了编译。

user: user-5
content: 楼上很正确啊，*n是指向的内存区的值，而n里面才是地址

user: user-4
content: return n;是返回指针n所指向的内存区域的地址。 return *n;是返回指针n所指向的内存区域里的值。 完全不知道2#在解释什么。 PS：而且你既然将n作为参数传进来了，那么根本不需要return n;

user: user-0
content: return n; 和return *n;有什么区别呢

user: user-6
content: 引用 5 楼 u010165006 的回复:《C语言点滴》  发错了，楼主可以参考： 《深入理解C指针》

user: user-6
content: 《C语言点滴》

user: user-7
content: 明明是返回类型为void的函数，return n; 什么意思
user-0 提问: 跪求大神帮我

回复:
user: user-0
content: 换了才开始学忘了换了不小心，改为int了但还是不行无法调试

user: user-1
content: 输出是%f不是%d，浮点型

user: user-0
content: 还是不行

user: user-0
content: 通过了，但还是是无法调试  改了一下还是这么显示

user: user-2
content: 不知道编译通过了没有？ 转意字符换行是'\n'不是'/n', sum是float型，为什么用整形输出？ 不妨把文本格式代码贴出来。
user-0 提问: 散分＋推荐阅读“没学过C语言的代价”

回复:
user: user-1
content: 又百度搜来的相关关键字啊?

user: user-2
content: 哈哈哈   请讲

user: user-3
content: 赵4老师，你好，我刚刚写了一篇文章，有空的时候还望能够给个回复，感谢。         帖子： 【话题：工作生活】电信诈骗--一次难得的人生经历

user: user-4
content: 西电离我们吉祥村特别近噢！

user: user-5
content: 我觉得本科教的C太浅

user: user-6
content: 赵四老师,大三学生基础很差还有救吗

user: user-7
content: 学习还是有必要的，当然精通，作为小白，不敢多说！

user: user-8
content: 个人兴趣吧.还有看到底有没有需要

user: user-9
content: 原来赵老师也是西电人呀

user: user-10
content: 老赵不但是西电人，而且是80年代上的西电，十分了得（不只是年纪）。

user: user-11
content: mark

user: user-12
content: 来晚了吗

user: user-0
content: 在结帖时平分300分

user: user-0
content: 还差两贴就可以再结帖时平分300分了。

user: user-0
content: 引用 34 楼 wenpinglaoyao 的回复:敢问赵老师对《深度探索c++对象模型》一书怎么看？我感觉里面的错误（疏忽式）不少 挑错虽然也是看书的一种方法，但不是从书中学习作者先进思想的最好办法。 空杯心态还是要有的。

user: user-0
content: 果然我算数不及格啊！ http://bbs.csdn.net/topics/392052283

user: user-0

user: user-10
content: 赶快结帖吧

user: user-10
content: 先来一贴...

user: user-13
content: 敢问赵老师对《深度探索c++对象模型》一书怎么看？我感觉里面的错误（疏忽式）不少