Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 求大于等于6的任意偶数，以素数+素数形式输出

回复:
user: user-0
content: 引用 5 楼 paschen的回复:[quote=引用 4 楼 qq_36370998 的回复:] [quote=引用 2 楼 小灸舞的回复:]因为if (i == a / 2 + 1)前面的for循环是从2循环到<=n/2的 当for循环结束后（没有被break）i是刚好等于a / 2 + 1的（也就意味着a是素数） 然后后一个for循环，让b=n-a后，继续判断，如果for执行完了（没有被break）,意味着b也是素数（此时i == b / 2 + 1） 就可以输出a和b了 亲， 还是有点不懂。。 假设我输入8 开始执行，a=2,a<=4,继续执行下一个for.  i=2,但是i<=1不成立。 回去让a加1，a变成3，还是不行，a变成4，可以符合要求执行第二个for.  然后a%i=0。。就break了，返回执行第一个a++，变成了5，再次执行第二个for  然后可以。就让5%2。。可以输出。。。   问题来了，后面的那个i=a/2+1    不符合？？哪里错了。。。[/quote]  不懂你意思，为何不单步跟踪程序运行，每步观察程序各参数变化情况[/quote] 怎么单步跟踪运行？ 假设输入8     这个程序具体怎么运行的？能手写一下吗？ 其实，不懂就在那个a++   i++   有点晕。

user: user-1
content: 引用 4 楼 qq_36370998 的回复:[quote=引用 2 楼 小灸舞的回复:]因为if (i == a / 2 + 1)前面的for循环是从2循环到<=n/2的 当for循环结束后（没有被break）i是刚好等于a / 2 + 1的（也就意味着a是素数） 然后后一个for循环，让b=n-a后，继续判断，如果for执行完了（没有被break）,意味着b也是素数（此时i == b / 2 + 1） 就可以输出a和b了 亲， 还是有点不懂。。 假设我输入8 开始执行，a=2,a<=4,继续执行下一个for.  i=2,但是i<=1不成立。 回去让a加1，a变成3，还是不行，a变成4，可以符合要求执行第二个for.  然后a%i=0。。就break了，返回执行第一个a++，变成了5，再次执行第二个for  然后可以。就让5%2。。可以输出。。。   问题来了，后面的那个i=a/2+1    不符合？？哪里错了。。。[/quote]  不懂你意思，为何不单步跟踪程序运行，每步观察程序各参数变化情况

user: user-0
content: 引用 2 楼 小灸舞的回复:因为if (i == a / 2 + 1)前面的for循环是从2循环到<=n/2的 当for循环结束后（没有被break）i是刚好等于a / 2 + 1的（也就意味着a是素数） 然后后一个for循环，让b=n-a后，继续判断，如果for执行完了（没有被break）,意味着b也是素数（此时i == b / 2 + 1） 就可以输出a和b了 亲， 还是有点不懂。。 假设我输入8 开始执行，a=2,a<=4,继续执行下一个for.  i=2,但是i<=1不成立。 回去让a加1，a变成3，还是不行，a变成4，可以符合要求执行第二个for.  然后a%i=0。。就break了，返回执行第一个a++，变成了5，再次执行第二个for  然后可以。就让5%2。。可以输出。。。   问题来了，后面的那个i=a/2+1    不符合？？哪里错了。。。

