Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 如何分清分C语言从关于支结构和循环的使用？

回复:
user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。

user: user-2
content: 只能多用多练习了

user: user-1
content: 不要使用 while (条件) 更不要使用 while (组合条件) 要使用 while (1) {  if (条件1) break;  //...  if (条件2) continue;  //...  if (条件3) return;  //... } 因为前两种写法在语言表达意思的层面上有二义性，只有第三种才忠实反映了程序流的实际情况。 典型如： 下面两段的语义都是当文件未结束时读字符 whlie (!feof(f)) {  a=fgetc(f);  //...  b=fgetc(f);//可能此时已经feof了！  //... } 而这样写就没有问题： whlie (1) {  a=fgetc(f);  if (feof(f)) break;  //...  b=fgetc(f);  if (feof(f)) break;  //... } 类似的例子还可以举很多。

user: user-3
content: 2.4）for 打破循环，中间跳转语句 continue ,break        continue 跳过  continue 后面的代码，执行 e3 开始下一个循环。        break  跳出循环，不执行  e3 ，结束循环的执行。只跳出一层循环。  2.5) while do-while， continue 跳过continue 后面的代码 ,开始下一个循环        break 跳出循环。

user: user-4
content: 不要急于求成，多写代码，自然会懂

user: user-3
content: 基本控制语句 1） 分支和跳转    1.1)if    1.1.1 if(c)s; <==> if(c){s...}   1.1.2 if(c1)s1;else s2;   1.1.3 if(c1)s1;else if(c2) s2;   1.1.4 if(c1)s1;else if(c2)s2;else s3;   1.1.5 if(c1)s1;else if(c2)s2; .....else if(cn)sn; else se;      基本形式 1.1.2）if(c1)s1;else s2;条件成立执行s1，不成立不执行s2。   省略形式 1.1.1）if(c1)s1;条件成立执行s1，不成立不执行。   1.1.3 ）1.1.4）1.1.5）是扩展形式    后面的条件在前面的条件不成立，才有机会检查。    等价于 if(c1)s1; else { if(s2) s2 ;else {if(s3)s3 ; .......else {if(cn)sn ; else se;}... }}     即后面的每条else if中的 if语句 相当于 前面的if(..) ...else ...,的 else的语句组的一部分。     2）switch(x)     {      case c0:       //无break，return，执行下一条case语句或者defualt语句      case c1: break;//break，跳出switch的大括号，执行switch结构后面的语句。      defualt: break;//defualt 可有，可无，无不处理例外；此句break是多余的，不过建议保留。    } 3) goto; 跳转语句   形式    goto label;     。。。。。    label: 4）return 返回语句。    3.1) return ;//函数无返回值，最后一个return，可以省略。     3.2) return e;  函数有返回值,return +表达式；    2 循环语句，   while、do-while、for   三种循环，都是while型循环。条件合适执行，不合适结束。   2.1）while(c)s; while(c){s......};   2.2）do s while(c); do{s.....}while(c);   2.3)         for(e1;e2;e3)s;for(e1;e2;e3){.....}        或者 表示为        for(e_init;e_condition;e_inc)s;for(e_init;e_condition;e_inc){.....}       2.4）打破循环，中间跳转语句 continue ,break        continue 跳过  continue 后面的代码，执行 e3 开始下一个循环。        break  跳出循环，不执行  e3 ，结束循环的执行。只跳出一层循环。 PS：   break 跳出当前这一层， 循环或者switch 结构。   当 switch 和循环嵌套时，只跳出内层的 循环或者switch 结构。   不能绕过循环跳出 switch，也不能绕过 switch跳出循环。   也不能跳出两层循环或者switch。

user: user-5
content: 貌似lz没有投入足够的精力进去哦，好像兴趣也有待培养的样子……

user: user-6
content: 遇到这种情况不要急，试着用笔在纸上画画关系图。  引用 楼主 u012417116 的回复:在C语言中， 分支结构有好多种，什么，if、if-else、if-else-if，加上switch、break什么的弄的好乱，求大神帮忙理清下思路。 还有，循环结构，while、do-while、for、break、continue、goto，我感觉这一章特别难，直接打击学习的积极性了，尤其当嵌套的时候，逻辑思路特别乱，看程序流程图有一种想一觉睡去以谢天下的感觉。求大神帮忙讲一下如何分清这些语句的用法，和技巧。 现在老师给我们的关于分支和循环例题自己做总是做不出来，可是只要一看程序，却能读懂，自己课下也下功夫了，实在是不行了，请大家帮下忙，谢谢啦。

user: user-7
content: 代码写少了。  不积跬步，无以至千里。

user: user-8
content: 多调试，多思考，多总结

user: user-9
content: 代码敲少了！很多这些都是可以通用的！ 能看懂，理论过了，不能动手就多敲代码！没什么捷径！
user-0 提问: EOF（end of file）如何使用最好？

回复:
user: user-1
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-2
content: 引用 5 楼 ForestDB 的回复:while(scanf("%d%d",&a,&b) == 2) 在这个上下文，这样写while condition最好。  嗯，我也建议这样

user: user-3
content: while(scanf("%d%d",&a,&b) == 2) 在这个上下文，这样写while condition最好。

user: user-4
content: 引用 3 楼 cfjtaishan 的回复:因为scanf输入的格式和要求的格式不同时，返回值为0，0和EOF比较不相等，则继续循环，但上次输入的内容还在行缓冲里，这次又从还缓冲里都到错误的数据，返回值又和EOF不相同，继续循环，所以就成了死循环。   1 #include<stdio.h>   2 int main(void)   3 {      4      char str[20];   5      int a,b;   6      int rtval = 0;   7      while((rtval = scanf("%d%d",&a,&b)) !=EOF)   8      {      9          if (rtval == 0)  10              gets(str);    //用于接收输入到缓存里的错误数据比如字母  11          fflush(stdin);  12          printf("%d+%d=%d\n",a,b,a+b);  13      }     14   15     return 0;  16 }      ~      上面这个程序用来解决死循环的问题  ++

user: user-5
content: 因为scanf输入的格式和要求的格式不同时，返回值为0，0和EOF比较不相等，则继续循环，但上次输入的内容还在行缓冲里，这次又从还缓冲里都到错误的数据，返回值又和EOF不相同，继续循环，所以就成了死循环。   1 #include<stdio.h>   2 int main(void)   3 {      4      char str[20];   5      int a,b;   6      int rtval = 0;   7      while((rtval = scanf("%d%d",&a,&b)) !=EOF)   8      {      9          if (rtval == 0)  10              gets(str);    //用于接收输入到缓存里的错误数据比如字母  11          fflush(stdin);  12          printf("%d+%d=%d\n",a,b,a+b);  13      }     14   15     return 0;  16 }      ~      上面这个程序用来解决死循环的问题

user: user-6
content: google下 scanf的返回值吧！

user: user-0
content: 运行如图
user-0 提问: 求解答这道程序题 我自己做了好久都没做出来

回复:
user: user-0
content: 下面是我的代码  我遇到的问题是有两个 排序问题  这道题我用冒泡排序 但是我不知道怎么去引用链表head节点 二是用fread还是fsanf（我是用的fread）代码写到排序就没写了   #include<stdio.h> #include<malloc.h> #define LEN sizeof(struct student) #define null 0 struct student{ 	char name[50]; 	double first_try; 	double second_trybishi; 	double second_trymianshi; 	double oral; 	double sum; 	struct student *next; }; void main(){ 	struct student *head; 	struct student *p1 = null; 	struct studnet *p2 = null; 	struct student  *a; 	struct student *b; 	struct  student  *c,*temp,*ends; 	FILE *fp; 	fp = fopen("D:\\fushi.dat", "rb"); 	if (fp == NULL){ 		printf("erro"); 	} 	 		p1 = (struct student *)malloc(LEN); 		if (p1 == null) 		{ 			printf("error"); 		} 		int n = 0; 		else 		{   			head = null; 			p2 = p1; 			fread(p1, sizeof(struct student), 1, fp); 			p1->sum = p1->second_trybishi*0.4 + p1->second_trymianshi*0.4 + p1->oral*0.2; 		} 		 			while (fread(p1, sizeof(struct student), 1, fp)!=EOF) 			{  				n = n + 1; 	 			if (n==1) 				{                  head = p1;                  p2->next = null; 				} 				else 				{ 					p1 = (struct student *)malloc(LEN); 					fread(p1, sizeof(struct student), 1, fp); 					p1->sum = p1->second_trybishi*0.4 + p1->second_trymianshi*0.4 + p1->oral*0.2; 					p2->next = p1; 				} 				p2->next = null;           } 			for ((struct student *)malloc(LEN),a->next=head; a != null; a = a->next) 			{                      if(a->sum!=a-next->sum)                      {                            	                         	                      	                      	                      	                      	                      	                      	}                    			}

user: user-1
content: if (总成绩 < 总成绩1 || 笔试 < 笔试1 || 面试 < 面试1)

user: user-2
content: - - 你真的做了好久吗?  把代码贴出来帮你看看

user: user-3
content: "***.dat"这个地方有个陷阱，不要真的存为"***.dat" 如果不能找到有意义的名字，存成"xxx.dat"吧！  *是统配符。表示任意字符。 实际上，Dos,Windows   *表示任何1~N个字符，？表示任何一个字符。

user: user-3
content: 总成绩相同,再比较笔试 ,笔试相同比面试 这可一逐项比较，也可用基数排序。

user: user-3
content: 笔试*40%+面试*40%+口语*20%的总成绩 这不是公式么： 总成绩= 笔试 * 40% + 面试 * 40% + 口语*20%

user: user-4
content: lz先把自己写的代码贴出来给大家看看吧，然后有针对性的提出问题

user: user-5
content: 既然做了好久，遇到什么问题？

user: user-6
content: 参考下，然后自己动手写写，不懂的再来问问！直接作业题，还是不要害你了！ 链表的基本操作 文件基本操作

user: user-7
content: 提示： 链表的建立，排序，文件的读写。

user: user-8
content: 网游穷三代 Dota毁一生

user: user-9
content: - - 你真的做了好久吗
user-0 提问: sscanf的用法

回复:
user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:#include <stdio.h> char s[]="tm-app2 postfix/cleanup[21714]: 9C78740192CAC: warning: header Subject: =?utf-8?B?5Zyo77yf?= from unknown[172.24.202.117]; from=<wangjingci@tomonline-inc.com> to=<491009699@qq.com> proto=ESMTP helo=<smtp.tom.com>"; int no; char code[10]; char sub[80]; char from[128]; char to[128]; int main() {     if (5==sscanf(s,"%*[^[][%d%*[^?]?%9[^?]%79[^ ]%*[^<]<%127[^>]%*[^<]<%127[^>]",&no,code,sub,from,to)) {         printf("no=%d\ncode=%s\nsub=%s\nfrom=%s\nto=%s\n",no,code,sub,from,to);         return 0;     } else {         printf("Format Error:[%s]\n",s);         return 1;     } } //no=21714 //code=utf-8 //sub=?B?5Zyo77yf?= //from=wangjingci@tomonline-inc.com //to=491009699@qq.com //  学习了，，，，

user: user-1
content: #include <stdio.h> char s[]="tm-app2 postfix/cleanup[21714]: 9C78740192CAC: warning: header Subject: =?utf-8?B?5Zyo77yf?= from unknown[172.24.202.117]; from=<wangjingci@tomonline-inc.com> to=<491009699@qq.com> proto=ESMTP helo=<smtp.tom.com>"; int no; char code[10]; char sub[80]; char from[128]; char to[128]; int main() {     if (5==sscanf(s,"%*[^[][%d%*[^?]?%9[^?]%79[^ ]%*[^<]<%127[^>]%*[^<]<%127[^>]",&no,code,sub,from,to)) {         printf("no=%d\ncode=%s\nsub=%s\nfrom=%s\nto=%s\n",no,code,sub,from,to);         return 0;     } else {         printf("Format Error:[%s]\n",s);         return 1;     } } //no=21714 //code=utf-8 //sub=?B?5Zyo77yf?= //from=wangjingci@tomonline-inc.com //to=491009699@qq.com //

user: user-2
content: 单字符一个一个处理。哈哈哈哈。

user: user-3
content: 引用 3 楼 cfjtaishan 的回复:建议使用strtok或者strsep分开后在使用sscanf ++ 同意

user: user-4
content: 建议使用strtok或者strsep分开后在使用sscanf

user: user-0
content: 引用 1 楼 user-5 的回复:sscanf函数不好处理！ 推荐strsep函数，查找对应的关键字！ 好 我看看 ，，，

user: user-5
content: sscanf函数不好处理！ 推荐strsep函数，查找对应的关键字！
user-0 提问: 各位大牛求指点

回复:
user: user-1
content: 引用 4 楼 makezwl 的回复:[quote=引用 3 楼 zhao4zhong1 的回复:] TODO（未完成）代码吧。 完成后代码应该调用realloc，真正使用这些参数。这是源码啊，都是能用的[/quote] 可能是兼容性问题！之前有用，而现在没有用到而已！

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:TODO（未完成）代码吧。 完成后代码应该调用realloc，真正使用这些参数。这是源码啊，都是能用的

user: user-2
content: TODO（未完成）代码吧。 完成后代码应该调用realloc，真正使用这些参数。

user: user-0
content: 引用 1 楼 user-3 的回复:实际上就是用到了那个name,就是给线程池取一个名字。那剩下两个参数传进来用什么用，意义何在？

user: user-3
content: 实际上就是用到了那个name,就是给线程池取一个名字。
user-0 提问: VC6 打开并且读取Excel2010 出错

回复:
user: user-0
content: 就是这个错误    还是不行

user: user-1
content: 126 找不到指定的模块。 建议安装Excel 2003

user: user-1
content: 试试 CSpreadSheet SS(_T("d:\\456\\sss.xls"),_T("Sheet1"));
user-0 提问: 菜鸟求助！坐等求助！

回复:
user: user-1
content: 用sscanf(str, "%d", &n）;从字符串str中读出一个整数

user: user-2
content: 按下标读取元素 求和 （注意溢出） 求平均值 （整型、浮点数）

user: user-3
content: 当从文件里都到数据后，可以使用sscanf转换整数，然后放到一个整数数组里，最后求其平均数！

user: user-4
content: 引用 1 楼 wasdfgh951 的回复:里面的内容换行分开的 基本的文件操作了，一行的形式读文件，然后转化成整形，计算平均值了

user: user-5
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: 里面的内容换行分开的
user-0 提问: “在不是函数定义的组成部分的函数声明符中的标识符表应为空”这句的意思？

回复:
user: user-0
content: 引用 12 楼 mymtom 的回复: /* C89的函数声明有两种形式  int fun1(int x, int y)  // D(形参类型表)  int fun2(x, y)          // D(任选的标识符表) int fun2()              // D(任选的标识符表)  如果func2(x, y)不是函数定义 int func2(x, y) int x, int y; {     return x + y; } 的一部分的话；  那么就标识符表应该为空 int func2(); */  /*  * 这句话描述的是K&R风格的函数声明和定义  */ /* 函数声明为 */ int func2();          /* 标识符表为空 */ /* 函数定义为 */ int func2(x, y)       /* 标识符表不为空 */ int x, int y; {     return x + y; }  /*  * C99已经废除了这种写法了  * 现在大家使用的是这种写法  */ /* 声明 */ int fun1(int x, int y);  /* 声明中的参数标识符x, y 可以省略 */ /* 定义 */ int fun1(int x, int y) {     return x + y; }  高手。谢谢。

user: user-1
content: /* C89的函数声明有两种形式  int fun1(int x, int y)  // D(形参类型表)  int fun2(x, y)          // D(任选的标识符表) int fun2()              // D(任选的标识符表)  如果func2(x, y)不是函数定义 int func2(x, y) int x, int y; {     return x + y; } 的一部分的话；  那么就标识符表应该为空 int func2(); */  /*  * 这句话描述的是K&R风格的函数声明和定义  */ /* 函数声明为 */ int func2();          /* 标识符表为空 */ /* 函数定义为 */ int func2(x, y)       /* 标识符表不为空 */ int x, int y; {     return x + y; }  /*  * C99已经废除了这种写法了  * 现在大家使用的是这种写法  */ /* 声明 */ int fun1(int x, int y);  /* 声明中的参数标识符x, y 可以省略 */ /* 定义 */ int fun1(int x, int y) {     return x + y; }

user: user-2
content: 引用 8 楼 supermegaboy 的回复:即使在函数定义中，形参的标识符也不是必须的。 ++ 函数定义中，虽然不是必须的，用到的那个必须有名字。 除非不确定参数列表那种。

user: user-3
content: An identifier list in a function declarator that is not part of a function definition shall be empty. 一个 标识符 列表 在 一个 函数 声明 那个 是 不 部分 的 一个 函数 定义 应该 是 空. 函数声明时（即函数原型中），除函数名外，其它标识符都应该为空。

user: user-4
content: 引用 3 楼 pubuzhixia 的回复:[quote=引用 1 楼 AnYidan 的回复:] An identifier list in a function declarator that is not part of a function definition shall be empty. 没发现翻译错了。这个是GB上，翻译了英文版C89的。 An identifier list 一个标识符列表 in  a function declarator that is not part of a function definition 不是函数定义部分的那些函数声明 shall be  empty[/quote]  参阅4楼， 函数声明时，不需要列出形参的标识符，只列出每个形参的数据类型即可

user: user-5
content: 即使在函数定义中，形参的标识符也不是必须的。

user: user-2
content: 函数定义时，形参的名字，才是有意义的。 函数声明中，形参的名字，是不必要的。  shall 在这里，应该是可以的意思吧。

user: user-2
content: 引用 4 楼 zhao4zhong1 的回复:意思不就是“函数声明时，除函数名外，其它标识符都应该为空”吗？ ++ 意思就是，就当这些标识符不存在。 只有函数名，和数据类型，才是函数声明所需要的。 形参的变量名字，是不必要的。

user: user-2
content: 引用 3 楼 pubuzhixia 的回复:[quote=引用 1 楼 AnYidan 的回复:] An identifier list in a function declarator that is not part of a function definition shall be empty. 没发现翻译错了。这个是GB上，翻译了英文版C89的。 An identifier list 一个标识符列表 in  a function declarator that is not part of a function definition 不是函数定义部分的那些函数声明 shall be  empty[/quote]  6.5.4.3  第3句， 能在形参声明中。。。。。 register 有没有翻译错误？

user: user-3
content: 意思不就是“函数声明时，除函数名外，其它标识符都应该为空”吗？

user: user-0
content: 引用 1 楼 AnYidan 的回复:An identifier list in a function declarator that is not part of a function definition shall be empty. 没发现翻译错了。这个是GB上，翻译了英文版C89的。 An identifier list 一个标识符列表 in  a function declarator that is not part of a function definition 不是函数定义部分的那些函数声明 shall be  empty

user: user-2
content: 翻译错了吧； 形参存储类型由调用约定和具体实现决定，而不是存储类型决定。

user: user-4
content: An identifier list in a function declarator that is not part of a function definition shall be empty.
user-0 提问: 求素数问题，求指教！

回复:
user: user-1
content: 引用 4 楼 u011255195 的回复: 这样了再怎么改啊！！ 头疼。  fun 函数打括号不匹配

user: user-2
content: 19 #include <stdio.h>  20   21 int fun(int n);  22   23 int main()  24 {  25     int a,b;  26     printf("请输入a的值:");  27     scanf("%d",&a);  28     b = fun(a);  29     if (b == 0)  30        printf("%d不是素数",a);  31    else  32        printf("%d是素数",a);  33    return 0;  34 }    35   36 int fun(int n)  37 {  38     int k, yes;  39     for (k = 2; k <= n/2; k++)  40     {  41         if (n % k == 0)  42         {  43             yes = 0;  44             break;  45         }  46     }  47     if (k > n / 2)    //都未整除则为素数  48     {  49         yes = 1;  50     }  51     return yes;  52 }        我没有具体测试，你可以参考一下！

user: user-3
content: #include <stdio.h> int fun(int n); int main(void) { 	int a, b; 	scanf("%d",&a); 	b=fun(a); 	if(b==0) printf("%d不是素数！\n",a); 	else printf("%d是素数！\n",a); } int fun(int n) { 	int k, yes=1; 	for(k=2;k<=n/2;k++) 	 if(n%k==0) 	 { 	 	yes=0;  		break; 	 }  	return yes; }

user: user-4
content: 时间原因。我去上自习，，晚上回来 不懂再说。给你写个，和你的像 ，你写的有点乱。#include <stdio.h> int main() { 	int a,b; 	printf("请输入a的值:"); 	scanf("%d",&a); 	b=fun(a); 	if (b==0) 	   printf("%d不是素数",a); 	else 	   printf("%d是素数",a); } int fun(int n) { 	int k,yes; 	for (k=2;k<=n/2;k++) 	{ 		yes = n % k; 		return yes; 	} }

user: user-0
content: 这样了再怎么改啊！！ 头疼。

user: user-4
content: 选择语句 判断 if (b=0)          改为：if (b==0)  在C语言中 关系 运算符有 <,<=,>,>=,==,!= 六种。      ' = '是赋值运算符

user: user-5
content: Finding prime numbers - Kenneth Haugland Different schemas for finding prime numbers explained with code http://www.codeproject.com/Article.aspx?tag=198374988322054872&

user: user-6
content: for循环中yes=0的时候break
user-0 提问: 基于Haar 小波图像分解中涉及到的编程问题

回复:
user: user-0
content: 很羞愧，原来是数据类型的原因

user: user-1
content: 虽然我很想帮忙，但是c的api太啰嗦，阅读起来很累 你吧代码用c++的api重写一遍我再回答你  opencv will drop c api support soon openCV will  现阶段openCV的开发是以c++为主 c的api主要是透过c++的api实现 也就是说你若使用c的api,你还得 经过转换和多一层函数调用的过程 效率反而较低  而且c++的api容易使用很多 c的api已经是不被openCV社区 推荐的过时产物（deprecated）  引用However, for all applications, you can do better with modern C++; if you  stick to older styles, you will be writing lower-quality and worse-performing code.  unless you are targeting embedded platforms, there’s no point to using  the old methods (unless you’re a masochist programmer and you’re asking for trouble). http://docs.opencv.org/doc/tutorials/core/mat_the_basic_image_container/mat_the_basic_image_container.html  c  double calcGradients(const IplImage *src,                       int aperture_size = 7) {     CvSize sz = cvGetSize(src);          IplImage* img16_x = cvCreateImage(sz, IPL_DEPTH_16S, 1);      IplImage* img16_y = cvCreateImage(sz, IPL_DEPTH_16S, 1);      cvSobel(src, img16_x, 1, 0, aperture_size);     cvSobel(src, img16_y, 0, 1, aperture_size);          IplImage* imgF_x = cvCreateImage(sz, IPL_DEPTH_32F, 1);     IplImage* imgF_y = cvCreateImage(sz, IPL_DEPTH_32F, 1);     cvScale(img16_x, imgF_x);     cvScale(img16_y, imgF_y);          IplImage* magnitude = cvCreateImage(sz, IPL_DEPTH_32F, 1);     cvCartToPolar(imgF_x, imgF_y, magnitude);     double res = cvSum(magnitude).val[0];          cvReleaseImage(&magnitude );     cvReleaseImage(&imgF_x);     cvReleaseImage(&imgF_y);     cvReleaseImage(&img16_x);     cvReleaseImage(&img16_y);          return res; }   c++  double contrast_measure(Mat& img) {     Mat dx, dy;     Sobel(img, dx, 1, 0, 3, CV_32F);     Sobel(img, dy, 0, 1, 3, CV_32F);     magnitude(dx, dy, dx);          return sum(dx)[0]; }   除非你的环境不支援c++，或者你跟linus一样对c++ 深恶痛绝（c++不断侵蚀c的领土，对c语言的狂信者linus而言， c++是c最大的对手）,否则使用c的api只是在为自己找麻烦

user: user-2
content: 无解.....
user-0 提问: 为什么结构体本身大小与结构体指针大小不一样

回复:
user: user-0
content: 谢谢各位

user: user-1
content: google 字节对齐

user: user-2
content: 自己调试，看变量内存地址吧。  数据一目了然。

user: user-3
content: 任何类型的指针变量一般都占4个字节，结构体由于存在边界对齐问题，实际占用内存比真实所需内存大，根据边界对齐要求降序排列结构成员可以最大限度地减少浪费。sizeof返回的值包含了结构中浪费的内存空间。

user: user-4
content: 指针变量首先是个变量，是变量就会占内存大小，指针变量的大小与机器相关。

user: user-5
content: 查看"字节对齐"相关内容和"指针大小"相关内容

user: user-6
content: #include <stdio.h> #define field_offset(s,f) (int)(&(((struct s *)(0))->f)) struct AD  { int a; char b[13]; double c;}; #pragma pack(push) #pragma pack(1) struct A1  { int a; char b[13]; double c;}; #pragma pack(2) struct A2  { int a; char b[13]; double c;}; #pragma pack(4) struct A4  { int a; char b[13]; double c;}; #pragma pack(8) struct A8  { int a; char b[13]; double c;}; #pragma pack(16) struct A16 { int a; char b[13]; double c;}; #pragma pack(pop) int main() {     printf("AD.a %d\n",field_offset(AD,a));     printf("AD.b %d\n",field_offset(AD,b));     printf("AD.c %d\n",field_offset(AD,c));     printf("\n");     printf("A1.a %d\n",field_offset(A1,a));     printf("A1.b %d\n",field_offset(A1,b));     printf("A1.c %d\n",field_offset(A1,c));     printf("\n");     printf("A2.a %d\n",field_offset(A2,a));     printf("A2.b %d\n",field_offset(A2,b));     printf("A2.c %d\n",field_offset(A2,c));     printf("\n");     printf("A4.a %d\n",field_offset(A4,a));     printf("A4.b %d\n",field_offset(A4,b));     printf("A4.c %d\n",field_offset(A4,c));     printf("\n");     printf("A8.a %d\n",field_offset(A8,a));     printf("A8.b %d\n",field_offset(A8,b));     printf("A8.c %d\n",field_offset(A8,c));     printf("\n");     printf("A16.a %d\n",field_offset(A16,a));     printf("A16.b %d\n",field_offset(A16,b));     printf("A16.c %d\n",field_offset(A16,c));     printf("\n");     return 0; } //AD.a 0 //AD.b 4 //AD.c 24 // //A1.a 0 //A1.b 4 //A1.c 17 // //A2.a 0 //A2.b 4 //A2.c 18 // //A4.a 0 //A4.b 4 //A4.c 20 // //A8.a 0 //A8.b 4 //A8.c 24 // //A16.a 0 //A16.b 4 //A16.c 24 // //

user: user-0
content: 非常感谢各位！

user: user-7
content: 指针 里面保存的是地址  4个字节 32bit 足够表示0到4G的虚拟地址空间 程序运行的时候 加载到相应的虚拟地址空间 通过页表 对应相应的内存地址  指针它不是个东西 它就是存的是地址

user: user-8
content: 在一般win32平台下,  sizeof对所有类型的指针都是固定长度, 一般是4字节.  sizeof对结构体就是其实际需要占的字节长度, 同时跟内部字节对齐方式有关.

user: user-9
content: ? sizeof(stu)!=sizeof(pstu)，sizeof(stu)=12，sizeof(pstu)=4 sizeof(pstu)=4 pstu是指针所以是4 struct student   {    char *name;    int score;     char sex;                }stu,*pstu; stu所占的内存是4+4+4（char sex），最后一个4是因为字节对齐的原因。

user: user-10
content: 根据字节对齐原则：结构体的总大小为结构体最宽基本类型成员大小的整数倍 最大是4个字节 所以结构体的大小永远是4的倍数

user: user-11
content: 看一下关于字节对齐的资料就可以理解了
user-0 提问: 【求助】eclipse + MinGW 搭建C编译环境，找不到glibc.h  

回复:
user: user-1
content: 引用 2 楼 liyu1128 的回复:eclipse + MinGW 搭建环境库全一点还是 eclipse+ cygwin 环境的库全一点？ 或者说哪个环境好用点？  引用 1 楼 user-2 的回复:mingw是出原生代码，依赖M$运行库，不用glibc，工程需要改动，或者换到cygwin环境试试... 建议用后者吧！环境只是一个工具而已！

user: user-0
content: eclipse + MinGW 搭建环境库全一点还是 eclipse+ cygwin 环境的库全一点？ 或者说哪个环境好用点？  引用 1 楼 user-2 的回复:mingw是出原生代码，依赖M$运行库，不用glibc，工程需要改动，或者换到cygwin环境试试...

user: user-2
content: mingw是出原生代码，依赖M$运行库，不用glibc，工程需要改动，或者换到cygwin环境试试...
user-0 提问: 高数问题

回复:
user: user-1
content: 趁有时间学就好好掌握一下，技多不压身，而且高数对于计算机学科还是有作用的

user: user-2
content: 个人意见：学《高等数学》的最大作用不是学到了将来有用的知识；而是锻炼了学习者的大脑。（一种脑筋操）

user: user-3
content: 书多看几遍  同济版本的那高数书感觉还是很易懂的

user: user-4
content: 挂过科的飘过~

user: user-5
content: 高等数学还是高等代数！只想保证不挂科还是挺容易的，老师出的考题都是很基础的那种，而且出现书上的原题也很正常，好好把书上的练习题做哈。
user-0 提问: 宏定义可变参数崩溃

回复:
user: user-0
content: .i文件中和一楼说的一样，展开后为：printf("%0""nLen""d", nLen);  谢谢两位的指点。

user: user-1
content: 编译选项加/EP /P，重新编译，查看宏展开后对应的.i文件。gcc加-E

user: user-2
content: 宏就是文本替换，SETCHNFMT(nLen)被展开成了"%0nLend"
user-0 提问: 指针

回复:
user: user-1
content: ls的建议都好，但也别忘了malloc之后，记得free一下

user: user-2
content: stu.name需要分配空间，空间的大小必须要>=sizeof("jimy")

user: user-3
content: 指针使用前要初始化  google 指针初始化

user: user-4
content: strcpy(stu.name, "Jimy"); stu.name可是一个野指针哦，出现这样错误应该是非法内存访问。野指针可能执行了不可以访问的内存区域，造成往该部分区域里写数据出现错误。 在写之前，建议在堆上申请空间。（malloc/realloc/calloc）

user: user-5
content: stu test; test.name = (char *)malloc(20);  strcpy(test.name, "Jimy"); test.score=99;

user: user-6
content: 错误的大意是说 引用了0x00000000的内存，该内存不能写。因此你strcpy时会错  原因是stu是个全局变量，因此编译器会对他初始化，name会初始化为NULL。因此出现了上面的情况  如果是局部变量，那就不一定是NULL了。如果引用的内存恰好是可写的，那就严重了！！ 所以，指针变量一定要记得初始化！！！  解决这个问题的话，给name分配一块有效的内存

user: user-7
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

user: user-8
content: name 是指针， 没有分配内存空间 stu.name = (char *)malloc(20);
user-0 提问: C语言scanf函数问题

回复:
user: user-1
content: 其实，在scanf（"%d,%d",&m,&n）;中  个人理解： 在逗号的前后放置空格是可行的 scanf在遇到回车后结束输入，将输入的数赋值m、n 逗号或空格 只是隔开两个数让%d确认其值是赋给m还是n， 如果你觉得看上去别扭就直接用一个空格隔开就好了。

user: user-2
content: 引用 7 楼 u011717322 的回复:scanf("%d, %d", &m, &n);这个里面不需要“，”； 改成这样scanf("%d%d", &m, &n);  可以的，只要输入的时候也带上就好了！scanf格式输入

user: user-3
content: scanf("%d, %d", &m, &n);这个里面不需要“，”； 改成这样scanf("%d%d", &m, &n);

user: user-4
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-5
content: 书印错了吧，空格在%d前貌似多余，改一下把空格摆在逗号前...  "%d ,%d"

user: user-6
content: #include <stdio.h>   int main(int argc,char *argv[]) {     int m = 0,n =1;       scanf("%d, %d", &m, &n);     printf("m = %d n = %d\n",m,n);       return 0;  }   scanf("%d, %d", &m, &n);  你这里在scanf里面设定的是怎么样的格式，那么输入的时候就要用一样的格式，否则的不到想要的结果

user: user-7
content: 输入的逗号请用英文输入法。

user: user-8
content: 我也是，没有问题

user: user-9
content: 测试了下，没有发现有什么问题。

user: user-3
content: 引用 8 楼 max_min_ 的回复:[quote=引用 7 楼 u011717322 的回复:] scanf("%d, %d", &m, &n);这个里面不需要“，”； 改成这样scanf("%d%d", &m, &n);  可以的，只要输入的时候也带上就好了！scanf格式输入[/quote] 是的！带“，”也是可以的，刚刚又试了下， 只不过在输入时两个数之间就要用“，”。
user-0 提问: 大神求救     怎么才能单独把一个ani格式的鼠标生成res文件啊。。。就是在dos窗口下输入rc指令，调用rc.exe来做

回复:
user: user-1
content: #include<resource.h>？？？？？？ 都是 #include "resource.h" //的吧。 看看VC自动生成的代码，没有一个是 #include<resource.h> 的  #include<resource.h> 只在系统目录里查找头文件。  #include "resource.h"  在当前目录或者系统目录里，查找头文件。

user: user-0
content: 引用 1 楼 turingo 的回复:命令行 rc myOwnCursor.rc 本身是没有问题的  应该是你的资源文件不对，例如 CUR CURSOR "myOwnCursor.rc" myOwnCursor.rc根本就不是什么图标或者光标格式，从而导致编译为res时不成功  [quote=引用 楼主 u012324979 的回复:] 大神求救     怎么才能单独把一个ani格式的鼠标生成res文件啊。。。就是在dos窗口下输入rc指令，调用rc.exe来做  用vc++6.0把myOwnCursor.rc和myOwnCursor.ani这两个文件放在一个文件夹的，myOwnCursor.rc这个文件里我是这么定义的 #include<resource.h> #define CUR 0x1000 CUR CURSOR "myOwnCursor.rc"  这是在网上看的一个教程   看他的教程在dos窗口输入rc myOwnCursor.rc就生成了res文件，可我怎么就不行啊。。大神求救[/quote]

user: user-0

user: user-1
content: myOwnCursor.rc 没有图标 在myOwnCursor.rc里加上这么一句试试 CUR    ICON    DISCARDABLE     "myOwnCursor.ani"

user: user-2
content: rc myresource.rc

user: user-3
content: 命令行 rc myOwnCursor.rc 本身是没有问题的  应该是你的资源文件不对，例如 CUR CURSOR "myOwnCursor.rc" myOwnCursor.rc根本就不是什么图标或者光标格式，从而导致编译为res时不成功  引用 楼主 u012324979 的回复:大神求救     怎么才能单独把一个ani格式的鼠标生成res文件啊。。。就是在dos窗口下输入rc指令，调用rc.exe来做  用vc++6.0把myOwnCursor.rc和myOwnCursor.ani这两个文件放在一个文件夹的，myOwnCursor.rc这个文件里我是这么定义的 #include<resource.h> #define CUR 0x1000 CUR CURSOR "myOwnCursor.rc"  这是在网上看的一个教程   看他的教程在dos窗口输入rc myOwnCursor.rc就生成了res文件，可我怎么就不行啊。。大神求救
user-0 提问: 【Github for Windows】客户端Login Failed

回复:
user: user-1
content: github客户端不错，可惜没有中文版，在网上找到一篇是图文教程还是不错的。 http://www.ihref.com/read-16514.html

user: user-2
content: 同问呀.我去下载了.net framework的组件,windows update现在检查更新也已经全部更新了...但是还是一样的结果...

user: user-3
content: 引用 7 楼 thini 的回复:问题已解决。  并不是像网上说的那样设置代理。只需要更新.net framework组件，虽然安装客户端时也会先装.net framework，但github for windows自己安装的不是最新。 要怎么更新？我的是XP，有一个.NET Framework 4，是最新的吗？我在win8的电脑上就可以登陆

user: user-0
content: 问题已解决。  并不是像网上说的那样设置代理。只需要更新.net framework组件，虽然安装客户端时也会先装.net framework，但github for windows自己安装的不是最新。

user: user-4
content: 这个链接里边有讨论这个问题： https://github.com/gitextensions/gitextensions/issues/2044 尝试更新最新的.net framework 框架，网址是： http://support.microsoft.com/kb/2468871 应该可以吧。。。我也在试、、、、

user: user-5
content: 我也遇到了一样的问题，呜呜

user: user-6
content: 抓包比较两种连接方法的不同？

user: user-0
content: 引用 2 楼 zhao4zhong1 的回复:网页可能设置用了代理。 网页没有设置代理的喔。。

user: user-6
content: 网页可能设置用了代理。

user: user-0
content: 都没人的么。。
user-0 提问: 0xC0000005:Access Violation

回复:
user: user-0
content: 大神们，能告诉我一下在运行程序的时候（即代码在编译器中编译连接）的时候查看他的底层汇编代码么，就像出问题时点击调试能显示可是不出问题时就显示不了，我用的是vc++6.0和codeblocks这两款编译器!

user: user-1
content: initsq(head);没用申请内存空间的！不能直接使用 需要自己手动分配使用的内存空间的！ 在传参之前分配或者在函数体分配都是可以的！

user: user-2
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

user: user-3
content: 0xC0000005非法读写内存，大多由指针未初始化和数组越界造成

user: user-4
content: 这个错误的基本都是指针问题

user: user-5
content: sqqueue *head=new sqqueue; //指针使用之前 要进行申请空间，
user-0 提问: 谁能帮解释一下这个程序

回复:
user: user-1
content: 例子： s[3]="123AB" for(val=0.0;isdigit(s[i]);i++)//isdigit(s[i])判断s[i]是否是数字，这里将会循环三次    val=10.0 * val + (s[i]-'0');//(s[i]-'0')算出对应的数值，分别为1，2，3. 三次循环结果及100.0+20.0+3.0=123.0

user: user-2
content: 自己做个十进制字符串，转整型数的程序，对照一下就可一知道了。

user: user-3
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。

user: user-4
content: 代码都不贴全…… i大概是指的s字符串的位数，0就是第一位 val就是转换后的double值，s的每一位转换后就往val上面加

user: user-5
content: 首先排版规范点啊，这代码

user: user-6
content: 引用 3 楼 u010334406 的回复:[quote=引用 2 楼 u010334406 的回复:] [quote=引用 1 楼 ganpengjin1 的回复:] 你还是好好找本书看下吧 你这不叫神马指点，但是我忽然间领悟道理了。[/quote] (s[i]-'0')这个值为1,val大概就等于1.0；下一次循环s[i]取3,那val就是13.0，然后s[i]再取2,那么val就是132.0[/quote] 是的，先看书，实在不懂得就提问！

user: user-0
content: 引用 2 楼 u010334406 的回复:[quote=引用 1 楼 ganpengjin1 的回复:] 你还是好好找本书看下吧 你这不叫神马指点，但是我忽然间领悟道理了。[/quote] (s[i]-'0')这个值为1,val大概就等于1.0；下一次循环s[i]取3,那val就是13.0，然后s[i]再取2,那么val就是132.0

user: user-0
content: 引用 1 楼 ganpengjin1 的回复:你还是好好找本书看下吧 你这不叫神马指点，但是我忽然间领悟道理了。

user: user-6
content: 你还是好好找本书看下吧
user-0 提问: 段错误（核心已转移）

回复:
user: user-1
content: 设置观察点(WatchPoint) 观察点一般用来观察某个表达式(变量也是一种表达式)的值是否变化了。如果有变化，马上停住程序。有下面的几种方法来设置观察点： watch <expr> 为表达式(变量)expr设置一个观察点。一旦表达式值有变化时，马上停住程序。 rwatch <expr> 当表达式(变量)expr被读时，停住程序。 awatch <expr> 当表达式(变量)的值被读或被写时，停住程序。 info watchpoints 列出当前设置的所有观察点。

user: user-0
content: 引用 6 楼 zhao4zhong1 的回复:linux: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令  我试过了可是还是木有啥效果= = 是我看错了么？？？？

user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。  判断是否越界访问，可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断，可将数组多声明一个元素，并设置数据读写断点在该多出元素对应的地址上。 #include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }

user: user-2
content: 段错误: 非法读写内存，大多由指针未初始化和数组越界造成

user: user-3
content: 少打了几个字，补充下。  在没有对 g_argv 指针元素进行内存分配的情况下，试图写向地址位置0（g_argv的所有元素均为0）的空间，自然出现段错误。

user: user-3
content: 数组 g_argv 为指针数组，里面存放的是指针，g_argv[x] 需要指向一块内存空间，才能对其进行操作。 而函数 get_command() 的语句： strncpy(g_argv[g_argc], (oop+count-num), num); 在没有对 g_argv 情况下，试图写向地址位置0（g_argv的所有元素均为0）的空间，自然出现段错误。

user: user-4
content: 是你的数组越界了，你仔细找找在哪里设置了它的下标

user: user-1
content: linux: 进程意外退出会在当前目录下产生‘core’文件或形如‘core.数字’的文件比如‘core.1234’ 使用命令 gdb 运行程序名 core或core.数字 进入gdb然后使用bt命令 可以查看进程意外退出前函数调用的堆栈，内容为从上到下列出对应从里层到外层的函数调用历史。 如果进程意外退出不产生core文件，参考“ulimit -c core文件最大块大小”命令

user: user-5
content: 引用 4 楼 zhao4zhong1 的回复:崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。  判断是否越界访问，可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断，可将数组多声明一个元素，并设置数据读写断点在该多出元素对应的地址上。 #include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }    赵老师粗心了, 下面有一行小字, 写的是liunx, 这个环境下似乎没有: "崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。"
user-0 提问: 为什么while 里的输出 语句执行了2次，。，

回复:
user: user-0
content: 怎么解决这个问题呢？？

user: user-1
content: 有回车，   printf("请输入下一个字符:"); scanf("%c",&ch);       ---------------- 读了输入buffer里的回车

user: user-2
content: 在while循环体内，scanf之前加上这句  fflush(stdin);   或者修改while循环条件

user: user-3
content: 引用 2 楼 u012661911 的回复:怎么解决这个问题呢？？  printf("请输入 第一个字符:"); scanf("%c",&ch); getchar();  //因为输入的时候，有一个回车符在输入缓冲区里，可以用这个吃掉回车符，避免影响正常程序 //下面的scanf最好也加上getchar，来吃掉回车符！

user: user-4
content: 引用 2 楼 u012661911 的回复:怎么解决这个问题呢？？ while (ch !='.' && ch != '\n')
user-0 提问: 菜鸟求指导

回复:
user: user-0
content: 引用 1 楼 JiMoKuangXiangQu 的回复:fscanf() : 格式化解析，要求每一行都规范。 fgets() : 每次读取一行，然后提取。能详细点吗

user: user-1
content: fscanf() : 格式化解析，要求每一行都规范。 fgets() : 每次读取一行，然后提取。

user: user-2
content: 引用 2 楼 u012701423 的回复:[quote=引用 1 楼 JiMoKuangXiangQu 的回复:] fscanf() : 格式化解析，要求每一行都规范。 fgets() : 每次读取一行，然后提取。能详细点吗 [/quote] 已经可以的了！就差源码了！如果还是不懂的话，可以看看c语言的基础书上的 基本文件操作的几个函数，自己也写例程实验实验下，多动手！
user-0 提问: 关于链表的问题 （急！！在线等）

回复:
user: user-1
content: printf("请输入学号:");         scanf("%d",&p1->num); //这里输入学号以后会有一个回车符，在输入缓冲区中的，         printf("请输入姓名:");         fgets(p1->name,100,stdin); //执行到这里的时候就会取出上次一次输入的回车符了，所以直接跳过         printf("请输入性别:"); //所以每次输入之后，下一次输入之前应该吃掉上一次输入的时候带入的回车符 //当然也可以刷新缓冲区的 getchar();// 吃掉回车符 fflush(stdin);//刷新缓冲区， 任选一个！

user: user-2
content: 在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。

user: user-3
content: scanf("%[^\n]",p1->name);除了 换行符号 都可以 存入 字符串 中

user: user-4
content: 引用 1 楼 max_min_ 的回复: fflush(stdin);//刷新缓冲区， 任选一个！   fflush 针对 输出流或更新流  用在输入流上面是未定义行为
user-0 提问: 关于有符号数与无符号数互转的问题

回复:
user: user-1
content: 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……

user: user-2
content: 自认为应该是将-25转为二进制补码，然后将此补码按照无符号数转回来即可 似乎也行，不过是做无用功， 因为， 有符号数就是补码数，正有符号数和0就是原码表示，负数就是补码表示。  有符号数和无符号数，之间的强制转换； 就是不做转换，原数不动，一个Bit也没有改变。 改变的只是数据类型。

user: user-3
content: unsigned int s = ( unsigned int )( -25 ); 好色部分不会有任何可执行代码，只是编译的时候将其解释为无符号，然后拷贝给s

user: user-4
content: 有符号与无符号的相互转化是直接复制位的

user: user-5
content: 无符号数, 有符号数 的二进制编码相同
user-0 提问: ERROR C2143 求大神解释

回复:
user: user-1
content: linklist不是类型，你需要定义，typedef struct linklist mylinklist;好低级的错误

user: user-0
content: 引用 4 楼 jerry_dqh 的回复:[quote=引用 3 楼 u012692671 的回复:] [quote=引用 1 楼 focuslight 的回复:] 可能需要加空格 加在哪里  指针前么 [/quote] 你这个代码编译错误太多了。 CreateListF()这个函数有返回指针 ，为啥用void 做为返回类型。[/quote] #include <stdlib.h>  #include <stdio.h>   struct node {  int num;  struct node *next;  }    main( )   {   struct node *creat();  void print();   struct node *head; head=NULL; head=creat(head);/*创建单链表*/  print(head);/*打印单链表*/  }    /******************************************/   struct node*creat( structnode*head)  {    struct node*p1,*p2;    p1=p2=(structnode*)malloc(sizeof(structnode));  scanf("%d",&p1->num);/*输入节点的值*/   p1->next=NULL;/*将新节点的指针置为空*/   while(p1->num>0)/*输入节点的数值大于0*/  {  if(head==NULL)head=p1;/*空表，接入表头*/   elsep2->next=p1;/*非空表，接到表尾*/  p2=p1;   p1=(structnode*)malloc(sizeof(structnode)); scanf("%d",&p1->num);/*输入节点的值*/  }   return head; }    /*******************************************/    void print(struct node*head) {   struct node *temp;   temp=head;/*取得链表的头指针*/   while(temp!=NULL)   {  printf("%6d",temp->num);/*输出链表节点的值*/  temp=temp->next;/*跟踪链表增长*/  }  }     这个是在网上找的代码  error C2143: syntax error : missing ')' before '*' 还是不明白 这里为什么出错

user: user-0
content: 引用 4 楼 jerry_dqh 的回复:[quote=引用 3 楼 u012692671 的回复:] [quote=引用 1 楼 focuslight 的回复:] 可能需要加空格 加在哪里  指针前么 [/quote] 你这个代码编译错误太多了。 CreateListF()这个函数有返回指针 ，为啥用void 做为返回类型。[/quote] 哦 有返回值的函数不用制定类型吗？

user: user-2
content: 引用 3 楼 u012692671 的回复:[quote=引用 1 楼 focuslight 的回复:] 可能需要加空格 加在哪里  指针前么 [/quote] 你这个代码编译错误太多了。 CreateListF()这个函数有返回指针 ，为啥用void 做为返回类型。

user: user-0
content: 引用 1 楼 focuslight 的回复:可能需要加空格 加在哪里  指针前么

user: user-0
content: 加在哪里 指针前么

user: user-3
content: 可能需要加空格
user-0 提问: 如何在DEV-Cpp(4.9.9.2) 添加库函数，如

回复:
user: user-1
content: 项目属性中添加包含目录、库目录

user: user-2
content: 不建议用dos下的软件,如果一定要用.现在的xp对以前的软件支持不太好. 练习画图,下载个vc6即可.。

user: user-3
content: 引用 楼主 linyeokka 的回复:本人C语言新手一枚，想用C语言作图，发现需要添加库函数graphics.h 在网上找到了一些解答： 1.将下载好的graphics.header file添加到include文件夹中 2.将下载好的libbig.A文件 添加到lib文件夹中  之后在网上下载了如下程序： #include <graphics.h> int main(void) {     int gdriver,gmode;     gdriver=DETECT;     initgraph(&gdriver,&gmode,"C:\\Dev-Cpp");     line(100,100,200,200);     getch();     closegraph();     return 0; }   出现了这样的错误：   [Linker error] undefined reference to `initgraph'......  在网上并没有找到相应的解答，请高人详细指点一下 楼主，我给你一个100分的答复，你把分给我。你去下载一个软件叫《C与C++程序设计学习与实验系统2015.5》 这个软件有Turbo C,C++ 3.0 VC,和GCC，四个编译器合成的，非常好用，你说的那些画图什么的，都完全含在里面，你不用再为这些琐事耽误学习时间。直接就上手；  你用的那个DEV 之类的软件，也是一样做C语言学习，彼此无二异，你关注的是编程，而不是编译器，何况那上面带了4个编译器，足够你使用！～～～

user: user-4
content: 将你下载好的库函数复制粘贴到你安装dev的路径中的MinGW32文件夹下的include文件夹中，你会发现该路径中有很多.h的头文件，比如如下是我的安装路径中应该添加的位置：D:\Program Files (x86)\Dev-Cpp\MinGW32\include

user: user-5
content: http://www.easyx.cn

user: user-0
content: 感谢版主回复： graphics.h 放在include文件夹中了 绝对路径是：C:\Dev-Cpp\include  “修改makefile对应的引导头文件目录”没明白 makefile是什么，，，

user: user-6
content: 首先这个应该是TC图像库的吧？ 你的graphics.h是放在什么目录下，绝地路径是啥？如果不是放在标准库的头文件里的话， 改成#include "graphics.h " 并修改makefile对应的引导头文件目录！
user-0 提问: 用C写的数据结构实在看不懂，求高手指点一二

回复:
user: user-1
content: 为什么要有数据结构这个东东？ 因为要将现实世界或者抽象理论中的各种数据保存在计算机外存（光盘、硬盘、U盘……）或内存（ROM、RAM、SRAM……）里面的二进制字节数组中。 然后让CPU这个只会执行预先保存好的加减乘除移位条件转移……等机器指令的家伙按照人的意志去处理这些数据。至于具体如何处理就是所谓算法。

user: user-1
content: 计算机组成原理→DOS命令→汇编语言→C语言（不包括C++）、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言（包括C++）、架构……  对学习编程者的忠告： 眼过千遍不如手过一遍！ 书看千行不如手敲一行！ 手敲千行不如单步一行！ 单步源代码千行不如单步对应汇编一行！  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。 （Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。）  想要从本质上理解C指针，必须学习汇编以及C和汇编的对应关系。 从汇编的角度理解和学习C语言的指针，原本看似复杂的东西就会变得非常简单！ 指针即地址。“地址又是啥？”“只能从汇编语言和计算机组成原理的角度去解释了。” 但我又不得不承认：  有那么些人喜欢或者适合用“先具体再抽象”的方法学习和理解复杂事物；  而另一些人喜欢或者适合用“先抽象再具体”的方法学习和理解复杂事物。 而我本人属前者。  这辈子不看内存地址和内存值；只画链表、指针示意图，画堆栈示意图，画各种示意图，甚至自己没画过而只看过书上的图……能从本质上理解指针、理解函数参数传递吗？本人深表怀疑！ 这辈子不种麦不收麦不将麦粒拿去磨面；只吃馒头、吃面条、吃面包、……甚至从没看过别人怎么蒸馒头，压面条，烤面包，……能从本质上理解面粉、理解面食吗？本人深表怀疑！！  提醒： “学习用汇编语言写程序” 和 “VC调试(TC或BC用TD调试)时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 （Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。） 想要从本质上理解C指针，必须学习C和汇编的对应关系。” 不是一回事！  不要迷信书、考题、老师、回帖； 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实！  有人说一套做一套，你相信他说的还是相信他做的？ 其实严格来说这个世界上古往今来所有人都是说一套做一套，不是吗？  不要写连自己也预测不了结果的代码！  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  十字链表交换任意两个节点C源代码（C指针应用终极挑战）http://download.csdn.net/detail/zhao4zhong1/5532495

user: user-2
content: 一般这种属于自定义操作，没什么规定，如果你想看优秀的代码，可以看看stl container部分的add操作时如何实现

user: user-3
content: 引用 3 楼 AnYidan 的回复:[quote=引用 楼主 u012686437 的回复:] 举一个最简单的例子，顺序线性表的插入元素。开头 void InserElem(ElemType Sqlist[],int &n,int i ElemType item)这一行表示向顺序表中第I个位置插入元素item,该顺序表长度为n,我不知道为什么这样写，学c的时候从来没见过这种格式的。还有比如 删除的时候 void dELelem (Sqlist *L,int i)什么时候L前面是指针，什么时候是地址，什么时候什么时候什么也不加。。我都混乱了，都没有个说明规定啊。 学c的时候从来没见过这种格式的 那就说明不是c 的程序，不符合 c 的语法[/quote] 这是c++的语法，是c语言所没有的。不过在c数据结构的伪算法是经常能发现的，因为这种表示比较形象，说明要影响输入的参数的值。仅此而已，不是c语法

user: user-4
content: 引用 楼主 u012686437 的回复:举一个最简单的例子，顺序线性表的插入元素。开头 void InserElem(ElemType Sqlist[],int &n,int i ElemType item)这一行表示向顺序表中第I个位置插入元素item,该顺序表长度为n,我不知道为什么这样写，学c的时候从来没见过这种格式的。还有比如 删除的时候 void dELelem (Sqlist *L,int i)什么时候L前面是指针，什么时候是地址，什么时候什么时候什么也不加。。我都混乱了，都没有个说明规定啊。 学c的时候从来没见过这种格式的 那就说明不是c 的程序，不符合 c 的语法

user: user-5
content: 引用 1 楼 czarten 的回复:int &n这不是C的写法，这是C++的引用 你可以简单地理解为，int n作参数，在函数内部对n的修改不会影响传入的那个n，而int &n则会  也就是说，int &n这里的&符号跟C里面的取地址符号是两码事，不相关 至于void dELelem (Sqlist *L,int i)这句 如果是Sqlist L，那么作为参数传入的是一个Sqlist，你在函数里面对这个Sqlist的任何改变都不影响到外面，这显然是不符合函数的要求的 而Sqlist *L，传入的是Sqlist的指针，这样才能实现在函数内部更改外面的东西

user: user-5
content: int &n这不是C的写法，这是C++的引用 你可以简单地理解为，int n作参数，在函数内部对n的修改不会影响传入的那个n，而int &n则会
user-0 提问: 递归转goto

回复:
user: user-1
content: 引用 3 楼 user-8 的回复:goto非必要还是不要使用的好，这个很多书上应该都有提到。 几乎每本基础的书上都有

user: user-2
content: 引用 8 楼 u011717322 的回复:[quote=引用 1 楼 worldy 的回复:] 使用沟通和递归一点都没有关系 任何的while for都可以转为if goto的结构  for(i=a1;i<a2;i++)  ==> i=a1; loop: if(i<a2) { .... i++; goto loop }  红色部分对应于for的三个要素  while(i<a) { .... }  loop: if(i<a) { .....//和实际使用while一样，要有让i增大的语句，否则就是死循环 goto loop } 我也认为是这样的。 goto也是一种循环，只不过有很多的弊端。 很少用而已。[/quote]  goto也不是有什么弊端，汇编后就是一个jump语句。之所以很多书教人尽量少用goto，只是因为goto会破坏代码的模块化！但在一些场合，使用沟通会使得代码更加简洁，比如，一个函数中的现场清理，如果在每个子块中都加清理现场的代码，也是很郁闷的，还不如goto到一个地方统一处理

user: user-3
content: 引用 1 楼 worldy 的回复:使用沟通和递归一点都没有关系 任何的while for都可以转为if goto的结构  for(i=a1;i<a2;i++)  ==> i=a1; loop: if(i<a2) { .... i++; goto loop }  红色部分对应于for的三个要素  while(i<a) { .... }  loop: if(i<a) { .....//和实际使用while一样，要有让i增大的语句，否则就是死循环 goto loop } 我也认为是这样的。 goto也是一种循环，只不过有很多的弊端。 很少用而已。

user: user-4
content: http://www.codeproject.com/Articles/418776/How-to-replace-recursive-functions-using-stack-and

user: user-5
content: goto有goto的好处，但是滥用就不对了。使用的时候只要符合几个基本原则，比如不跨函数跳跃等等，基本还是可以的  至于goto提高程序效率，Kunth是经过严格论证的，他认为使用goto在某些场合，可以是算法效率提高到一种极致。但他并不否认Dijkstra的goto有害论，goto的确会破坏结构化程序的结构，滥用会带来不可预测的结果。  现在像Java等语言中虽然保留了关键字，但却不允许使用。总之尽可能的避免吧，除非你觉得能提高效率，不然不要用太多，虽然听说linux中用了特别多的goto...

user: user-6
content: 第一个例子是尾递归，容易变为循环 第二个不是尾递归，所以不能仿照上面变成循环

user: user-0
content: 引用 2 楼 mujiok2003 的回复:仅供参考 #include <stdio.h> //iterative version  int power(int a, int n) {     int res = 1;     while (n--) res *= a;     return res; } //tail recursive version int power2_au(int a, int n, int res) {   if(n)    {     return power2_au(a, n-1, res * a);   }   return res;    }   int power2(int a, int n) {   return power2_au(a, n, 1); }  int main() {   printf("%d\n", power(8, 3));   printf("%d\n", power2(8, 3));      return 0; } 这个是求幂的啊，我关心的是foo怎么转化为循环

user: user-7
content: 看看这个。

user: user-8
content: goto非必要还是不要使用的好，这个很多书上应该都有提到。

user: user-7
content: 仅供参考 #include <stdio.h> //iterative version  int power(int a, int n) {     int res = 1;     while (n--) res *= a;     return res; } //tail recursive version int power2_au(int a, int n, int res) {   if(n)    {     return power2_au(a, n-1, res * a);   }   return res;    }   int power2(int a, int n) {   return power2_au(a, n, 1); }  int main() {   printf("%d\n", power(8, 3));   printf("%d\n", power2(8, 3));      return 0; }

user: user-2
content: 使用沟通和递归一点都没有关系 任何的while for都可以转为if goto的结构  for(i=a1;i<a2;i++)  ==> i=a1; loop: if(i<a2) { .... i++; goto loop }  红色部分对应于for的三个要素  while(i<a) { .... }  loop: if(i<a) { .....//和实际使用while一样，要有让i增大的语句，否则就是死循环 goto loop }
user-0 提问: 关于字符数组中存在字符串结束符的问题

回复:
user: user-0
content: @lunat  我就是想要这个，但是\0我想要显示出来   @buyong  这个运行之后就异常中止了。。 至于C语言的东西我不是很懂，学C++的

user: user-1
content: char chaStr = "13\\0ds";  引用 楼主 tianminghahaha 的回复:如果字符数组中存在字符串结束符，如下所示： char chaStr = {'1','3','\0','d','s'}; string lstr(chaStr); 字符串lstr得到的是13，怎么让lstr的值为13\0ds？

user: user-2
content: 引用 楼主 tianminghahaha 的回复:如果字符数组中存在字符串结束符，如下所示： char chaStr = {'1','3','\0','d','s'}; string lstr(chaStr); 字符串lstr得到的是13，怎么让lstr的值为13\0ds？      string lstr;     lstr.resize(5);     for(int i=0; i<sizeof(chaStr); ++i)     {         lstr[i] = chaStr[i];     }

user: user-3
content: 例如： char chaStr[] = "13\000ds\000\000"; //‘\0’是字符串的结束符的哦！ int i=0; int c=0,c0=0; while((c = chaStr[i++])!=0 || c0 != 0 ) {          if(c)  		putchar(c); 	 	if(c0==0 && c==0)break; 	c0 = c;     if(c0 == 0)  		putchar('\n');          }

user: user-3
content: 多字符串，当作一个用，没有具体的方式，不过可以自己实现。

user: user-3
content: \\0 就会显式\0

user: user-4
content: 帖主要求很无理。

user: user-5
content: 别用c 字符串函数，自己实现想要的功能

user: user-6
content: 引用 1 楼 wangdahu888 的回复:char chaStr[] = {'1','3','\\','0','d','s'};  这个跟楼主要的不一样了吧

user: user-7
content: char chaStr[] = {'1','3','\0','d','s'}; string lstr(chaStr, sizeof(chaStr));

user: user-8
content: //这里的吧！ char chaStr[] = {'1','3','\0','d','s'}; //‘\0’是字符串的结束符的哦！ int i=0; for(i=0; i< 5; i++) {     printf("%c ", chaStr[i]); } printf("\n");

user: user-9
content: char chaStr[] = {'1','3','\\','0','d','s'};
user-0 提问: 求各位大神帮忙

回复:
user: user-0
content: @user-4

user: user-0
content: 引用 3 楼 user-4 的回复:[quote=引用 2 楼 u012705655 的回复:] 谢谢喽，这么说的话，如果将sum定义成全局变量，在哪都可以调用了？那如果不是全局变量呢，该怎么做？ 如果是在.cpp文件中，那么在此源文件中都是可以调用的！ 如果是.h文件中，只要包含了此头文件也都可以使用！ 如果不是全局的话，就在看它的作用域的范围了，只有在其范围内才有效！  楼主可以找一本基础的c语言书籍看看 推荐个 http://download.csdn.net/detail/user-4/6333711[/quote] 谢了，问题已经解决了。。  void xksz(void)  {  	HWND hWnd = GetHWnd(); 	 	SetWindowText(hWnd, "线宽设置");  	InputBox(xk,10,"请选择线宽\n（1：1像素；2：2像素；3：3像素）");    //InputBox弹出一个对话框 	 	sscanf(xk, "%d", &xk);  	if(xk[0]==1)  		setlinestyle(PS_SOLID,1);  	else if(xk[0]==2)  		setlinestyle(PS_SOLID,2);  	if(xk[0]==3)  		setlinestyle(PS_SOLID,3); } 这个线宽设置的结果怎么在 setlinestyle(xk[0]);这里调用？？

user: user-1
content: int y; ...... ...... y = sum;

user: user-2
content: 把sum用作参数然后return再赋给原来的sum

user: user-3
content: 引用 2 楼 u012705655 的回复:谢谢喽，这么说的话，如果将sum定义成全局变量，在哪都可以调用了？那如果不是全局变量呢，该怎么做？  用参数传入地址 *ptr++;

user: user-4
content: 引用 2 楼 u012705655 的回复:谢谢喽，这么说的话，如果将sum定义成全局变量，在哪都可以调用了？那如果不是全局变量呢，该怎么做？ 如果是在.cpp文件中，那么在此源文件中都是可以调用的！ 如果是.h文件中，只要包含了此头文件也都可以使用！ 如果不是全局的话，就在看它的作用域的范围了，只有在其范围内才有效！  楼主可以找一本基础的c语言书籍看看 推荐个 http://download.csdn.net/detail/user-4/6333711

user: user-0
content: 谢谢喽，这么说的话，如果将sum定义成全局变量，在哪都可以调用了？那如果不是全局变量呢，该怎么做？

user: user-4
content: 可以调用的！ 从上面的代码看， sum应该是个全局的值！所以函数都是可以调用的！
user-0 提问: C语言。动态储存数据问题

回复:
user: user-1
content: malloc realloc free

user: user-2
content: 临时保存使用内存，如果需要长期保存或者数字多到内存放不下，可以保存到磁盘文件。

user: user-3
content: 引用 2 楼 M173475237 的回复:[quote=引用 1 楼 user-3 的回复:] 那就动态分配内存呗！  char *buf = (char*)malloc(MAX_LEN); //MAX_LEN是最终你知道的数据长度！ // 如果不够，可以继续用realloc继续分配内存空间！  关键是在哪里储存输入的数据？[/quote] buf这里就是有效的内存空间的啊！安全使用的啊！

user: user-0
content: 引用 1 楼 user-3 的回复:那就动态分配内存呗！  char *buf = (char*)malloc(MAX_LEN); //MAX_LEN是最终你知道的数据长度！ // 如果不够，可以继续用realloc继续分配内存空间！  关键是在哪里储存输入的数据？

user: user-3
content: 那就动态分配内存呗！  char *buf = (char*)malloc(MAX_LEN); //MAX_LEN是最终你知道的数据长度！ // 如果不够，可以继续用realloc继续分配内存空间！
user-0 提问: 计算机计算除法的原理

回复:
user: user-1
content: 计算机组成原理中有。。。

user: user-2
content: 二进制除法竖式

user: user-3
content: 仿照竖式笔算

user: user-4
content: 按照二进制多项式除法来做，如图电路

user: user-5
content: 数字电路上面有解答

user: user-6
content: c语言深度剖析这本书有提到一点
user-0 提问: 地址访问冲突是怎么回事

回复:
user: user-1
content: 传递过来的参数出了问题吧？感觉这个函数中的数组并没有越界。

user: user-2
content: 我在vs2010下运行，没有访问冲突呀 	double a1=1,a2=2,a3=3,a4=4;     calcAzEl(&a1,&a2,&a3,&a4);

user: user-3
content: 传递进来的变量 sat_pos_temp, jz_data.pos, Az, El 都分配空间了吗？ 初始化的只有 Az=NULL; E1=NULL; 让这些指针都指向可用的空间。 如果这些都做了，那就是数组下表越界造成了一些非法内存访问。

user: user-4
content: calcAzEl(sat_pos_temp, jz_data.pos, Az,El);  调用这个接口之前是不是给Az和E1分配的内存空间呢？
user-0 提问: 新人求教-C语言如何调用DOS命令？

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:system()函数，或者其他创建进程的函数，如windows下的CreateProcess(). 已用system(),CreateProcess没用过

user: user-1
content: system()函数，或者其他创建进程的函数，如windows下的CreateProcess().
user-0 提问: 新人真心求教！！这次真给跪了！求帮助！

回复:
user: user-1
content: 参考下别人的源码！自己再动手试试 http://blog.csdn.net/nupt123456789/article/details/8331312 http://download.csdn.net/download/liwenfeng521/2760250

user: user-2
content: 那你还是把课本拿出来好好再看一下吧，花点时间，不难的。这题目的代码网上应该可以找到很多，但是你看不懂也没用，害了自己。

user: user-3
content: 这个不难呀，少打会LOL，多看会书就有了
user-0 提问: sprintf函数调用的问题

回复:
user: user-1
content: 引用 7 楼 zaixiankaifa 的回复:[quote=引用 3 楼 max_min_ 的回复:] 因为你每次sprintf都是用的line，所以会把前一次的覆盖掉！要加一个移动标志位  如;  unsigned int flag = 0; for(i=1;i<MAX_OBJECTS;i++) { 	// 这里你得确保line的内存空间是足够的！     sprintf(line + flag,"%d,%f,%f,%s\n",objects[i].id,objects[i].x_coord,objects[i].y_coord,objects[i].name);    flag += sizeof(MY_TYPE_T); }   刚才试了一下如你所说的修改，结果发现，只输出第一组数据，好怪异。。。。[/quote] 后面的写入不要有fputs，换一个写文件函数，然后检查函数的返回值，确认写入有效数据是多少！

user: user-0
content: 引用 4 楼 lixiang201101 的回复:for(i=1;i<MAX_OBJECTS;i++) { sprintf(line,"%d,%f,%f,%s\n",objects[i].id,objects[i].x_coord,objects[i].y_coord,objects[i].name); }   fputs(line,fout); 首先你这里只有两组数据，第二组开始的，因为i=1；而不是三组数据、 然后sprintf执行后前一组数据会被后一组覆盖掉。 你这里这样改 for(i=1;i<MAX_OBJECTS;i++) { sprintf(line,"%d,%f,%f,%s\n",objects[i].id,objects[i].x_coord,objects[i].y_coord,objects[i].name);  fputs(line,fout); }   这样就可以了。   其实我是想把这些数据一次性先输入到数组里面，然后再输出到文件流

user: user-0
content: 引用 3 楼 max_min_ 的回复:因为你每次sprintf都是用的line，所以会把前一次的覆盖掉！要加一个移动标志位  如;  unsigned int flag = 0; for(i=1;i<MAX_OBJECTS;i++) { 	// 这里你得确保line的内存空间是足够的！     sprintf(line + flag,"%d,%f,%f,%s\n",objects[i].id,objects[i].x_coord,objects[i].y_coord,objects[i].name);    flag += sizeof(MY_TYPE_T); }   刚才试了一下如你所说的修改，结果发现，只输出第一组数据，好怪异。。。。

user: user-0
content: 引用 3 楼 max_min_ 的回复:因为你每次sprintf都是用的line，所以会把前一次的覆盖掉！要加一个移动标志位  如;  unsigned int flag = 0; for(i=1;i<MAX_OBJECTS;i++) { 	// 这里你得确保line的内存空间是足够的！     sprintf(line + flag,"%d,%f,%f,%s\n",objects[i].id,objects[i].x_coord,objects[i].y_coord,objects[i].name);    flag += sizeof(MY_TYPE_T); }   意思即是说，每次将一组数据放到line的时候，由于每次都是line这个数组元素首地址，所以每次都覆盖掉上一次的数据？

user: user-2
content: 引用 4 楼 lixiang201101 的回复:for(i=1;i<MAX_OBJECTS;i++) { sprintf(line,"%d,%f,%f,%s\n",objects[i].id,objects[i].x_coord,objects[i].y_coord,objects[i].name); }   fputs(line,fout); 首先你这里只有两组数据，第二组开始的，因为i=1；而不是三组数据、 然后sprintf执行后前一组数据会被后一组覆盖掉。 你这里这样改 for(i=1;i<MAX_OBJECTS;i++) { sprintf(line,"%d,%f,%f,%s\n",objects[i].id,objects[i].x_coord,objects[i].y_coord,objects[i].name);  fputs(line,fout); }   这样就可以了。  ++

user: user-3
content: flag += sizeof(MY_TYPE_T);加上结构大小不对位吧，改下用printf的返回值计算偏移，类似：  for(i = 0, n = 0; i < MAX_OBJECTS; i++) {     n += sprintf(line + n, ... }

user: user-4
content: 用fprint不是很好吗  后面的那个还要考虑字节空间

user: user-5
content: for(i=1;i<MAX_OBJECTS;i++) { sprintf(line,"%d,%f,%f,%s\n",objects[i].id,objects[i].x_coord,objects[i].y_coord,objects[i].name); }   fputs(line,fout); 首先你这里只有两组数据，第二组开始的，因为i=1；而不是三组数据、 然后sprintf执行后前一组数据会被后一组覆盖掉。 你这里这样改 for(i=1;i<MAX_OBJECTS;i++) { sprintf(line,"%d,%f,%f,%s\n",objects[i].id,objects[i].x_coord,objects[i].y_coord,objects[i].name);  fputs(line,fout); }   这样就可以了。

user: user-1
content: 因为你每次sprintf都是用的line，所以会把前一次的覆盖掉！要加一个移动标志位  如;  unsigned int flag = 0; for(i=1;i<MAX_OBJECTS;i++) { 	// 这里你得确保line的内存空间是足够的！     sprintf(line + flag,"%d,%f,%f,%s\n",objects[i].id,objects[i].x_coord,objects[i].y_coord,objects[i].name);    flag += sizeof(MY_TYPE_T); }

user: user-6
content: 把fputs（line，fout）写到for循环去，应该就解决问题了。

user: user-6
content: 后面的覆盖掉了前面的。自然只剩最后一组了。