user: user-0
content: for (a=2;a<=n/2;a++)                           {                      for (i=2;i<=a/2;i++)                                if (a%i==0)   break;    这ge 输入 n=6 shi，a<=3 可以循环， 往后呢？

user: user-2
content: 因为if (i == a / 2 + 1)前面的for循环是从2循环到<=n/2的 当for循环结束后（没有被break）i是刚好等于a / 2 + 1的（也就意味着a是素数） 然后后一个for循环，让b=n-a后，继续判断，如果for执行完了（没有被break）,意味着b也是素数（此时i == b / 2 + 1） 就可以输出a和b了

user: user-0
content: if (i==b/2+1)   if (i==a/2+1)           就是这几句作用？？
user-0 提问: for循环的条件不清楚，看不懂怎么执行的

回复:
user: user-1
content: for (A;B;C) D; //等价于 {  A;  while (1) {   if (!(B)) break;   D;   C;  } }

user: user-2
content: 单步跟踪程序运行，每一步观察各变量变化情况及程序流程

user: user-3
content: 函数功能是去掉字符串中的空格，但写复杂了。

user: user-4
content: 单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后，就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。  VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化，这样过一遍不就啥都明白了吗。 对VC来说，所谓‘调试时’就是编译连接通过以后，按F10或F11键单步执行一步以后的时候，或者在某行按F9设了断点后按F5执行停在该断点处的时候。

user: user-5
content: 很清楚 for ( init_clause ; cond_expression ; iteration_expression ) loop_statement
user-0 提问: GCC编译c/c++/objective-c语言，安装什么软件包？

回复:
user: user-0
content: ubuntu12.04 lts，编译objective-c，要安装什么软件包？  安装命令？

user: user-1
content: 引用 1 楼 user-2 的回复:linux不自代gcc了 一般只有 gcc    g++要另外装的  sudo apt-get install g++ sudo apt-get install subversion sudo apt-get install p7zip-full sudo apt-get install autoconf sudo apt-get install automake sudo apt-get install libtool  把这些也装上，把  git python  也可以 装上

user: user-2
content: linux不自代gcc了
user-0 提问: 结构体-共用体理解

回复:
user: user-1
content: 引用 5 楼 qq_18310569 的回复:[quote=引用 3 楼 zhao4zhong1 的回复:] 仅供参考：#include <stdio.h> #include <stdlib.h> char buf[17]; union U {   unsigned short int aa;   struct {     unsigned int bb:7;//(bit 0-6)     unsigned int cc:6;//(bit 7-12)     unsigned int dd:3;//(bit 13-15)   }; } u; void main() {                 //bbbbbbbbbbbbbbbb                 //iiiiiiiiiiiiiiii                 //tttttttttttttttt                 //111111                 //5432109876543210                 //::::::::::::::::     u.aa=0xE07F;//1110000001111111     printf("bb==%d,cc==%d,dd==%d\n",u.bb,u.cc,u.dd);     u.bb=0x41;     u.cc=0x21;//dddccccccbbbbbbb     u.dd=5;   //1011000011000001     printf("aa==0x%04X==%016s(2)\n",u.aa,itoa(u.aa,buf,2)); } //bb==127,cc==0,dd==7 //aa==0xB0C1==1011000011000001(2)    请问这段代码表达了什么意思呀？[/quote] 让你学会观察Union中的每个bit是0还是1

user: user-2
content: 引用 4 楼 qq_18310569 的回复:[quote=引用 1 楼 shihengzhen101 的回复:] 两个结构体共用体共用一段内存，没有声明变量啊？ 那我如何引用呢？是不是直接AD1CON1bits.DONE引用第一个就可以了？[/quote]应该是的

user: user-3
content: 只有一个struct会占用内存，1或者2  不会两个都活、

user: user-0
content: 引用 3 楼 zhao4zhong1 的回复:仅供参考：#include <stdio.h> #include <stdlib.h> char buf[17]; union U {   unsigned short int aa;   struct {     unsigned int bb:7;//(bit 0-6)     unsigned int cc:6;//(bit 7-12)     unsigned int dd:3;//(bit 13-15)   }; } u; void main() {                 //bbbbbbbbbbbbbbbb                 //iiiiiiiiiiiiiiii                 //tttttttttttttttt                 //111111                 //5432109876543210                 //::::::::::::::::     u.aa=0xE07F;//1110000001111111     printf("bb==%d,cc==%d,dd==%d\n",u.bb,u.cc,u.dd);     u.bb=0x41;     u.cc=0x21;//dddccccccbbbbbbb     u.dd=5;   //1011000011000001     printf("aa==0x%04X==%016s(2)\n",u.aa,itoa(u.aa,buf,2)); } //bb==127,cc==0,dd==7 //aa==0xB0C1==1011000011000001(2)    请问这段代码表达了什么意思呀？

user: user-0
content: 引用 1 楼 shihengzhen101 的回复:两个结构体共用体共用一段内存，没有声明变量啊？ 那我如何引用呢？是不是直接AD1CON1bits.DONE引用第一个就可以了？

user: user-1
content: 仅供参考：#include <stdio.h> #include <stdlib.h> char buf[17]; union U {   unsigned short int aa;   struct {     unsigned int bb:7;//(bit 0-6)     unsigned int cc:6;//(bit 7-12)     unsigned int dd:3;//(bit 13-15)   }; } u; void main() {                 //bbbbbbbbbbbbbbbb                 //iiiiiiiiiiiiiiii                 //tttttttttttttttt                 //111111                 //5432109876543210                 //::::::::::::::::     u.aa=0xE07F;//1110000001111111     printf("bb==%d,cc==%d,dd==%d\n",u.bb,u.cc,u.dd);     u.bb=0x41;     u.cc=0x21;//dddccccccbbbbbbb     u.dd=5;   //1011000011000001     printf("aa==0x%04X==%016s(2)\n",u.aa,itoa(u.aa,buf,2)); } //bb==127,cc==0,dd==7 //aa==0xB0C1==1011000011000001(2)

user: user-4
content: 在union中的两个结构体占用同一段内存空间，内存空间的大小按照所需空间大的结构体算

user: user-2
content: 两个结构体共用体共用一段内存，没有声明变量啊？
user-0 提问: 线性序列同时求最大值和最小值

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

user: user-1
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-0
content: 刚刚去吃饭了，谢谢回答！

user: user-2
content: 24行, 判断错了               if(max1<max2) min=min1; 改为               if(min1<min2) min=min1;  32行, 数量错了, 要减1.     find3(a,0,sizeof(a)/sizeof(int),min,max); 改为     find3(a,0,sizeof(a)/sizeof(int)-1,min,max);

user: user-0
content: 调试已经没有错误了，但是算出的答案是错的，最小值是1，算出来的是4，心塞

user: user-0
content: #include <stdio.h> #include <stddef.h> void find3(int a[],int left,int right,int &min,int &max) { 	int max1,min1,max2,min2; 	int d; 	if(left==right) max=min=a[left]; 	else if(right==left+1) 	  	{ 	  		if(a[right]>a[left])  	  		{ 	  			max=a[right];min=a[left]; 	  		} 	  		else{ 	  			max=a[left];min=a[right]; 	  		} 	  	} 	  	else{ 	  		d=(left+right)/2; 	  		find3(a,left,d,min1,max1); 	  		find3(a,d+1,right,min2,max2); 	  		if(max1>max2) max=max1; 	  		else max=max2; 	  		if(max1<max2) min=min1; 	  		else min=min2; 	  	} } int main() { 	int a[]={1,9,6,4,5,22,13,56,45}; 	int min,max; 	find3(a,0,sizeof(a)/sizeof(int),min,max); 	printf("%d\t%d\n",min,max); 	return 0; }
user-0 提问: 大神帮我看看程序，我的输出结果怎么没变？

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

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

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

回复:
user: user-0
content: 我会了  谢谢大家！！

user: user-0
content: #include<stdio.h>   void main()   {  	 int n=0,i,j,ok=1;  	 for(i=101;i>=101&&i<=150;i++) 	 { 		 ok=1; 	   for (j=100;j<i;j++) 		   if (i%j==0) 			 { 				 ok=0;break; 			 } 			 if(ok) 			 { 				 printf("%d\n",i); 				 	  			 } 	 }   }     这个求大于100的素数前十个，，哪里不对？？

user: user-0
content: 怎么求>=6  的任意偶数，以  素数+素数的形式输出？？

user: user-1
content: 1. for (j=3;j<=i;j++)应该是for (j = 2; j < i; j++) 2.加上大括号，你的第二个if只会在for循环结束才跑一遍，省2行括号的代码一点意义都没  #include<stdio.h>  void main() { 	int n = 0, i, j, ok = 1; 	for (i = 3; i <= 1000; i++) 	{ 		ok = 1; 		for (j = 2; j < i; j++) 		{ 			if (i%j == 0) 			{ 				ok = 0; break; 			} 			 		} 		if (ok) 		{ 			printf("%d\t", i); 			n++; 			if (n % 5 == 0) 				printf("\n"); 		} 	} 	  }

user: user-0
content: #include<stdio.h>   void main()   {  	 int n=0,i,j,ok=1;  	 for(i=3;i<=1000;i++) 	   for (j=3;j<=i;j++) 		   if (i%j==0) 			 { 				 ok=0;break; 			 } 			 if(ok) 			 { 				 printf("%d\t",n); 				  n++; 				 if (n%5==0) 				     printf("\n");	  			 } 			   }     这个怎么错的？求1000以内素数的和，

user: user-1
content: #include<stdio.h> #include<math.h> void main() { 	int n = 1, count = 1; 	float  x; 	double sum, term; 	printf("input x:"); 	scanf("%f", &x); 	sum = x; 	term = x; 	do{ 		term = term * x * x * (-1) / ((n + 1) * (n + 2)); 		sum = sum + term; 		n = n + 2; 		count++; 	} while (fabs(term)>=1e-5); 	printf("sin(x)=%f,count=%d\n", sum, count); }

user: user-0
content: term=__________________; 这个怎么填

user: user-0
content: 谢谢！！！谢谢

user: user-2
content: 看懂他的思路就可以照着写，  第一空肯定是 &x，只有x是float  后面的就不帮你做了，可以参看：http://blog.csdn.net/lxslx/article/details/52522743
user-0 提问: 求助：对输入的一行字符串的，把字符中的空格都变成1个

回复:
user: user-0
content: 引用 6 楼 starytx 的回复:仅供参考，写的也不怎么简练，不过结果是正确的 // 两个指针pB,pT，分别标记要复制的位置 void delBlank(char * str) { 	char *pB = str;			// 复制的目标位置 	char *pT = str;		    // 复制的源位置 	bool bState = false;	// 表示是否是处理空格状态 	while (*pT != '\0') 	{ 		if (*pB == ' ') 		{ 			if (!bState) 			{ 				bState = true; 				pB++; 				pT = pB; 			} 			else 			{ 				if (*pT == ' ') 				{ 					pT++; 				} 				else 				{ 					strcpy(pB,pT); 					pB++; 					pT = pB; 					bState = false; 				} 			} 		} 		else 		{ 			pB++; 			pT = pB; 			bState = false; 		}  	} 	if (*pB == ' ')      // 处理已多空格结尾的情况 	{ 		*pB = 0; 	} }    呀！！不好意思啊，那天问题解决后我就结贴了，没看到你的回复，真是不好意思了...我是论坛新手，，..还不太会用论坛  实在是抱歉了

user: user-0
content: 问题大概是： 输入一行字符串都变成，把相邻字符间的空格数都变成1个，在输入时，字符之间可能存在多个空格

user: user-0
content: 还存在一点问题，一直不能完美的运行，不知道是哪里还欠缺考虑，请大神们帮我看看

user: user-1
content: 仅供参考，写的也不怎么简练，不过结果是正确的 // 两个指针pB,pT，分别标记要复制的位置 void delBlank(char * str) { 	char *pB = str;			// 复制的目标位置 	char *pT = str;		    // 复制的源位置 	bool bState = false;	// 表示是否是处理空格状态 	while (*pT != '\0') 	{ 		if (*pB == ' ') 		{ 			if (!bState) 			{ 				bState = true; 				pB++; 				pT = pB; 			} 			else 			{ 				if (*pT == ' ') 				{ 					pT++; 				} 				else 				{ 					strcpy(pB,pT); 					pB++; 					pT = pB; 					bState = false; 				} 			} 		} 		else 		{ 			pB++; 			pT = pB; 			bState = false; 		}  	} 	if (*pB == ' ')      // 处理已多空格结尾的情况 	{ 		*pB = 0; 	} }

user: user-2
content: 引用 4 楼 DKtion 的回复:[quote=引用 3 楼 user-2 的回复:] 帮你看了一下，应该是下面循环的问题。这里不仅j=0,i也要等于0才行。因为你把数组整体往前移动之后，如果i的值还是上次循环的 值就不对了。比如i上次是4，那如果i值不变为0，那下次循环从4开始，而你原来的数组已经移动位置了，这就不对了。不知道你明白没有，解释的我自己都没看懂。不过你在j=0之后再加一个i=0就好了。然后自己无理解一下。嘿嘿。 if (j>1 && string[i] != ' ')/*当扫过一段空格并且有两个空格以上，把后面的字符串移位*/ { for (m = i;m < N ; m++)//m记录一段空白后字符串开始的位置 string[m - j + 1] = string[m];//后移空格数减一的位置 j = 0;//j重新复制0     那就是说每次遇到多个空格，把它减到一个空格后，就再次从头开始读取。直到不遇到有多个空格了[/quote]  可以这样理解。只不过这样如果很多的话，就很费时间而已。要想接着后面也可以，只是比较烦。这样比较简单。嘿嘿

user: user-0
content: 引用 3 楼 user-2 的回复:帮你看了一下，应该是下面循环的问题。这里不仅j=0,i也要等于0才行。因为你把数组整体往前移动之后，如果i的值还是上次循环的 值就不对了。比如i上次是4，那如果i值不变为0，那下次循环从4开始，而你原来的数组已经移动位置了，这就不对了。不知道你明白没有，解释的我自己都没看懂。不过你在j=0之后再加一个i=0就好了。然后自己无理解一下。嘿嘿。 if (j>1 && string[i] != ' ')/*当扫过一段空格并且有两个空格以上，把后面的字符串移位*/ { for (m = i;m < N ; m++)//m记录一段空白后字符串开始的位置 string[m - j + 1] = string[m];//后移空格数减一的位置 j = 0;//j重新复制0     那就是说每次遇到多个空格，把它减到一个空格后，就再次从头开始读取。直到不遇到有多个空格了

user: user-2
content: 帮你看了一下，应该是下面循环的问题。这里不仅j=0,i也要等于0才行。因为你把数组整体往前移动之后，如果i的值还是上次循环的 值就不对了。比如i上次是4，那如果i值不变为0，那下次循环从4开始，而你原来的数组已经移动位置了，这就不对了。不知道你明白没有，解释的我自己都没看懂。不过你在j=0之后再加一个i=0就好了。然后自己无理解一下。嘿嘿。 if (j>1 && string[i] != ' ')/*当扫过一段空格并且有两个空格以上，把后面的字符串移位*/ { for (m = i;m < N ; m++)//m记录一段空白后字符串开始的位置 string[m - j + 1] = string[m];//后移空格数减一的位置 j = 0;//j重新复制0
user-0 提问: 求大神帮助，用C语言打开dat文件,dat文件为24310944*5的数组，但执行程序后不正常显示

回复:
user: user-1
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-0
content: 麻烦大神来解答一下，谢谢!

user: user-2
content: 二进制要 rb,,,,r不但读不对,,,还有意外结尾

user: user-3
content: 1.float改成double试试 2.改成用malloc动态申请 3.可以去掉第一个fopen  #include<stdio.h> #include<stdlib.h> void main() { 	int i, j; 	double **a = (double **)malloc(sizeof(double *)* 5); 	for (i = 0; i<5; i++) 		a[i] = (double *)malloc(sizeof(double)* 200000); 	FILE	*fp; 	if ((fp = fopen("D:\\研究生学习\\云CT\\多能云CT - 扫描部分\\140KVAirSingles_0.dat", "r")) == NULL) { 		printf("cannot open this file\n"); 		exit(1); 	} 	printf("Success!\n"); 	fread(a, sizeof(double), 100000, fp); 	for (i = 0; i<20000; i++){ for (j = 0; j<5; j++)printf("%.5lf", a[i][j]); printf("\n"); } 	fclose(fp); }

user: user-4
content: 第一，你调用两次fopen，也就是说打开了两遍，if 中只用判断 fp是否为NULL,不用再打开一次  第二，你那些数据是matlab保存出来的？保存出来的文件有他自己的存储格式，并不是顺着读就读就是你看到的，另外matlab里保存的是double类型，你是按float类型读
user-0 提问: 小白求助，关于二维数组的指针用法，求大神帮助，谢谢。

回复:
user: user-1
content: 首先你得弄懂指针，*(*(p+i)+j)这个表示的并不是你说的b[i][j]。可以说你这个表示方法是错的，因为你这个其实是说p是一个指向指针的指针然后对p进行一系列的操作。

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

user: user-0
content: 引用 2 楼 qq_36409192 的回复:还有就是你那个*(*(p+i)+j)没懂你这个想干嘛。如果你只是想将a中的值转置后存入b中，可以直接利用两个参数i,j。一个表示行，一个表示列，然后b[j][i]=a[i][j]就行了(注意:只需要转置矩阵的一个三角，不然就会转置两次，又回到了原二维数组)。  题目要求用的是指针，类似于*(*(p+i)+j)的，*(*(p+i)+j)应该代表b[j][i]

user: user-3
content: a[0]其实是一个一维数组的首地址

user: user-1
content: 还有就是你那个*(*(p+i)+j)没懂你这个想干嘛。如果你只是想将a中的值转置后存入b中，可以直接利用两个参数i,j。一个表示行，一个表示列，然后b[j][i]=a[i][j]就行了(注意:只需要转置矩阵的一个三角，不然就会转置两次，又回到了原二维数组)。

user: user-1
content: 指针只能指向地址，所以你*p=a[0]明显是错的(你这表示的是赋值)，应该改为*p=a(表示指向数组a的首地址)。还有就是函数的声明，函数的声明要带上形参。

user: user-0
content: 引用 6 楼 qq_36409192 的回复:首先你得弄懂指针，*(*(p+i)+j)这个表示的并不是你说的b[i][j]。可以说你这个表示方法是错的，因为你这个其实是说p是一个指向指针的指针然后对p进行一系列的操作。  不好意思，我之前理解错了，实际*(*(p+i)+j)是不等于b[i][j]的，*(*(p+i)+j)是指针类型

user: user-0
content: 引用 8 楼 qq423399099 的回复:改成这样：  #include<stdio.h> int a[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, b[3][3] = { 0 }, (*p)[3] = a, (*q)[3] = b, i, j; void zh(int(*p1)[3], int(*q1)[3]); void sc(int(*p2)[3]); int main() { 	printf("矩阵转置前：\n\n"); 	sc(p); 	printf("矩阵转置后：\n\n"); 	zh(p, q); 	return 0; } void zh(int (*p1)[3], int (*q1)[3]) { 	for (i = 0; i<3; i++) 	for (j = 0; j<3; j++) 		*(*(q1 + j) + i) = *(*(p1 + i) + j); 	sc(q1); } void sc(int (*p2)[3]) { 	for (i = 0; i<3; i++) 	{ 		for (j = 0; j<3; j++) 			printf("%-2d", *(*(p2 + i) + j)); 		printf("\n"); 	} }    谢谢，看了您修改的地方，我明白什么地方出错了

user: user-4
content: 改成这样：  #include<stdio.h> int a[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, b[3][3] = { 0 }, (*p)[3] = a, (*q)[3] = b, i, j; void zh(int(*p1)[3], int(*q1)[3]); void sc(int(*p2)[3]); int main() { 	printf("矩阵转置前：\n\n"); 	sc(p); 	printf("矩阵转置后：\n\n"); 	zh(p, q); 	return 0; } void zh(int (*p1)[3], int (*q1)[3]) { 	for (i = 0; i<3; i++) 	for (j = 0; j<3; j++) 		*(*(q1 + j) + i) = *(*(p1 + i) + j); 	sc(q1); } void sc(int (*p2)[3]) { 	for (i = 0; i<3; i++) 	{ 		for (j = 0; j<3; j++) 			printf("%-2d", *(*(p2 + i) + j)); 		printf("\n"); 	} }

user: user-5
content: 你zh  sc两个函数里，参数类型是int*指针，使用一个* 相当于解引一次，得到的是int类型了，再用*就会出错，因为int类型不是指针
user-0 提问: 菜鸟求指导 累加程序为何不能实现？

回复:
user: user-1
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-1
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-0
content: 谢谢大家的帮助，已经解决问题了，是怪自己粗心，沉不下心，非常感谢大家！

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

user: user-3
content: scanf_s("%f",num[i]);  改成  scanf_s("%f",&num[i]);  printf("%f",num[i]);  最后的结果是在addnum中，有需要可以输出

user: user-4
content: #include<stdio.h> #include<string.h> #include<ctype.h> #include<math.h> //程序错误，错误在哪里？？？ int main() { //	float num[256]={0}; //	int k=0,i=0,j=1; 	float addnum=0.0,num; //	for(i=0;i<256;i++) //	{ 	 //   scanf("%f",&num[i]); 	    do 	    { 	    	scanf("%f",&num); 	    	addnum=addnum+num; 		}while(getchar()!='\n'); 		/*if(getchar()!='\n') 		{ 			addnum=addnum+num[i]; 		   // printf("%f",addnum); 			k++; 		} 		else 		{ 		    break; 		}*/  //   } //	printf("%d",k); //	for(j=0;j<=k;j++) //		addnum=addnum+num[j]; 	printf("%f",addnum); 	getchar(); 	return 0; } 这样不就实现累加了嘛。为什么还要数组呀，for循环那么多干嘛？这样不就可以累加无数个了嘛，还没有个数的限制。而且楼主程式也有很多错误呀，在你编译器上难道能运行吗？具体的错误楼上都给出了，我就不说了。反正这是给出的算法，楼主不嫌弃的话，可以看一下吆，嘿嘿。

user: user-5
content: 首先，我都看不太懂你的程序了。错误还是有几处的，一处： scanf_s("%f",num[i]);应该在num[i]前加&,取地址符。再者，你输入的是float型数据，去判断“\n”这是字符，不能用%f，可以用%s或%c,但也可以将接受的%f进行类型转化，还有如果是累加，在第一次addnum=addnum+num[i];就已经实现了呀！为啥后面还要for(j=0;j<=k;j++)addnum=addnum+num[j];搞不懂。

user: user-6
content: 看到了这么几个问题:1.你的num数组初始化应该是{0.0}。2.你的i的判断条件有问题(256比你num数组的222大)，存在很大的风险。3.你输入语句中，num[i]前面得加上寻址符&。 ps:没有看懂你return 0;前面几句的意思，不知道楼主想表达什么。
user-0 提问: iOS如何给视频降噪

回复:
user: user-1
content: 请问你找到处理的方法了吗？我们公司的项目也有这个需求，找到了麻烦分享下，40327279这个是我的qq

user: user-0
content: 一天一天等下去

user: user-0
content: 别沉下去，等，继续等
user-0 提问: d变量有什么用

回复:
user: user-1
content: d变量没有使用，不会影响程序的运行结果。 对于你的printf("%d",c[b]);这行代码，c[b]你没有赋初值（b在上面已经改变了），输出的是一个随机值（这个和编译器有关）、  这个写得非常清晰

user: user-2
content: printf("%d",c[b]);  时， b 已经指向数组外面的元素了，也就是越界了

user: user-3
content: d变量没有使用，不会影响程序的运行结果。 对于你的printf("%d",c[b]);这行代码，c[b]你没有赋初值（b在上面已经改变了），输出的是一个随机值（这个和编译器有关）。

user: user-4
content: //首先你这个变量d确实没得作用 #include<stdio.h>  int main()  {  int a,b=0,d,c[5];  scanf("%d",&a);  d=a;   //为什么我都不用到d=a,可我去掉d=a和d变量这个结果就不对了//  while(a!=0)  {  c[b]=a%10;  a=a/10;  b++;  }  printf("一共有%d位数\n",b);  printf("%d",c[b]);   //去掉后这只输出个5//，在此处输入a的值必须是一个5位数，否则c[b]的值还是不确定的。  printf("\n");  for(int j=0;j<b;j++)  printf("%d",c[j]);  printf("\n");  return 0;  }
user-0 提问: 问一个关于c语言赋值的笔试题

回复:
user: user-1
content: 明显是D，基础

user: user-2
content: 只有D可以用，虽然不知道具体的值

user: user-3
content: int a= 0;int *b;int c[10];问以下哪个对a的赋值是正确的？        A:   a=b;            B:   a= *b;                 C:   a=c;            D:  a=c[1];   A:：a为int类型，b为int *类型，不能赋值 B：指针变量b未初始化，如果变量是静态的，会被初始化为0，如果是动态的，则不会被初始化。       把一个不确定指向的值，解引用后是不确定的。（应该避免这种指针不初始化的写法） C：同A，数组名c表示&c[0],类型是int * D：同B。数组初始化的方式取决于它们的存储类型。  因此严格来讲A.B.C.D没有正确答案。但是对于有的编译器来说B和D可能会被初始化为0，那么B和D的值就为0.

user: user-4
content: D是毛病最轻的了

user: user-5
content: 选D吧，虽然没初始化，但至少不会引发程序错误

user: user-6
content: 引用 2 楼 qq_34825539 的回复:但是数组也没有初始化啊，我在vc++6.0上四个选项都能编译通过的 数组虽然没有初始化，但是有分配内存。 指针没有初始化，就指向一个未知的内存。比如其他程序的内存空间，这会非常危险。 可以将指针初始化为0。但空指针同样没有内存与之对应。 所以 B:   a= *b;  指针b没有初始化或者为空指针都不对。

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

user: user-8
content: 选项A  指针不能直接赋值给int 选项B 语法正确，但解引了未初始化的指针 选项C 数组不能赋值给int 选项D，没问题（不过赋值后a的值仍然是不确定的）

user: user-9
content: 选D A.C选项左值和右值的类型不一致 B选项，指针没有初始化，直接解引用会出错

user: user-10
content: 没初始化默认0

user: user-11
content: 引用 2 楼 qq_34825539 的回复:但是数组也没有初始化啊，我在vc++6.0上四个选项都能编译通过的       A:   a=b;           C:   a=c;     //这两个肯定是错的，这个不用再做解释了吧？        B:   a= *b;      D:  a=c[1]; //假设指针变量b指向一个整型变量的地址，也能够说得通。

user: user-0
content: 但是数组也没有初始化啊，我在vc++6.0上四个选项都能编译通过的

user: user-11
content: 选：D   A:   a=b;     B:   a= *b;   //b是指针变量，相当于是把b的地址赋给了a，但是b没有指向任何的地址，故是错误的。     C:   a=c;   //根本没有C这个变量或者常量，只有c[0]-----c[9]的整型数组。故答案选D          D:  a=c[1]; //c[1]是数组元素
user-0 提问: C语言对txt文件写问题

回复:
user: user-0
content: 的确是字符串\0结尾的问题，谢谢楼上两位。当时我也想到了/0结尾，只是没想到16进制是0x00！

user: user-1
content: 因为字符串要以\0结尾  char temp[] = { 0xce,0xaa,0xca,0xb2,0xc3,0xb4};  改成  char temp[] = { 0xce,0xaa,0xca,0xb2,0xc3,0xb4, 0x00};

user: user-2
content: 将字符数组最后一个字符改成'\0'就好了

user: user-0
content: 求解答啊T-T
user-0 提问: 程序变量定义的疑问

回复:
user: user-1
content: http://blog.csdn.net/qll125596718/article/details/6891881/

user: user-2
content: 这三个都属于函数指针，你看看函数指针的只是就好了，使用的时候可以种这种类型指向同种类型的函数，调用时形如CB_ERR(xxx)就好

user: user-3
content: 函数指针  typedef     void(*CB_ERR)     (S_ERR);  void fun(S_ERR){}  这个fun 就是一个 CB_ERR类型的变量,,,它是一个函数,,,,可以这样用  CB_ERR pf; pf = fun;  ..... .... .... pf(xxx);

user: user-4
content: CB_ 通常缩写至Callback，这边typedef定义的是函数指针，三个函数区别在于参数类型不同。 使用时直接CB_ERR(xxx)即可.
user-0 提问: 统计文件中字符的个数出错

回复:
user: user-1
content: 你fputs(s, p);后，内容会遗留在文件缓冲区 你fclose以后再重新fopen一次就行  #include <stdio.h> void main() { 	char s[5] = "abcd"; 	FILE *p; 	long count; 	count = 0; 	p = fopen("a.txt", "r+"); 	fputs(s, p); 	fclose(p); 	p = fopen("a.txt", "r+"); 	while (fgetc(p) != EOF) 		count++; 	fclose(p); 	printf("%d", count); }
user-0 提问: C语言一个嵌套循环内部循环只执行了一次，求解答

回复:
user: user-1
content: 您的q值在内循环时已经达到过一次最大值，并且在后续执行中没有发生重置及变化，所以在第二次开始就不在进入内部循环了。 建议修改 for(q=0;q<6;q++) 问题即可解决！！！

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

user: user-3
content: 每次内层循环前要把q 改为0

user: user-4
content: 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-0
content: 已解决。。。。。。。

user: user-5
content: 因为你的q在第一次for循环里面已经增长到6了，后面又没重新赋值

user: user-0
content: 程序太过基础，完全找不到问题啊，求大大们帮忙看看
user-0 提问: 用c语言怎么将这些txt文件中的数据读出来？请教大神

回复:
user: user-1
content: http://blog.csdn.net/u011028771/article/details/52557886

user: user-2
content: http://bbs.csdn.net/topics/360055953

user: user-3
content: for (i = 0; i <= Num1; i++)  { for (j = 0; j <= Num2; j++) { 小于等于改成小于

user: user-3
content: 先getline, 然后strtod, 大概这样吧 #include <string> #include <ifstream> #include <vector> #include <stdlib.h> // strtod #define LINE_DATA_COUNT 5 void read_data(std::ifstream &ifstream_obj,   std::vector<std::vector<double> > &data) {   for (std::string tmp; std::getline(ifstream_obj, tmp);)   {     char *begin = tmp.c_str();     char *new_begin;     std::vector<double> line_data;     for (int i = 0; i != LINE_DATA_COUNT; ++i)     {       line_data.push_back(strtod(begin, &new_begin));       begin = new_begin;     }     data.push_back(line_data);   } }

user: user-0
content: #include <stdio.h> #include <math.h> #define Num1 2000 #define Num2 5  void main() { 	errno_t err; 	FILE* fp; 	if ((err = fopen_s(&fp, "G:\\Model16 01.txt", "a")) != 0) 	{ 		printf("Cannot open this filefp1\n"); 		exit(0); 	} 	int i,j; 	double  Y[Num1][Num2]; 	for (i = 0; i <= Num1; i++)  	{ 		for (j = 0; j <= Num2; j++) 		{ 			fscanf_s(fp, "%lf  ", &Y[i][j]); 			printf("%lf  \n", Y[i][j]); 		} 	} 	fclose(fp); } 这样的程序是错误的，读不出来！为什么？

user: user-4
content: 打开模式中，a 以附加的方式打开只写文件  你要读的话应该用 r 打开   打开模式介绍可以参看；http://en.cppreference.com/w/c/io/fopen

user: user-5
content: 1.你打开的MODE不对。 fopen_s(&fp, "e:\\Model16 01.txt", "a")应该是fopen_s(&fp, "e:\\Model16 01.txt", "r") 2.你应该接收判断fscanf_s的返回值，如果已经读取不到了就可以结束循环了  #include <stdio.h> #include <math.h> #include <stdlib.h> #define Num1 2000 #define Num2 5  void main() { 	errno_t err; 	FILE* fp; 	if ((err = fopen_s(&fp, "e:\\Model16 01.txt", "r")) != 0) 	{ 		printf("Cannot open this filefp1\n"); 		exit(0); 	} 	int i, j, res = 0; 	double  Y[Num1][Num2]; 	for (i = 0; i <= Num1; i++) 	{ 		for (j = 0; j <= Num2; j++) 		{ 			res = fscanf_s(fp, "%lf", &Y[i][j]); 			if (res == EOF) 				break; 			printf("%lf \n", Y[i][j]); 			 		} 		if (res == EOF) 			break; 	} 	fclose(fp); }

user: user-6
content: fgets();//获取每一行的缓存数据 sscanf();//将缓存数据写入变量
user-0 提问: c语言unsigned int可以和signed int比较大小吗

回复:
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-1
content: 仅供参考：2. 条件转移指令	(短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 ) 	JA/JNBE		不小于或不等于时转移. 	JAE/JNB		大于或等于转移. 	JB/JNAE		小于转移. 	JBE/JNA		小于或等于转移. 		以上四条,测试无符号整数运算的结果(标志C和Z). 	JG/JNLE		大于转移. 	JGE/JNL		大于或等于转移. 	JL/JNGE		小于转移. 	JLE/JNG		小于或等于转移. 		以上四条,测试带符号整数运算的结果(标志S,O和Z). 	JE/JZ		等于转移. 	JNE/JNZ		不等于时转移. 	JC			有进位时转移. 	JNC			无进位时转移. 	JNO			不溢出时转移. 	JNP/JPO		奇偶性为奇数时转移. 	JNS			符号位为 "0" 时转移. 	JO			溢出转移. 	JP/JPE		奇偶性为偶数时转移. 	JS			符号位为 "1" 时转移.

user: user-2
content: 可以比较，但是会有警告，需要自己注意数据是否溢出

user: user-3
content: 编译器里面有标准的转换，这个是在整形运算的时候出现。标准转换的规则是：短的的向长的转；有符号的向无符号的转。如果被转换的数据比转换后的数据要长的话，转换可能会丢失bit数据。通常，编译器会给出警告。      无符号数据和有符号整数进行运算，是有符号整数向无符号整数靠齐。这里，我们可以总结一条规则：整形数运算，总是遵循一个原则：小的往大的扩展。  http://blog.sina.com.cn/s/blog_7647e17f010118wh.html

user: user-4
content: 非字符型和字符型进行比较的时候，系统会先将字符型的数转换为非字符型(转换方法楼主可以百度，这里就不做解释了)。

user: user-5
content: 可能会有警告，对其中一个强制转换类型就可以了（只要不溢出）。

user: user-6
content: 可以，比较时后者会隐式转换成前者的类型
user-0 提问: c语言求大神帮忙~

回复:
user: user-1
content: 用strcmp和if...else if配合使用  #include <stdio.h>  #include <string.h> void main() { 	char name[50];  	printf("请输入你姓名首字母,例如:ww（ps:用小写哦~）\n"); 	//scanf("%s",name); 	gets(name); 	if (!strcmp(name, "zn")) 		printf("名字是郑凝\n"); 	else if (!strcmp(name, "xm")) 		printf("名字是小明\n"); }

user: user-2
content: 楼主这个可以用switch，if。用switch就是将name和case后的值进行对应(如:name的的输入为zn，然后去和case的值对应)，然后printf输出中文内容。用if就是if和else的嵌套(这个比较麻烦)。如果你学了字符串的内容，还可以用strcmp这个函数。

user: user-0
content: 哦，这个我没学过。我试试。谢谢你~

user: user-3
content: 比较字符串是否相等要用strcmp  strcmp(name, "zn");  //返回0表示相等，非0不相等
user-0 提问: 小白 求助！！！

回复:
user: user-1
content: 输入两个整数，随便用什么间隔： 仅供参考：#include <stdio.h> int main() {     int a,b,n,v,r,k;     char buf[80];     char *p;      k=0;     r=EOF;     while (1) {         if (EOF==r) {             fgets(buf,80,stdin);             p=buf;         }         while (1) {             r=sscanf(p,"%d%n",&v,&n);             if (1==r) {k++;break;}             if (EOF==r) break;             p++;         }         if (EOF==r) continue;         p+=n;         if (1==k) a=v;         if (2==k) {             b=v;             break;         }     }     printf("%d,%d\n",a,b);     return 0; }

user: user-2
content: 你这个原题要求需要直接输入两个数，这两个数难道不需要空格分开一下？ 是直接并在一起输入的？

user: user-3
content: #include<stdio.h> void main() { 	char type1,type2; 	scanf("%c%c",&type1,&type2); 	switch(type1){ 	case '1': 		printf("Faint signals, barely perceptible,"); 		break; 	case '2': 		printf("Very weak signals,"); 		break; 	case '3': 		printf("Weak signals,"); 		break; 	case '4': 		printf("Fair signals,"); 		break; 	case '5': 		printf("Fairly good signals,"); 		break; 	case '6': 		printf("Good signals,"); 		break; 	case '7': 		printf("Moderately strong signals,"); 		break; 	case '8': 		printf("Strong signals,"); 		break; 	case '9': 		printf("Extremely strong signals,"); 		break;  	} 	switch(type2){ 	case '1': 		printf("unreadable."); 		break; 	case '2': 		printf("barely readable, occasional words distinguishable."); 		break; 	case '3': 		printf("readable with considerable difficulty."); 		break; 	case '4': 		printf("readable with practically no difficulty."); 		break; 	case '5': 		printf("perfectly readable."); 		break; 	} }

user: user-4
content: scanf的输入结束标志有三种，空格，回车键，tab键，所以你这里可以3  3然后再按回车，或者3(tab键)3然后再按回车，或者就是你说的3回车3这种形式。
user-0 提问: 自学小白请求帮助《人生的第一条代码》

回复:
user: user-1
content: http://jingyan.baidu.com/article/4b07be3c439f5048b380f30b.html

user: user-2
content: C与C++程序设计学习与实验系统 2013.3 可以不用建立项目（单文件），简单的试验代码甚至不用保存为文件，直接编译运行观察结果，比较方便。 只有几十M大小。

user: user-3
content: 工程类型建错了，建立控制台工程， 控制台工程入口函数才是 main

user: user-0
content: 原来如此  谢谢！！！

user: user-4
content: 工程类型建错了。  选 Win32 Console Application 。  不是（Win32 Application）
user-0 提问: 汉诺塔的非递归问题C语言

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

user: user-2
content: 个人觉得楼主没必要研究这种问题，很明显非递归会很麻烦，咋们写程序讲的是更优化，所以只需要弄懂它的递归实现就可以了。

user: user-3
content: 无聊的时候好像我还写过一个 汇编版本的, 不过仍然是递归的,  应该速度还好, 不过好像只有32位版本... http://bbs.csdn.net/topics/110155915

user: user-3
content: 汉诺塔 没非递归的, 那种用栈模拟递归的只是更难看的递归 , 比如这样...  #include <stdio.h> #include <assert.h>  #define MAXN	256 #define move( from , to )  	printf("%c-->%c\n" , from , to) #define SWAP( a , b )		do { a^=b; b^=a; a^=b; } while(0)  void hanio( int n , int from , int temp , int to ) { 	int skp = 0; 	int sk_n[ MAXN ] , sk_from [ MAXN ] , sk_temp [ MAXN ] , sk_to [ MAXN ];  	assert(n < MAXN);	 	while( 1 ) 	{ 		if( n == 1 ) 		{ 			move( from , to );  		}	 		else 		{ 			sk_n   [ skp ] = -- n ; 			sk_from[ skp ] = temp ; 			sk_temp[ skp ] = from ; 			sk_to  [ skp ] = to   ; 			++ skp                ; 			SWAP( to , temp ); 			continue; 		} 		 		if( skp-- ) 		{	 			n    = sk_n	   [ skp ] ; 			temp = sk_temp [ skp ] ;  			from = sk_from [ skp ] ; 			to   = sk_to   [ skp ] ; 			 			move( temp , to ); 			continue; 		} 		else  			break; 	}	 }  int main() { 	hanio(5, 'A', 'B', 'C');  	return 0; }
user-0 提问: 指向数组的指针做函数参数

回复:
user: user-1
content: 不知道你用的什么编译器，我在VC++6.0中把void average (float*p,int n)函数中的 pe=p+n-1;语句移动到for循环之前就能成功运行，不改的话，编译不成功

user: user-2
content: http://blog.csdn.net/u011028771/article/details/52705063

user: user-3
content: void average (float *p,int n); void search(float(*p)[4],int n); 2个函数声明放到main函数外面去。
user-0 提问: strcpy出错，哪里问题帮忙看看

回复:
user: user-1
content: strcpy_s和strcpy()函数的功能几乎是一样的。strcpy函数，就象gets函数一样，它没有方法来保证有效的缓冲区尺寸，所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时，这将导致不可预料的行为。用strcpy_s就可以避免这些不可预料的行为。

user: user-2
content: 新编译器不提倡甚至禁止使用strcpy这种有安全隐患的函数，编译的时候应该会提示使用strcpy_s等安全版本的

user: user-3
content: 引用 2 楼 jingxingxiaozhang 的回复:[quote=引用 1 楼 user-3 的回复:] strncpy(temp_mem2, "abcdefgh");  改成  strcpy(temp_mem2, "abcdefgh"); 不是这个的原因，上一个语句strcpy就是这样，一样出错。这个是我怀疑是溢出导致错误，加了了n，后来又改了回来。[/quote]  因为这个函数是不安全，可能造成缓冲区溢出，所以现在建议用strcpy_s来代替 如果仍想用可以选择以下任何一种方法： 1、新建项目时不要勾选安全开发生命周期检查 2、在项目属性C/C++命令行中加上 /D _CRT_SECURE_NO_WARNINGS

user: user-0
content: 引用 1 楼 user-3 的回复:strncpy(temp_mem2, "abcdefgh");  改成  strcpy(temp_mem2, "abcdefgh"); 不是这个的原因，上一个语句strcpy就是这样，一样出错。这个是我怀疑是溢出导致错误，加了了n，后来又改了回来。

user: user-3
content: strncpy(temp_mem2, "abcdefgh");  改成  strcpy(temp_mem2, "abcdefgh");
user-0 提问: 【基础题】求平均数

回复:
user: user-0
content: 引用 1 楼 fefe82 的回复:for(i=0;i<10;++i) { for(j=0;j<5;++j) { a[i]=(s[i][0]+s[i][1]+s[i][2]+s[i][3]+s[i][4])/5;	 } } for(j=0;j<5;++j) { for(i=0;i<10;++i) { a[j]=(s[0][j]+s[1][j]+s[2][j]+s[3][j]+s[4][j]+s[5][j]+s[6][j]+s[7][j]+s[8][j]+s[9][j])/10;	  // 覆盖了上一次的结果 } } 那我要怎么改？我初学不是太懂

user: user-0
content: 引用 楼主 A_little_idiot 的回复:我写入下列代码之后： main() { 	int i,j; 	float s[10][5],a[10]; 	printf("请输入10个学生的成绩,按照“科目一 科目二 科目三 科目四 科目五”的顺序依次输入：\n"); 	for(i=0;i<10;++i) 	{ 		printf("第%d个学生：",i+1);		 		for(j=0;j<5;++j) 		{ 			scanf("%f",&s[i][j]); 		} 	} 	for(i=0;i<10;++i) 	{ 		for(j=0;j<5;++j) 		{ 			a[i]=(s[i][0]+s[i][1]+s[i][2]+s[i][3]+s[i][4])/5;	 		} 	} 	for(j=0;j<5;++j) 	{ 		for(i=0;i<10;++i) 		{ 			a[j]=(s[0][j]+s[1][j]+s[2][j]+s[3][j]+s[4][j]+s[5][j]+s[6][j]+s[7][j]+s[8][j]+s[9][j])/10;		 		} 	}  	printf("\n"); 	for(i=0;i<10;++i) 	{ 		printf("第%d个学生的平均分为：%.2f\n",i+1,a[i]); 	} 	for(j=0;j<5;++j) 	{ 		printf("第%d门课的平均分为：%.2f\n",j+1,a[j]); 	} 	return 0; } 为什么第一个学生到第五个学生的平均分不对啊，我的代码哪里有错？  那我要怎么改呢？我初学还不是太懂

user: user-1
content: for(i=0;i<10;++i) { for(j=0;j<5;++j) { a[i]=(s[i][0]+s[i][1]+s[i][2]+s[i][3]+s[i][4])/5;	 } } for(j=0;j<5;++j) { for(i=0;i<10;++i) { a[j]=(s[0][j]+s[1][j]+s[2][j]+s[3][j]+s[4][j]+s[5][j]+s[6][j]+s[7][j]+s[8][j]+s[9][j])/10;	  // 覆盖了上一次的结果 } }

user: user-2
content: 引用 3 楼 A_little_idiot 的回复:[quote=引用 1 楼 fefe82 的回复:] for(i=0;i<10;++i) { for(j=0;j<5;++j) { a[i]=(s[i][0]+s[i][1]+s[i][2]+s[i][3]+s[i][4])/5;	 } } for(j=0;j<5;++j) { for(i=0;i<10;++i) { a[j]=(s[0][j]+s[1][j]+s[2][j]+s[3][j]+s[4][j]+s[5][j]+s[6][j]+s[7][j]+s[8][j]+s[9][j])/10;	  // 覆盖了上一次的结果 } } 那我要怎么改？我初学不是太懂[/quote]  不要都用a这个数组，再声明一个数组b
user-0 提问: 关于C语言中的n位整数加减运算器

回复:
user: user-1
content: len 是 无符号类型，len - 1 得到的是能表示的最大的正数，;i<=len 会将 i 转换成 unsigned再与len-1比较  可以改成i<=(int)len-1
user-0 提问: 计算机组成原理疑惑

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

user: user-2
content: float是否会溢出取决于编译器。 就计算机组成来说，8位完全可以表示+1.0等浮点数。

user: user-3
content: 我的理解是+0，-0都是int型，8位可以表示，但是+1.0，-1.0时float型，8位表示不了，要16位才行，所以会溢出吧。 不知道理解的对不对。
user-0 提问: 那错了

回复:
user: user-0
content: 我是d=a和d变量一起去掉的，去掉就输出个5.

user: user-1
content: 可能是编译器的问题,如果你不需要这句也就是对d变量的初始化,那直接可以把int d的d变量的声明去掉

user: user-0
content: 谢谢！ 我还有个问题。 #include<stdio.h> int main() { int a,b=0,d,c[5]; scanf("%d",&a); d=a;   //为什么我都不用到d=a,可我去掉这个结果就不对了// while(a!=0) { c[b]=a%10; a=a/10; b++; } printf("一共有%d位数\n",b); printf("%d",c[b]);   //去掉后这只输出个5// printf("\n"); for(int j=0;j<b;j++) printf("%d",c[j]); printf("\n"); return 0; }

user: user-2
content: scanf("%d",&i);  改成  scanf("%lf",&i);  %d 是对应  int
user-0 提问: 问一个问题

回复:
user: user-1
content: 如果和定义是在同一个函数内直接使用sizeof就行 如果是传参进去的，就多传个参数来指定结构体数组的长度 https://segmentfault.com/q/1010000000422627

user: user-2
content: 你不知道数组的大小吗？使用sizeof（数组名）/sizeof（结构体名）就是数组元素的大小

user: user-3
content: 使用 _countof 获得数组的大小，然后来判断循环范围
user-0 提问: 随机函数的问题

回复:
user: user-0
content: 引用 1 楼 user-4 的回复:snake->sHead = (S *)malloc( sizeof(S) *length);  snake->sHead 是 int*类型  对哦，忘改了，谢谢

user: user-1
content: C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\rand.c /*** *rand.c - random number generator * *       Copyright (c) Microsoft Corporation. All rights reserved. * *Purpose: *       defines rand(), srand() - random number generator * *******************************************************************************/  #include <cruntime.h> #include <mtdll.h> #include <stddef.h> #include <stdlib.h>  /*** *void srand(seed) - seed the random number generator * *Purpose: *       Seeds the random number generator with the int given.  Adapted from the *       BASIC random number generator. * *Entry: *       unsigned seed - seed to seed rand # generator with * *Exit: *       None. * *Exceptions: * *******************************************************************************/  void __cdecl srand (         unsigned int seed         ) {         _getptd()->_holdrand = (unsigned long)seed; }   /*** *int rand() - returns a random number * *Purpose: *       returns a pseudo-random number 0 through 32767. * *Entry: *       None. * *Exit: *       Returns a pseudo-random number 0 through 32767. * *Exceptions: * *******************************************************************************/  int __cdecl rand (         void         ) {         _ptiddata ptd = _getptd();          return( ((ptd->_holdrand = ptd->_holdrand * 214013L             + 2531011L) >> 16) & 0x7fff ); }

user: user-2
content: #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <conio.h> #include <time.h>  typedef struct Snake { 	int * sHead; 	int len; 	int heng; 	int shu; }S;  typedef struct Food { 	int shap; 	int heng; 	int shu; }F;  void gotoxy(int x, int y);  void init_snake(S * snake, int length); void rand_snake(S * snake);  void init_food(F * food); void rand_food(F * food);  int p = 0;  int main(void) { 	srand(time(0)); 	F food; 	S snake; 	init_food(&food); 	rand_food(&food); 	init_snake(&snake, 1); 	rand_snake(&snake);  	return 0; } //初始化蛇 void init_snake(S * snake, int length) { 	snake->sHead = (int *)malloc(sizeof(int)*length); 	if (NULL == snake->sHead) 	{ 		printf("小蛇没孵出来..."); 	} 	else 	{ 		snake->len = 1; 	} } //初始化食物 void init_food(F * food) { 	food->shap = 0; 	food->heng = 0; 	food->shu = 0; }  //蛇随机出现的位置 void rand_snake(S * snake) { 	snake->sHead = &p; 	snake->heng = rand() % 20; 	snake->shu = rand() % 20; 	gotoxy(snake->heng, snake->shu);//蛇总是与食物出现在同一位置 	printf("%d", *(snake->sHead)); }  //食物随机出现的位置 void rand_food(F * food) { 	food->heng = rand() % 20; 	food->shu = rand() % 20; 	gotoxy(food->heng, food->shu); 	food->shap = 111; 	printf("%c", (char)(food->shap));  }  void gotoxy(int x, int y) { 	COORD C; 	C.X = x; 	C.Y = y; 	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), C); }

user: user-3
content: srand(time(0));只需放在main开始执行一次就行了

user: user-4
content: snake->sHead = (S *)malloc( sizeof(S) *length);  snake->sHead 是 int*类型
user-0 提问: vs2015中strcpy函数总是出错

回复:
user: user-1
content: 你把你写的贴一下呗

user: user-2
content: 替换成strcpy_s版本的就行了，至于strcpy_s的用法，看看MSDN

user: user-3
content: 改用strcpy_s或者设置一下，网上随便查可以查到
user-0 提问: 【C语言训练】最大数问题。  大家帮我看一下究竟是哪里有问题，一直WA，检查了好多遍

回复:
user: user-1
content: 引用 4 楼 tigercoder 的回复:[quote=引用 1 楼 qq_36409192 的回复:]  你的这个程序如果输入的值是小于-1的，那么你最后的结果就会出错。  我刚才按你的输入试了一下，得出的结果是-2   没有错啊。。[/quote]  不懂你这个-2是怎么出来的，我按照你的原代码给你截图的，你这个-2从你写的程序上来看我不知道是怎么来的，因为你while循环输入-1的时候实际上已经输入到数组中，那么在你的for循环进行比较的时候，你倒数第二个数还是要和-1比较，让后j++，也就是j=4了，然后你输入a[j]，那很明显就是输出第五个数-1啊。

user: user-0
content: 引用 1 楼 qq_36409192 的回复: 你的这个程序如果输入的值是小于-1的，那么你最后的结果就会出错。  我刚才按你的输入试了一下，得出的结果是-2   没有错啊。。

user: user-0
content: 引用 2 楼 user-2 的回复:下面for循环，当 j = i -1 的时候，A[j+1] 已经越界了  谢谢！过了

user: user-2
content: 下面for循环，当 j = i -1 的时候，A[j+1] 已经越界了

user: user-1
content: 你的这个程序如果输入的值是小于-1的，那么你最后的结果就会出错。
user-0 提问: 请教这个代码哪里有问题

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

user: user-0
content: while(	!feof(fp)  )//判断是否已经到达文件末尾 { if(strcmp(tc->id,x) != 0)//判断读入文件是否与要删除老师工号相同 { //不同 则写入临时文件 fwrite(tc,sizeof(teacher),1,fq); fread(tc,sizeof(teacher),1,fp) ;   }  } 这里出现了while死循环  怎么回事？？、/?

user: user-2
content: 检查文件有没打开成功
user-0 提问: C语言

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

user: user-2
content: 一般在定义class、struct、union、enum等这样的自定义数据类型时，"}"后面需要加";" 其他则不需要。  我记得c++ primer那本书里有总结，在哪个位置记不大清了

user: user-3
content: 你开开发环境中，他会提醒你是否要加大括号，如果不加会报错，多谢谢就记住了

user: user-0
content: 有没有总结

user: user-4
content: 这是标准规定的，你后面用大括号可以不用再加分号

user: user-5
content: 除了结构体和类的定义的右大括号}后面还要加;分号以外，其它右大括号}后面都不需要加;分号。

user: user-0
content: 有点看不懂

user: user-6
content: 引用 2 楼 qq_36370998 的回复:有没有总结  官方总结：  C++标准草案n4296  Annex A 收录了 C++ 语言的所有生成规则。一共 20 页。

user: user-7
content: if (1)     x = 1 ;  if (1){     x = 1 ; }   这样是等价的吧
user-0 提问: strstr函数，找不到问题在哪？

回复:
user: user-1
content: 两个编译错误： 1、p = strstr(p,'=');          //问题应该就出现在这里，为什么会导致崩溃？ 应该是"=",而不是'='; 2、char* valuebuf[120] = { 0 };     应该是char valuebuf[120] = { 0 }; 去掉 *

user: user-0
content: 没人给说说吗
user-0 提问: 能否用这种方式定义一个大小可变的数组

回复:
user: user-1
content: int * Sort=(int *)malloc(sizeof(int)); 这句申请的只有一个元素大小的空间  要N个元素的数组要写成： int * Sort=(int *)malloc(sizeof(int) * N);

user: user-2
content: 还不如直接用链表等其他结构了

user: user-3
content: malloc,realloc,free

user: user-4
content: 显然不行。你怎么知道Sort后面的空间一定是可用的呢
user-0 提问: 建一个顺序存储的线性表 ，删除给定的数据，并输出删除之后的线性表，如没有则不删除。

回复:
user: user-1
content: 关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-2
content: DelList(L, n, e);改成DelList(L, m, e);  #include<iostream> using namespace std; #define maxsize 10 typedef int ElemType; /*typedef struct { ElemType  elem[maxsize]; int  last; } SeqList;*/ struct SeqList { 	ElemType  elem[maxsize]; 	int  last; };  SeqList *init_SeqList(); int  InsList(SeqList *L, int i, ElemType e); int  DelList(SeqList *L, int i, ElemType *e); int  Locate(SeqList *L, ElemType e); void Print(SeqList *L);  SeqList *init_SeqList() { 	SeqList *L; 	L = new SeqList; 	L->last = -1; 	return L; } int  InsList(SeqList *L, int i, ElemType e) { 	int k; 	if ((i<1) || (i>L->last + 2)) 	{ 		printf("i is error!"); return 0; 	} 	if (L->last >= maxsize - 1) 	{ 		printf("List is full!"); return 0; 	} 	for (k = L->last; k >= i - 1; k--) 	{ 		L->elem[k + 1] = L->elem[k]; 	} 	L->elem[i - 1] = e; 	L->last++; 	return 1; } int  DelList(SeqList *L, int i, ElemType *e) { 	int k; 	if ((i<1) || (i>L->last + 1))//把1改成10了 	{ 		printf("i is error!"); return 0; 	} 	*e = L->elem[i - 1]; 	for (k = i; k <= L->last; k++) 	{ 		L->elem[k - 1] = L->elem[k]; 	} 	L->last--; 	return *e; }  int  Locate(SeqList *L, ElemType e) { 	int i = 0; 	while ((i <= L->last) && (L->elem[i] != e))i++; 	if (i <= L->last) 		return(i + 1); 	else 		return(0); }  void Print(SeqList *L) { 	int i; 	for (i = 0; i <= L->last; i++) 	{ 		cout << L->elem[i] << " "; 	} 	cout << endl; } int main() { 	SeqList *L; 	L = init_SeqList(); 	int n, m; 	cin >> n; 	int i; 	int a; 	int *e; 	e = &a; 	for (i = 1; i <= n; i++) 	{ 		cin >> m; 		InsList(L, i, m); 	} 	Print(L); 	cin >> m; 	DelList(L, m, e); 	Print(L); 	return 0; }  单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-3
content: 感觉自己好懒，代码看得好累，，，，，

user: user-4
content: 不想看代码，给你个参考

user: user-4
content: http://blog.csdn.net/rodestillfaraway/article/details/50530142
user-0 提问: C++编程：(1)	用一个函数来实现将一行字符中最长的单词输出。

回复:
user: user-1
content: 引用 2 楼 A_little_idiot 的回复:#include "stdafx.h" #include <string.h>//在用字符串处理函数时，应把“string.h"文件包含到本文件中 int main(void) {        int i;        char str[80],max[80];//尽量赋予数组足够长的长度        int maxlen,len;//定义最大长度和长度        printf("Input 6 words:");        scanf("%s",str);        strcpy(max,str);//先将第一个str拷贝给max        maxlen=strlen(max);//计算max的长度，作为maxlen的初值        for(i=1;i<6;i++) //从第2个单词开始循环        {              scanf("%s",str);//将第i+1个单词输入给str               len=strlen(str);//计算第i+1个str的长度               if(maxlen<len  ) //比较maxlen和第i+1个str的长度的大小                         {                      strcpy(max,str); /*如果第i+1个str的长度的值大于maxlen， 									  则将str拷贝给max*/                      maxlen= len;//将maxlen的值被第i+1个str的长度的值代替               }        }        printf("The longest word is:%s\n",max);        return 0; }//#include "stdafx.h" #include <stdio.h> #include <string.h>//在用字符串处理函数时，应把“string.h"文件包含到本文件中 int main(void) { 	int i; 	char str[80],max[80];//尽量赋予数组足够长的长度 	int maxlen=0,len=0;//定义最大长度和长度 	i=6; 	printf("Input 6 words:\n"); 	do{ 		printf("第%d个:",6-i); 		scanf("%s",str);//将第i+1个单词输入给str 		len=strlen(str);//计算第i+1个str的长度 		if(maxlen<len  ) //比较maxlen和第i+1个str的长度的大小           		{ 			strcpy(max,str); //如果第i+1个str的长度的值大于maxlen，则将str拷贝给max 			maxlen= len;//将maxlen的值被第i+1个str的长度的值代替 		} 		printf("目前最长的单词:%s\n",max); 	}while(--i); 	 	printf("The longest word is:%s\n",max); 	return 0; }

user: user-0
content: 大神，那我再问问我这个代码哪里有问题吗？ main() { 	int i,j; 	float s[10][5],a[10]; 	printf("请输入10个学生的成绩,按照“科目一 科目二 科目三 科目四 科目五”的顺序依次输入：\n"); 	for(i=0;i<10;++i) 	{ 		printf("第%d个学生：",i+1); 		for(j=0;j<5;++j) 		{ 			scanf("%f",&s[i][j]); 		} 		a[i]=(s[i][0]+s[i][1]+s[i][2]+s[i][3]+s[i][4])/5;  		a[j]=(s[0][j]+s[1][j]+s[2][j]+s[3][j]+s[4][j]+s[5][j]+s[6][j]+s[7][j]+s[8][j]+s[9][j])/10; 	} 	printf("\n"); 	for(i=0;i<10;++i) 	{ 		printf("第%d个学生的平均分为：%.2f\n",i+1,a[i]); 	} 	for(j=0;j<5;++j) 	{ 		printf("第%d门课的平均分为：%.2f\n",j+1,a[j]); 	}  	return 0; }

user: user-2
content: 改进的话防止字符串缓冲区溢出

user: user-2
content: 没问题，不过太哆嗦，注释不用去把代码的意思解释一遍

user: user-0
content: 帮我看看我的代码有没有错啊

user: user-0
content: 为什么没人帮我啊

user: user-0
content: #include "stdafx.h" #include <string.h>//在用字符串处理函数时，应把“string.h"文件包含到本文件中 int main(void) {        int i;        char str[80],max[80];//尽量赋予数组足够长的长度        int maxlen,len;//定义最大长度和长度        printf("Input 6 words:");        scanf("%s",str);        strcpy(max,str);//先将第一个str拷贝给max        maxlen=strlen(max);//计算max的长度，作为maxlen的初值        for(i=1;i<6;i++) //从第2个单词开始循环        {              scanf("%s",str);//将第i+1个单词输入给str               len=strlen(str);//计算第i+1个str的长度               if(maxlen<len  ) //比较maxlen和第i+1个str的长度的大小                         {                      strcpy(max,str); /*如果第i+1个str的长度的值大于maxlen， 									  则将str拷贝给max*/                      maxlen= len;//将maxlen的值被第i+1个str的长度的值代替               }        }        printf("The longest word is:%s\n",max);        return 0; }

user: user-1
content: 为何不将代码贴出来，给什么图片
user-0 提问: do while和while有什么区别么

回复:
user: user-1
content: 比如 int i=0; int sum=0; while(i>0) { sum++; } printf("%d",sum); 输出结果：0 do{ sum++; }while(i>0) printf("%d",sum); 输出结果：1

user: user-2
content: 多看看书，仔仔细细看，朋友。

user: user-3
content: http://blog.csdn.net/bentengdehe/article/details/51304137?locationNum=2&fps=1 请参考这里。。

user: user-0
content: 引用 2 楼 qq407311984的回复:先执行do部分然后判断while循环条件是否成立，成立就再执行do部分再判断while。while则先判断循环条件是否成立，成立才执行循环 能不能给个比较好的例子说明会出现怎么样不同的结果？

user: user-0
content: 引用 1 楼 user-5的回复:前者无条件至少会执行循环体1次，后者可能一次也执行 能不能给个比较好的例子说明会出现怎么样不同的结果？

user: user-4
content: 先执行do部分然后判断while循环条件是否成立，成立就再执行do部分再判断while。while则先判断循环条件是否成立，成立才执行循环

user: user-5
content: 前者无条件至少会执行循环体1次，后者可能一次也执行