Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: for循环结构的一个问题

回复:
user: user-0
content: 引用 6 楼 niiiloc的回复:sum位置没啥问题，估计是题目搞错了 引用 5 楼 qq_35909809 的回复:答案是它的位置有问题，我想知道它的正确位置在哪里以及为什么题目中的位置不对 正解，应该是题目问题

user: user-1
content: 对于c++等其他语言来说，给float类型的变量赋值要加F，不加F就是double类型了，所以前面有人说是0.0F的问题，但是看你这个的头文件，应该是C语言，虽然看不出来哪里有问题，但是记得以前写C的时候，一般是在定义变量的时候就要给一个初值，也就是float sum=0;float avg=0;....然后把sum=0放在循环的最下面这样就行了。 除了上面这个，还可以试试把sum定义成全局变量，就是放在函数外面，float前面加static

user: user-2

user: user-0
content: 引用 6 楼 niiiloc的回复:sum位置没啥问题，估计是题目搞错了 引用 5 楼 qq_35909809 的回复:答案是它的位置有问题，我想知道它的正确位置在哪里以及为什么题目中的位置不对 嗯，我去问一下老师。多谢

user: user-3
content: sum位置没啥问题，估计是题目搞错了 引用 5 楼 qq_35909809 的回复:答案是它的位置有问题，我想知道它的正确位置在哪里以及为什么题目中的位置不对

user: user-0
content: 答案是它的位置有问题，我想知道它的正确位置在哪里以及为什么题目中的位置不对

user: user-4
content: 0.0默认是double类型 0.0f才是float类型

user: user-5
content: sum=0.0f;

user: user-0
content: 想了半节课硬是没搞懂

user: user-0
content: 这个sum=0.0，我认为就是给内循环赋初值，书上也见过相似的例子，就是那个求1的阶乘2的阶乘一直到n的阶乘的和，也是在外面给那个累乘求积变量赋初值
user-0 提问: C中总输出0.00

回复:
user: user-1
content: s=n*s/10，你还没有对s初始化，所以系统自动给它赋值为0.0了，你可以先对s变量直接输出就会发现了

user: user-1
content: 引用 6 楼 qq_34840204的回复:s是啥，你也没初始化，默认值为0 变量没有初始化，默认值不是0，是个随机值，也可能是之前内存残留的值

user: user-1
content: 变量没有初始化，默认值不是0，是个随机值，也可能是之前内存残留的值

user: user-2
content: s是啥，你也没初始化，默认值为0

user: user-3
content: 第7行： s = n*a / 10.0;

user: user-4
content: 没看到你的s = n * s /10;中s没有初始化吗？还是你这句写错了呢，输入的a去哪了？

user: user-5
content: s=n*a/10; 你写的是s=n*s/10;

user: user-6
content: s的赋值语句参数写错了。。
user-0 提问: C语言小白

回复:
user: user-1
content: 你调用函数的形参是数组，你那句调用的语句实参是数组下标为10的数，当然不可以传递了，直接把数组名当实参传递就行了。

user: user-2
content: 实参有问题，在调用eval函数时，去掉数组后面[10]，因为数组名是地址，而str[10]是表示下表为10的数组元素，并且也已经越界了。

user: user-3

user: user-4
content: 引用 2 楼 张小白1.0 的回复:你用数组传参，传的是地址，所以参数应该写str[] 和 ch[]   然后在调用函数的时候写数组名就可以了eval(str,ch);纠正一下，前面的不用改，只用在调用时输入数组的地址就好了

user: user-4
content: 你用数组传参，传的是地址，所以参数应该写str[] 和 ch[]   然后在调用函数的时候写数组名就可以了eval(str,ch);

user: user-5
content: 把数组能赋给了变量sum？
user-0 提问: 这个错误的问题是什么

回复:
user: user-1
content: 引用 6 楼 qhmoon 的回复:[quote=引用 4 楼 jiht594 的回复:] [quote=引用 3 楼 jiht594 的回复:] 为什么只能用%c，而不能使用%s 看书 既然存在%c和%s、它们必然用法是不相同或者不完全相同。自己看看有什么区别[/quote] c是单个字符，s是单个字符或字符串[/quote] 怎么得出来的？代码贴上来

user: user-0
content: 引用 4 楼 jiht594 的回复:[quote=引用 3 楼 jiht594 的回复:] 为什么只能用%c，而不能使用%s 看书 既然存在%c和%s、它们必然用法是不相同或者不完全相同。自己看看有什么区别[/quote] c是单个字符，s是单个字符或字符串

user: user-0
content: 引用 2 楼 自信男孩 的回复:如果想输出%s，建议后面的str1[i]改成str1 + i;因为str1+i是表示地址。  按你的思路调整了一下 输出结果： 输入：hello 输出： hello ello llo lo o

user: user-1
content: 引用 3 楼 jiht594 的回复:为什么只能用%c，而不能使用%s 看书 既然存在%c和%s、它们必然用法是不相同或者不完全相同。自己看看有什么区别

user: user-1
content: 为什么只能用%c，而不能使用%s 看书

user: user-2
content: 如果想输出%s，建议后面的str1[i]改成str1 + i;因为str1+i是表示地址。

user: user-2
content: 因为%c后面跟的是一个变量值，而%s后面要跟的是地址，即需要告诉它一个地址开始的字符串（知道遇到'\0'停止输出）。 根据str1[i]这个是一个比较小的值（你输入的值），而这个值作为地址的内存空间不可以访问，所以导致异常，程序异常退出。
user-0 提问: 为啥选D？谁给个解释

回复:
user: user-1
content: sum是个递归函数，这时你需要理解这个递归函数的功能是什么，最重要的一句是“return array[0]+sum(array+1,len-1);”，假如len为1，这条语句就相当于array[0]+array[1]，因为再次调用的时候传的长度为0，返回array[0]，但这个array的值对于外面一层来说是array+1，所以传回来的是(array+1)[0]，其实就是array[1]。 同样的，当len为2可以发现这句的结果是array[0]+array[1]+array[2]，所以我们可以得出结论：函数sum的功能是求出数组array[0]+···+arr[len]的和。 再看main，调用语句是sum(array,4)，那么就是求array[0]+···+array[4]的和，你加起来就是15了。 如果你实在不理解，可以把自己当成计算机来一步一步运算一遍，反正也没几层递归。

user: user-2
content: array[0]+sum(array+1,3); ： sum(array+1,3) =   array[0]' + sum(array+1,2);  =>array[0]+ array[1] + sum(array+1,2);      array[0]+ array[1] + array[2] + sum(array+1,1);      array[0]+ array[1] + array[2] + array[3] +  array[4]

user: user-3
content: 递归，最后是5+4+3+2+1=15，注意return array[0] + sum(array+1, len-1)并不是所有的array[0]都是指1，因为需要注意下array+1实参，即只有第一次递归的的array[0]是1，第二次是(array+1)[0]即2，第三次递归实在第二次的基础上又加了1，即是3等等，知道len=0，此时array[0]即5，所以再根据递归的返回，所以最后一次是5， 倒数第二次是4，依次3， 2， 1；所以是5+4+3+2+1  之所以是5+4...+1而不是1+2+...+5，因为函数栈是先进后出，最先确定是array[0]是5.

user: user-4
content: 递归1+2+3+4+5=15，不太懂你选B的逻辑。
user-0 提问: 关于二维数组传递的问题

回复:
user: user-0
content: 引用 1 楼 自信男孩的回复:二维数组形参，至少要定义列数，即行数可以不确定，但是列数必须要确定。 直接int **ptr不可以吗，我看见有些程序这样写了

user: user-1
content: 二维数组形参，至少要定义列数，即行数可以不确定，但是列数必须要确定。
user-0 提问: C语言中求三角形面积怎么会这样

回复:
user: user-1
content: double和float不对应

user: user-2
content: 书本上也可能印错的！

user: user-3
content: 是double的问题吧

user: user-0
content: 怎么样结帖的

user: user-0
content: 引用 7 楼 niiiloc 的回复：都告诉你错了，还不肯去试试，还在这边躺着耍无赖么？？要么你自己看错了要么书本印刷错了 引用 5 楼 qq_44870309 的回复:引用 1 楼 niiiloc 的回复：是lf不是1f，记得结贴：）是1f,按照书本输的你是对的，确实书本的1和l一样

user: user-4
content: 引用引用 1 楼 niiiloc 的回复： 是lf不是1f，记得结贴：） 是1f,按照书本输的 书上的l和1长得一样

user: user-5
content: 都告诉你错了，还不肯去试试，还在这边躺着耍无赖么？？要么你自己看错了要么书本印刷错了 引用 5 楼 qq_44870309 的回复:引用 1 楼 niiiloc 的回复：是lf不是1f，记得结贴：）是1f,按照书本输的

user: user-0
content: 引用 3 楼 qq_41919458 的回复：用float定义试试，把%lf改成%f按照书本输的

user: user-0
content: 引用 1 楼 niiiloc 的回复：是lf不是1f，记得结贴：）是1f,按照书本输的

user: user-0
content: 按照书本输入的

user: user-6
content: 应该是英文的逗号问题。检查一下输入的逗号是不是成中文了？！

user: user-5
content: 是lf不是1f，记得结贴：）

user: user-7
content: 用float定义试试，把%lf改成%f
user-0 提问: C语言写登录程序，输入作为一个函数，判断作为一个函数，该如何连接起来？

回复:
user: user-0
content: 修改完毕： #include <stdio.h> #include "s_gets.h" #include <string.h> #include <windows.h> #define FG "*****************************" int sr(void); int yz(char *zh,char *mima); static const char zhanghao[30] = { "cuihe500" }; static const char zmima[30] = { "870219176" }; int main(void) { 	system("color A4"); 	SetConsoleTitle(L"登录系统"); 	printf("%s\n", FG); 	printf("%s\n", "欢迎使用登录系统！"); 	printf("%s\n", FG); 	while (1) 	{ 		if (sr()) 		{ 			break;		//break;不能用于IF语句中 该break;是用于while语句中 如果sr返回值为1 跳出循环 		}  	} 	return 0; } int sr(void) { 	char zh[30]; 	char mima[30]; 	int a,b; 	do 	{ 		printf("请输入账号:"); 		while (!scanf_s("%s", zh, 30)) 		{ 			printf("输入错误，请检查后重新输入！\n");  		} 		printf("请输入密码:"); 		while (!scanf_s("%s", mima, 30)) 		{ 			printf("输入错误，请检查后重新输入！\n"); 		} 		b=yz(zh, mima); 	} while (b);		//do while 当while()判断为假时 关闭循环 	return 1; }  int yz(char *zh, char *mima ) { 		if (strncmp(zhanghao,zh,30)) 		{ 			printf("不存在的用户名！请检查后重新输入!\n"); 			rewind(stdin); 			return 1; 		} 		else if (strncmp(mima, zmima,30)) 		{ 			printf("密码错误！请重新输入\n"); 			rewind(stdin); 			return 1; 		} 		else 		{ 			printf("登录成功！欢迎使用该系统！\n"); 			system("pause"); 			return 0; 		} }

user: user-1
content: 把函数sr中定义的2个变量zh和mima，拿出来，放到main函数中定义 sr函数重新定义为： int sr(char *zh, char*mima) 修改main函数调用sr的方式： while(1) {     if (sr) {         break;     } }
user-0 提问: 萌新求教一些C语言问题

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:fgets输入的字符串 最后会有一个换行符\n 所以永远不会想等 我已经找到问题了 和您说的一样 后面改用scanf_s();后问题解决！感谢您的帮助！

user: user-1
content: fgets输入的字符串 最后会有一个换行符\n 所以永远不会想等
user-0 提问: 有没有大佬告诉我一下这题考的什么知识点，面试题没写出来...

回复:
user: user-1
content: 逻辑题，题目理解为 板子1电容数 大于 板子2电容数 板子2电容数 大于 板子4电容数 板子1电容数 大于 板子4电容数 板子4电容数 大于 板子3电容数 最后比较2  和  3 因为2大于4     4大于3 所以2大于3 前者大返回值为1
user-0 提问: 输入数字金字塔，不能只用rintf

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h>  int main() {     int i,j;     for(i=1; i<=9; i++)     {         for(j=9-i; j>=1; j--)         {             putchar(' ');         }         for(j=1; j<=(2*i-1)/2+1; j++)         {             putchar(j+'0');         }         for(j=(2*i-1)/2; j>=1; j--)         {             putchar(j+'0');         }         putchar('\n');      }     return 0; }

user: user-2
content: <!DOCTYPE html> <html> <head> 	<title>数字金字塔</title> </head> <body>  <?php for($i=1; $i<=9; $i++)     {         for($j=9-$i; $j>=1; $j--)         {              echo "    ";          }         for($j=1; $j<=(2*$i-1)/2+1; $j++)         {             echo "$j  ";         }         for($j=(2*$i-1)%$i; $j>=1; $j--)         {             echo "$j  ";         }         ?>         <br>         <?php              }   ?>  </body> </html>

user: user-2
content: #include<stdio.h>  main() {     int n,i,j=0;     printf("请输入金字塔的高度（打印数字行数）：");      scanf("%d",&n);      for(i=1; i<=n; i++)     {         for(j=n-i; j>=1; j--)         {             printf(" ");         }         for(j=1; j<=(2*i-1)/2+1; j++)         {             printf("%d",j);         }         for(j=(2*i-1)/2; j>=1; j--)         {             printf("%d",j);         }         printf("\n");      } }
user-0 提问: 有人给看看咋回事吗

回复:
user: user-1
content: 你是说运行完整的exe吗？exe结束后窗口就会消失，你想要看到结果，就让程序继续运行，比如可以在整体上加循环，或是在最后加getchar()或system("pause")

user: user-2
content: 你的居然会闪退，vc都不会……

user: user-3
content: 楼上说的对，因为程序执行完成了，所以退出了

user: user-4
content: 最后加上这句getchar();

user: user-5
content: 代码没什么问题，在main末尾加一句system("pause");试试

user: user-6
content: 在主函数最后加上while(1);

user: user-7
content: 在最后加个死循环呗,类似while(1)这样的

user: user-0
content: 引用 1 楼 盲侠z的回复:在主函数最后加上while(1); while（1）可行  但不知道对程序有没有影响
user-0 提问: 萌新第一次求教，帮下忙自己找不出问题！！

回复:
user: user-0
content: 一下没注意越界问题 - -，后面那个realloc还没用过，研究一下,提高代码可读性，变量定义成字母是因为想测试一下指针和数组的联系，一般可能会定义成英文单词吧？如果我认真起来用拼音定义还是可以的，英文不好

user: user-1
content: 第一次调用f函数，没问题。不过第一次申请空间的语句建议改成这样：int *a = (int *)malloc(sr * sizeof(sr));因为这样的代码可移植性高一些； 第二次对sr重新输入值，如果这个值大于第一次输入的sr值，就会导致a越界了。通过你的测试用例可知，程序出错是因为内存越界了。 第二次在使用a时，建议使用realloc一下：  a = (int *)realloc(a, sr * sizeof(sr));  if (!a)     exit(0);  至于学不学C++， JAVA,要看你要解决什么问题，C语言是偏底层的语言，主要用于嵌入式方向，比如驱动开发。而C++和C有很大不同，应用的领域也是有差异的，C++的面向对象开发可以用于客户端的开发等等，JAVA就是更跟底层不关了，现在互联网的软件或页面很多是用JAVA写的。  如果你还是一个学生，建议你根据自己的爱好，将来想从事那个领域来确定要深入学习那门语言。  另外，一个好的编码风格里没有将函数定义成一个字母的，你的编码风格还差得远，一步一步来吧，先把程序写的没问题，然后再考虑把代码的可读性提高上去，因为代码除了自己要看，要看明白，也是需要给别人看的，让别人看到你的函数名就能知道这个函数是做什么的最好了。  要精通一门语言不是一天两天的事情，加油吧

user: user-2
content: 推荐拙作，供参考。 ==> https://blog.csdn.net/weixin_44732817/article/details/88530993。
user-0 提问: 小白问一个很小白的问题……

回复:
user: user-0
content: 明白了！！谢谢

user: user-1
content: 直接的原因是上面 1 楼说的，最下面的一行语句 printf("%d",sum); 或者 printf("%d",p); 没有放在else的代码块内，也就是else的花括号内，所以，虽然上面程序是进入了if的代码块里（花括号），但是从if出来之后，还是会执行最后的printf语句一次。  另外，如果是从main函数本身的定义来看的话，实际上是因为缺少了返回值语句，即缺少了return语句。 编译的时候，如果设置的警告（warning）提醒条件严格的话，编译器应该是会提醒int main(){}函数缺少返回值的，虽然不是错误（error）。  所以，从比较规范的函数定义方式的角度来看的话，建议是增加return 语句。 （1）在if(n <= 0)的代码块（花括号）里，添加一行  return -1; // 这个返回值是返回给操作系统的，-1 是告诉操作系统程序运行出错了、提前结束。 （2）在main函数的最后，添加一行默认的 return 0; // 0 是告诉操作系统程序运行正常结束。 而这样一来， printf("%d",sum); 或者 printf("%d",p); 的位置就可以不变，不必放到else的花括号里面去了。

user: user-2
content: printf都没有被else的范围包进去。
user-0 提问: 求助求助！！！

回复:
user: user-1
content: 这图看的眼睛疼

user: user-2
content: 我估计你这里  if(a[j]>='a'&&a[j]<='z'||a[j]>='A'&&a[j]<='Z')	                                      s[ans][cnt++]=a[j];	          else break;	 跳出后回到大循环然后i++，把符号跳过了，你放两个连续的符号看看，能不能放一个进去

user: user-0
content: 引用 1 楼 自信男孩的回复:不知道是CSDN的网站问题，还是提问者的手机像素问题，图片不清晰呢。建议直接贴代码吧 这是我的代码，我设置过断点尝试，发现它根本不走有关标点的if语句，请问该怎么修改，谢谢 len=strlen(a); void deal(char a[]) {     for(i=0;i<len;i++)	 {		    if(a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z')		     {			        ans++;			           cnt=0;			        for(j=i;;j++,i++)			        {				          if(a[j]>='a'&&a[j]<='z'||a[j]>='A'&&a[j]<='Z')					                                      s[ans][cnt++]=a[j];				          else break;		      	}	 	}		    else if(a[i]>='!'&&a[i]<='/')	 	{			        ans++;			        cnt=0;			        s[ans][cnt]=a[i];		    		     }	 else continue; } }

user: user-3
content: 不知道是CSDN的网站问题，还是提问者的手机像素问题，图片不清晰呢。建议直接贴代码吧
user-0 提问: 小白求大佬解答

回复:
user: user-1
content: 主函数之前没有类型，建议看一下C语言的书，熟悉一下基本的结构 比如 int main() void main() 你这个main 之前加一个int 就能解决

user: user-2
content: 引用 4 楼 qq_44710607 的回复:[quote=引用 3 楼 自信男孩的回复:]#include <stdio.h> int main() {     int Fahre, Celsius;     int min, max, i ;      min=0, max=300, i=20;     Fahre = min;      while (Fahre <= max){         Celsius = 5*(Fahre-32)/9;         printf("%d\t%d\n", Fahre,Celsius);         Fahre = Fahre+i;     }      return 0; }  供参考～ 可是它显示的是我的main（）这一步不对，我又不知道错在哪里[/quote] main是个函数是吧，函数要有返回值类型、参数的是吧？你的main没标参数还可以理解，毕竟编译器会帮你加，但是返回值的类型呢？没有返回值也要标void啊。

user: user-3
content: 你图片里的main()前没有int啊，，

user: user-4
content: #include <stdio.h> int main() {     int Fahre, Celsius;     int min, max, i ;      min=0, max=300, i=20;     Fahre = min;      while (Fahre <= max){         Celsius = 5*(Fahre-32)/9;         printf("%d\t%d\n", Fahre,Celsius);         Fahre = Fahre+i;     }      return 0; }  供参考～

user: user-0
content: 引用 1 楼 自信男孩的回复:图片不清晰，建议直接贴出代码 #include <stdio.h>   main() {     int Fahre, Celsius;     int min, max, i ;     min=0, max=300, i=20;     Fahre=min ;      while (Fahre<=max){         Celsius=5*(Fahre-32)/9;         pintf("%d\t%d\n",Fahre,Celsius);         Fahre=Fahre+i;} }

user: user-0
content: 引用 3 楼 自信男孩的回复:#include <stdio.h> int main() {     int Fahre, Celsius;     int min, max, i ;      min=0, max=300, i=20;     Fahre = min;      while (Fahre <= max){         Celsius = 5*(Fahre-32)/9;         printf("%d\t%d\n", Fahre,Celsius);         Fahre = Fahre+i;     }      return 0; }  供参考～ 可是它显示的是我的main（）这一步不对，我又不知道错在哪里

user: user-4
content: 图片不清晰，建议直接贴出代码
user-0 提问: C语言，为什么我输出为乱码

回复:
user: user-1
content: 楼主的问题解决了没，怎么解决的噢

user: user-2
content: 截个输出结果的图来看看

user: user-3
content: 定义的数组越界了

user: user-4
content: 去掉输入name的前面的&，因为name是数组，数组名就是地址。  第二个for循环变量时j，下面用i会导致内存越界，在输出时可能会出现段错误。

user: user-5
content: 输入字符串给 name 字符数组的时候，parr[i].name前面不要 &（取地址符）。

user: user-6
content: 输出的for循环中parr[ ]角标应该是 j
user-0 提问: C语言

回复:
user: user-1

user: user-2
content: 首先你的数组没有初始化，你将1024个字节全部输出，后面肯定都是垃圾数据。其次scanf里的%s在遇到空格时，会截断输入，想要一次读取一行可以尝试gets(),gets_s()，或者用getchar()循环读取。

user: user-3
content: 你是想输入一个句子，然后把每个单词提出来遇到逗号表示这个句子到末尾了？ 如果是这样的话:你那个for循环是不是少了把单词打印出来的语句? 建议你对数组初始化，并用gets()读入,要不然sacnf遇到空格就停了,空格在scanf()函数中读取字符串时是作为分隔符的

user: user-4
content: 你这个输入方式，数组中就没有存储空格，你可以看看字符串的输入，用gets函数

user: user-5
content: 你输入的可能没有1024个，但是你数组没有初始化，所以循环时会把内存原本的垃圾一起读出来，建议先初始化

user: user-6
content: 说你的期望和编译的结果。盲猜一下 你遇到逗号就不输出这个问题?
user-0 提问: max()函数为什么总是输出第一个数，而不是最大数？

回复:
user: user-1
content: 程序没什么问题，建议查一下输入的格式是否正确。建议查一下scanf的返回值，正常返回2，在出错或者输入不对会小于2.

user: user-2
content: 程序输出没啥问题，请注意输入的是1,2，不能遗漏逗号。 还有，函数声明不应放在函数体内。

user: user-2
content: 兄弟你串题了吧 引用 6 楼 一见 的回复:原因是因为第一个调用的是std::max(double,double)，这是一个模板函数，优先匹配上了，第二个调用的是max(float,float)，它隐藏了模板。using污染了名字空间，如果去掉using语句，则不会调用到模板函数，结果就会如预期：  #include <iostream> //using namespace std; float max(float x,float y) { std::cout<<"函数float max(float x,float y)"; if (x>y) return x; else return y; } int main()  { float x=3.0,y=4.1; std::cout<<"max(3.1,4.1)="<<max(3.1,4.1)<<std::endl; std::cout<<"max(x,y)="<<max(x,y)<<std::endl; return 0; }

user: user-3
content: 你输入的时候要严格按照a,b(中间有个逗号)这样输入。而且我试了你的程序，没问题啊。输出最大的

user: user-4
content: 原因是因为第一个调用的是std::max(double,double)，这是一个模板函数，优先匹配上了，第二个调用的是max(float,float)，它隐藏了模板。using污染了名字空间，如果去掉using语句，则不会调用到模板函数，结果就会如预期：  #include <iostream> //using namespace std; float max(float x,float y) { std::cout<<"函数float max(float x,float y)"; if (x>y) return x; else return y; } int main()  { float x=3.0,y=4.1; std::cout<<"max(3.1,4.1)="<<max(3.1,4.1)<<std::endl; std::cout<<"max(x,y)="<<max(x,y)<<std::endl; return 0; }

user: user-5
content: 代码没问题啊，估计是输入两个数的时候没有严格按照"%d,%d"的格式输入吧。 输入格式是"%d,%d"，就要按照像这样的样子输入：3,5<回车>或者5,2<回车>等，即（第一个数）（逗号）（第二个数）<回车>。

user: user-6
content: 引用 1 楼 盲侠z 的回复:int max(int x,int y);   函数声明位置应该在主函数外面 #include <stdio.h> int max(int x,int y);   int main() 这个函数声明没问题。。。。请忽略吧。。。

user: user-7
content: 一看就是自学？

user: user-8
content: scanf里面有个逗号 去掉就好了

user: user-6
content: int max(int x,int y);   函数声明位置应该在主函数外面 #include <stdio.h> int max(int x,int y);   int main()
user-0 提问: 问题:求解释。

回复:
user: user-0
content: 引用 4 楼 拥抱Linux 的回复：谢谢，懂了

user: user-0
content: 引用 2 楼 qq_38834405 的回复： 我尽力了。。我以前也看过老九的视频，很详细就是声音有点小嗯，谢谢

user: user-1
content: 请自己调试下，理解得更清楚，加几个printf不难吧

user: user-2
content: c语言的函数调用都是按值传递， 参数传递就是一个赋值操作， 在main函数中       chang(&numb); 先对实参求值，再赋值给chang函数的形参，为了方便描述，假设形参的标识符是 p (你用的是 numb)    p = &numb; 所以，   *p  = *(&numb) = numb = 'a'   引用传递的意思是 ，给变量 a 对应的内存区域 取了另外一个新名字 b,  C语言应该没有语法可以 复制引用。

user: user-3
content: 地址没有变化，因为没对指针做修改；注意*numb += 1;这条语句的操作是numb指针指向的内存里存的数据+1。而这个指针指向的对象是main函数里的numb，因此执行完change之后，其实是main函数里numb值加了1.

user: user-4
content: 指针作为形参的时候，你传递的是地址，所以函数内是直接通过这个地址对该地址存放的内容进行操作的，并不需要用return来返回a＋1后的值。在这个程序里指针numb将存放a的地址给了函数，函数根据这个地址直接对a进行操作也就是加一，字符进行加减法时相当于ascll码值加1，也就是b

user: user-5

user: user-6
content: 应该是指针没变  而是a的ASCII码值加一了

user: user-7
content: 我尽力了。。我以前也看过老九的视频，很详细就是声音有点小

user: user-8
content: 这里指针并没有变呀，只是取地址然后指针指向的地址内容变了，也就是你找到存'a'的地址，然后把'a'+1而已
user-0 提问: C语言求助！ LPWSTR类型的变量要怎么输出到文件中呢？？  

回复:
user: user-1
content: LPWSTR代表他是一个Wide字符指针 %s是输出单字节字符串用的 比如LPSTR %S就能输出LPWSTR类型了

user: user-0
content: printf("%s",LP); printf("%S",LP);  请问小s和大S分别表示输出的类型是什么。 有什么分别吗？？  我使用%S的方式就可以输出LPWSTR类型的变量。
user-0 提问: c语言

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <math.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */  int main(int argc, char *argv[]) { 	 	double rate,deposit,n,captital; 	rate=0.0225;     scanf("%lf %lf",&n,&captital); 	 	printf("n:%lf captital:%lf\n*****\n",n,captital); 	deposit=captital*pow(1+rate,n); 	printf("%lf\n" ,deposit); 	 	return 0; }

user: user-2
content: 哪里抄的代码吧，好多都是中文字符： #include <math.h> #include <stdio.h>  void main(){ double rate , deposit,n,captital; rate=0.0225; scanf("%lf,%lf" ,&n,&captital); deposit=captital*pow(1+rate,n); printf("%lf\n" ,deposit);  }  输入1,100可以显示结果。  引用 4 楼 qq_44866249 的回复:[quote=引用 2 楼 niiiloc的回复:]应该是银行复利的计算 deposit=总资产 captital=初始资产 rate=利率 n=存的年限 对 但是我输入数字之后，结果都是0.000000[/quote]

user: user-0
content: 引用 1 楼 自信男孩的回复:Try it by yourself and analyze the results.

user: user-0
content: 引用 3 楼 很黑的黑的回复:这种问题自己编译试一下就知道结果了啊 但是我输入数字之后，结果都是0.000000

user: user-0
content: 引用 2 楼 niiiloc的回复:应该是银行复利的计算 deposit=总资产 captital=初始资产 rate=利率 n=存的年限 对 但是我输入数字之后，结果都是0.000000

user: user-1
content: 这种问题自己编译试一下就知道结果了啊

user: user-2
content: 应该是银行复利的计算 deposit=总资产 captital=初始资产 rate=利率 n=存的年限

user: user-3
content: Try it by yourself and analyze the results.
user-0 提问: 求助大佬！！！

回复:
user: user-1
content: 你的第二层for循环没有终止条件,肯定会越界的啊.

user: user-2
content: for (j = i ; ; j++,i++) 这一句错误，for循环没有终止条件，相当于 while（1），程序在这里相当于死循环。 当 i 或 j 的值非常大时（因为有j++,i++）, j 大于数组的长度，就会发生访问越界。
user-0 提问: 子函数传指针为什么有的可以改变主函数里的链表结构，有的不行

回复:
user: user-1
content: 楼上的几位已经说的很明白了。

user: user-2
content: 能行的说明链表是带哨兵的，即头结点不存储有效数据，并且头结点是在main里定义和申请空间的

user: user-2
content: void create_linklist(linklist *head, int arr[],int n) 这个函数不能将新的head返回到main函数里，解决办法：使用二重指针或将head返回（定义函数的返回值类型）

user: user-3
content: 虽然这两个函数的参数都是指针类型，但通过函数内部的代码可以看到，实际上这并不是地址传递，而是「值传递」，只不过和书上讲值传递时使用的参数是基本数据类型（比如int型等）的样子不一样，而这里传递的是「指针」而已，也就是说，传递的是主函数中该指针的一个复制品而已，所以无论是第一个函数还是第二个函数，其实都没有改变过外部的主函数的实参指针本体 。  第一个函数，参数表里虽然有一个名字叫 head 的指针，但是正如上面一段所说，传入函数内的是这个指针的一个复制品而已，在这个函数内部对这个名字叫 head 的指针变量所做的任何操作都不会影响到 主函数中的实参本体 一丝一毫，除非最后提供一个返回值并赋值给主函数中的 实参本体指针变量。——也就是说，这第一个函数，参数表里完全可以不要 这个 head 指针， 就在最后 return head; ，同时在主函数里有一个链表的头指针来接受赋值就可以完成创建链表的工作。  第二个函数，传入了参数 l ， 和上面说的一样，传入的是 主函数中的实参指针本体的一个复制品；很明显， 这个复制品 和 主函数中原来的实参指针本体 都是指向 同一个 节点的嘛。 那么，函数内的代码使用 复制品 所指向的节点中的 next 指针的值，那不就是使用 主函数中的原来的实参指针本体 指向的 节点 的 next 指针 的值吗？ 因为 这就是同一个节点 的 同一个 next 指针变量 嘛！ 所以，函数内的代码能运行下去并得到想要的结果啊。  总结：函数的参数是指针类型，但是函数内部的实际操作是使用参数的值，只是值传递。

user: user-4
content: 第一个函数，你把head指针返回就行了。其实参数部分不需要传入head，只需要用返回值。然后你再实现一个释放此head链表内存空间的函数就行。  linklist* create_linklist(linklist *head, int arr[],int n){ linklist *r,*s; head=(linklist*)malloc(sizeof(linklist));   //在这一步，head被重新赋值了。 head->data = arr[0];  head->next = NULL; r = head; for(int i = 1;i < n;i++){ s=(linklist*)malloc(sizeof(linklist)); s->data = arr[i]; r->next = s; r = s; } r->next=NULL;  return  head; }

user: user-5
content: void create_linklist(linklist *head, int arr[],int n)  这个函数声明，你能修改head指针指向的内容，但不能修改head指针本身。 你的函数内部实现希望修改head指针本身，那就用二级指针来做。  void create_linklist(linklist **head, int arr[],int n) *head=(linklist*)malloc(sizeof(linklist));
user-0 提问: 求教大佬们这题怎么做，谢谢！

回复:
user: user-1
content: 这图截的也得看的清楚才行

user: user-2
content: 贴的图片至少自己要能看清才行呢

user: user-0
content: 引用 2 楼 zhouqunhai的回复:这图截的也得看的清楚才行 尴尬，没注意，第一次用博客，不太会

user: user-0
content: 引用 1 楼 自信男孩的回复:贴的图片至少自己要能看清才行呢 尴尬，哈哈，没注意
user-0 提问: 对于ASCLL码和键盘码的区别，我的理解对吗？

回复:
user: user-1
content: 引用 5 楼 六道佩恩 的回复:[quote=引用 3 楼 stherix 的回复:] [quote=引用 2 楼 六道佩恩 的回复:] [quote=引用 1 楼 stherix 的回复:] 差不多吧 键盘码代表你按下了键盘上哪一个键 ASCII则是计算机内的文字符号代码 这两者也没有一一对应 比如ASCII里面没有alt 而键盘上有可能要按几个键才能代表一个ASCII, 就像shift+a = A 那键盘码和键盘扫描码有区别吗？[/quote]  扫描码(ScanCode)是键盘硬件产生的,通过PS/2,USB/蓝牙等传给电脑,不同的键盘可能还多出来不少特定的功能键 这些在键盘码(KeyCode)里可能都没有[/quote] 那扫描码和键盘码的关系是？[/quote] 具体我也说不清 应该键盘扫描码是键盘按键产生的,键盘码则是操作系统为这个键位定的代码  然后ASCII其实是文本的编码,不一定要键盘,无论手写还是语音一样能产生ASCII编码的文本

user: user-0
content: 引用 3 楼 stherix 的回复:[quote=引用 2 楼 六道佩恩 的回复:] [quote=引用 1 楼 stherix 的回复:] 差不多吧 键盘码代表你按下了键盘上哪一个键 ASCII则是计算机内的文字符号代码 这两者也没有一一对应 比如ASCII里面没有alt 而键盘上有可能要按几个键才能代表一个ASCII, 就像shift+a = A 那键盘码和键盘扫描码有区别吗？[/quote]  扫描码(ScanCode)是键盘硬件产生的,通过PS/2,USB/蓝牙等传给电脑,不同的键盘可能还多出来不少特定的功能键 这些在键盘码(KeyCode)里可能都没有[/quote] 那扫描码和键盘码的关系是？

user: user-2
content: 可以这么理解，键盘码是输入，ASCII码是输入后的转换，最终计算机处理的是一个个ASCII码

user: user-1
content: 引用 2 楼 六道佩恩 的回复:[quote=引用 1 楼 stherix 的回复:] 差不多吧 键盘码代表你按下了键盘上哪一个键 ASCII则是计算机内的文字符号代码 这两者也没有一一对应 比如ASCII里面没有alt 而键盘上有可能要按几个键才能代表一个ASCII, 就像shift+a = A 那键盘码和键盘扫描码有区别吗？[/quote]  扫描码(ScanCode)是键盘硬件产生的,通过PS/2,USB/蓝牙等传给电脑,不同的键盘可能还多出来不少特定的功能键 这些在键盘码(KeyCode)里可能都没有

user: user-0
content: 引用 1 楼 stherix 的回复:差不多吧 键盘码代表你按下了键盘上哪一个键 ASCII则是计算机内的文字符号代码 这两者也没有一一对应 比如ASCII里面没有alt 而键盘上有可能要按几个键才能代表一个ASCII, 就像shift+a = A 那键盘码和键盘扫描码有区别吗？

user: user-1
content: 差不多吧 键盘码代表你按下了键盘上哪一个键 ASCII则是计算机内的文字符号代码 这两者也没有一一对应 比如ASCII里面没有alt 而键盘上有可能要按几个键才能代表一个ASCII, 就像shift+a = A
user-0 提问: 关于ARP欺骗我有几个疑问

回复:
user: user-1
content: 1.不管是主机还是网关，静态绑定其它节点的ip mac，就是防止被其它节点欺骗，这不能理解？主机绑定其它机器或者网关的ip mac，就是防止被其它主机或者假网关欺骗，网关同理。 2.路由器就是网关，从问题1就可以看出，可以欺骗，只是谁欺骗谁的问题。不同子网间通信，数据帧里目的mac和源mac会陆续改为前进中的路由器的mac，而数据报文目的ip不变，就是你说的路由器转发会改mac。A骗B，B骗C。。。一个骗一个，骗子网络。 3. 可以修改数据帧 https://blog.csdn.net/qq_16555743/article/details/72652377

user: user-1
content: 1.静态绑定的项不会动态更新。 2.看不懂在问什么 3.欺骗手断有多种，都有可能，总之都可以达到欺骗的目的。

user: user-0
content: 引用 3 楼 user-1 的回复:1.静态绑定的项不会动态更新。 2.看不懂在问什么 3.欺骗手断有多种，都有可能，总之都可以达到欺骗的目的。 静态绑定是绑定主机的arp表以防被改啊，但我看到有些文章说静态修改网关（路由器）上的ARP表也可以实现防止欺骗，我想问为什么可以；经路由器转发的包会修改mac，如果局域网的主机都直连路由器，那么是不是就没法实现arp欺骗了（毕竟mac都变了怎么欺骗）；第三个问题是，arp欺骗包发出的数据中的ip地址和mac是错误的，但IP地址是网络层加进去的，mac地址是数据链路层加进去的，我们的C编程平常用的socket，属于会话层或应用层，所以这些修改ip包和mac包是如何做到的，是有相关的API还是先把自己的IP和MAC改了，等生成好了包发出去后再改回来以此实现的？

user: user-1
content: 不管是主机还是路由器，本身网卡有一固化即相对而言不能改的mac地址，能改的只是系统层面的mac地址；还有一个可动态更新的高速mac缓存，存放的其它节点的ip、mac地址映射表；mac缓存里的条目会定期动态更新，或主动或被动，静态绑定项可不被动态更新而已。arp协议一般是广播协议：请求时是我的ip和mac地址是XXX和XXX，我想知道ip为XXX的节点的mac地址；其它节点收到后会将源ip和mac更新到自己的缓存，同时如果发现目标ip跟自己一样，就作应答，否则就不应答。A发arp请求到B，A是主动，B是被动，请求与应答，达到双向更新对方的ip mac的目的。 我要欺骗你，我就给你发一个arp请求，报告给你别人的ip和我的mac。如果你更新进了你的arp缓存，当你和别人的ip通信时，就会把数据包发到我这里来。

user: user-0
content: 引用 1 楼 user-1 的回复:不管是主机还是路由器，本身网卡有一固化即相对而言不能改的mac地址，能改的只是系统层面的mac地址；还有一个可动态更新的高速mac缓存，存放的其它节点的ip、mac地址映射表；mac缓存里的条目会定期动态更新，或主动或被动，静态绑定项可不被动态更新而已。arp协议一般是广播协议：请求时是我的ip和mac地址是XXX和XXX，我想知道ip为XXX的节点的mac地址；其它节点收到后会将源ip和mac更新到自己的缓存，同时如果发现目标ip跟自己一样，就作应答，否则就不应答。A发arp请求到B，A是主动，B是被动，请求与应答，达到双向更新对方的ip mac的目的。 我要欺骗你，我就给你发一个arp请求，报告给你别人的ip和我的mac。如果你更新进了你的arp缓存，当你和别人的ip通信时，就会把数据包发到我这里来。 额，老哥，你这只是解释了ARP的过程，我都知道的，并没有回答我的问题啊
user-0 提问: c初学者求助这个为什么有逻辑错误

回复:
user: user-0
content: 这个问题我自己已经解决了-原来头文件里面没有先声明函数

user: user-0
content: 引用 1 楼 niiiloc 的回复：请描述下具体错误的表现，啥叫逻辑错误？因为我现在上晚修，没带电脑，所以输出的数据记不清楚

user: user-0
content: 引用 1 楼 niiiloc 的回复：请描述下具体错误的表现，啥叫逻辑错误？就是程序能正常运行不报错 但是输出结果不在预期 且不论输入什么数组 输出结果一致 结果是一个比较大的（可能超过了百万，记不太清楚）保留六位小数且小数位都为零的负数

user: user-1
content: 请描述下具体错误的表现，啥叫逻辑错误？
user-0 提问: First-chance exception in train.exe: 0xC0000005: Access Violation.的问题

回复:
user: user-0
content: 引用 1 楼 niiiloc 的回复：都调试到这个地步了，不太理解为何还发现不了问题。 倒数第二个printf，格式化输出是%d %s %s %s %d %d  6个参数，你后面带的只有5个参数。  还有你的代码风格太差了，分隔符后不能加个空格么？你自己这样看代码眼睛不疼么？谢谢

user: user-1
content: 都调试到这个地步了，不太理解为何还发现不了问题。 倒数第二个printf，格式化输出是%d %s %s %s %d %d  6个参数，你后面带的只有5个参数。  还有你的代码风格太差了，分隔符后不能加个空格么？你自己这样看代码眼睛不疼么？

user: user-2
content: 第四个printf少一个对应值，前面%d和%s加起来是6个，而参数个数确实5个，可以根据你的想法检查一下这个部分。
user-0 提问: 结构体问题

回复:
user: user-0
content: 引用 2 楼 @风轻云淡_的回复:你缺的或许只是一个typedef

user: user-0
content: 引用 1 楼 自信男孩的回复:*Uio是一个变量，是一个结构体指针变量，op也是一个结构体变量（和Uio区别就在它是一个普通变量）。因此op不是一个结构体类型的辨明，因此op *Uio;这样定义是非法的。  若第二个结构体加上typedef，那就可以op *Uio;定义了，并且和上面Uio指向的结构体一样了（我描述的结构体一样是指结构体成员个数和成员名一样，并不是两个相同的结构体，结构体是否一样还要看结构名是否一样）。 谢谢，我懂了，

user: user-1
content: 你缺的或许只是一个typedef

user: user-2
content: *Uio是一个变量，是一个结构体指针变量，op也是一个结构体变量（和Uio区别就在它是一个普通变量）。因此op不是一个结构体类型的辨明，因此op *Uio;这样定义是非法的。  若第二个结构体加上typedef，那就可以op *Uio;定义了，并且和上面Uio指向的结构体一样了（我描述的结构体一样是指结构体成员个数和成员名一样，并不是两个相同的结构体，结构体是否一样还要看结构名是否一样）。
user-0 提问: 程序已退出，返回值为0

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 我也是 为什么呀QAQ

user: user-3
content: ...这算什么问题... 先熟悉自己的IDE吧，工欲善其事必先利其器，你们都还处于熟悉工具的过程 简单来说，F5就是把你的 exe 放在一个控制台（consle）里执行，就是 windows cmd 里面，你贴的图，就表示程序执行完了，返回值为0。因为这个控制台窗口在程序执行完后就关闭，所以如果你想要不关闭，就在代码 return 之前，加上   system("pause"); return 0;

user: user-4
content: 我遇到了和你一样的情况，Ctrl+F5就不会有问题，点执行就会有问题，想知道原因！

user: user-5
content: 引用 4 楼 qq_41769510的回复:[quote=引用 2 楼 qq_38834405的回复:]你是不是按f5开始编译的 ，我直接点执行的，(눈_눈)[/quote] return 0就是运行到头了，但是逻辑有没有问题，结果是不是你预期想的就不一定了

user: user-0
content: 引用 2 楼 qq_38834405的回复:你是不是按f5开始编译的 ，我直接点执行的，(눈_눈)

user: user-0
content: 引用 1 楼 user-6的回复:把代码贴出来 国二的，只记得问题了_(:з」∠)_

user: user-5
content: 你是不是按f5开始编译的

user: user-6
content: 把代码贴出来

user: user-0
content: 引用 5 楼 qq_38834405的回复:[quote=引用 4 楼 qq_41769510的回复:][quote=引用 2 楼 qq_38834405的回复:]你是不是按f5开始编译的 ，我直接点执行的，(눈_눈)[/quote] return 0就是运行到头了，但是逻辑有没有问题，结果是不是你预期想的就不一定了[/quote] 好吧(눈_눈)，谢啦
user-0 提问: 哪位大神可以指导下吗，C语言新手小白

回复:
user: user-1
content: 建议这些定义一个头文件，将函数声明放到头文件里。函数名前的extern可以不加。另外，函数声明建议放到main函数之外和之上。

user: user-2
content: 需要加上对应的头文件，在你静态的方法上面

user: user-3
content: 定义和生命函数时，参数是个数组，调用时参数却是地址。把生命里面数组改成个指针试下
user-0 提问: 大哥们，帮我看下这个程序为啥跑不起来...

回复:
user: user-1
content: while(lenc<=lena||lenc<=lenb); 这个其实是一个死循环了，去掉while的分号，继续看看是否是你的想要的结果。  c[lenc]=a[lenc]+b[lenb]+x; 注意这条语句中 b的下表都是lenb,是否符合你的要求呢

user: user-2
content: while括号后面多了一个分号，所以后面的{}不是它循环体了。它的判定条件一直为真，就会死循环

user: user-2
content: 你的while的括号那多了一个分号
user-0 提问: 关于递增的疑问，求各位大神解答。

回复:
user: user-1
content: 是从1开始的呢，因为初始化的x为1。

user: user-0
content: 引用 3 楼 coo135的回复:y = (++x*5) + 50是在printf("% 10d % 10d\n", x, y);之后才执行的……所以第一次是 1  55 懂了懂了，谢谢你

user: user-0
content: 引用 2 楼 儿童节的回复:你上面的代码，y的表达式里少打了一个x，怪不得看着那么奇怪。  #include <stdio.h> int main(void) { 	int x; 	int y = 55;  	for (x = 1; y <= 75; y = (++x*5) + 50) 		printf("% 10d % 10d\n", x, y); 	return 0; }   for 循环的圆括号里面的第 3 个表达式是，当每一次循环的时候，等循环体（花括号里面）里的语句全部都执行完了之后，才去执行。  所以你的疑问 和 自增运算符的关系不大，跟 for 的圆括号 里的语句的执行时机 有直接关系。 嗯嗯，懂了懂了，谢谢你

user: user-0
content: 引用 1 楼 Jake_q的回复:先弄明白for循环:第一次先执行第一个分号前的，然后执行第二个分号前的条件判定语句，然后再执行循环体，执行玩循环体，再执行第二个分号后面的第三句的内容，然后又到执行判定语句，如果真再进入循环体。所以第一次的时候就是从1开始的，执行完一遍循环体才会执行++的那一句。    PS:C Primer Plus这本书挺不错的。 噢~懂了懂了，谢谢你。

user: user-2
content: y = (++x*5) + 50是在printf("% 10d % 10d\n", x, y);之后才执行的……所以第一次是 1  55

user: user-3
content: 你上面的代码，y的表达式里少打了一个x，怪不得看着那么奇怪。  #include <stdio.h> int main(void) { 	int x; 	int y = 55;  	for (x = 1; y <= 75; y = (++x*5) + 50) 		printf("% 10d % 10d\n", x, y); 	return 0; }   for 循环的圆括号里面的第 3 个表达式是，当每一次循环的时候，等循环体（花括号里面）里的语句全部都执行完了之后，才去执行。  所以你的疑问 和 自增运算符的关系不大，跟 for 的圆括号 里的语句的执行时机 有直接关系。

user: user-4
content: 先弄明白for循环:第一次先执行第一个分号前的，然后执行第二个分号前的条件判定语句，然后再执行循环体，执行玩循环体，再执行第二个分号后面的第三句的内容，然后又到执行判定语句，如果真再进入循环体。所以第一次的时候就是从1开始的，执行完一遍循环体才会执行++的那一句。    PS:C Primer Plus这本书挺不错的。
user-0 提问: sift算法特征提取识别海洋溢油！

回复:
user: user-0
content: 可以的话希望能加qq教一下，谢谢437083697

user: user-1
content: 色差或者说轮廓明显吗？

user: user-0
content: 站个1lou 哥哥们，救救我
user-0 提问: PAT提交编译错误

回复:
user: user-0
content: 引用 6 楼 自信男孩的回复:[quote=引用 5 楼 Martin Morning 的回复:] [quote=引用 4 楼 自信男孩的回复:]char st[30];     char s[10][10];     //itoa(sum,st,10);     snprintf(st, 30, "%d", sum);     char *p=st;i=0;  itoa不支持，需要自己写这个函数功能，可以使用snprintf或sprintf代替。如上 谢谢老哥，基本通过了。不过不知道为啥有个运行时错误[/quote] 什么错误？[/quote] 我也不知道啊。我在PAT官网上上刷题，好多题提交后大部分测试点都能通过，一两个会提示 运行时错误。

user: user-1
content: 引用 5 楼 Martin Morning 的回复:[quote=引用 4 楼 自信男孩的回复:]char st[30];     char s[10][10];     //itoa(sum,st,10);     snprintf(st, 30, "%d", sum);     char *p=st;i=0;  itoa不支持，需要自己写这个函数功能，可以使用snprintf或sprintf代替。如上 谢谢老哥，基本通过了。不过不知道为啥有个运行时错误[/quote] 什么错误？

user: user-0
content: 引用 4 楼 自信男孩的回复:char st[30];     char s[10][10];     //itoa(sum,st,10);     snprintf(st, 30, "%d", sum);     char *p=st;i=0;  itoa不支持，需要自己写这个函数功能，可以使用snprintf或sprintf代替。如上 谢谢老哥，基本通过了。不过不知道为啥有个运行时错误

user: user-1
content: char st[30];     char s[10][10];     //itoa(sum,st,10);     snprintf(st, 30, "%d", sum);     char *p=st;i=0;  itoa不支持，需要自己写这个函数功能，可以使用snprintf或sprintf代替。如上

user: user-2
content: 你把itoa()注释掉看看能不能编译。。。

user: user-0
content: 引用 1 楼 user-2的回复:n 小于 10的100次方，数组元素需要100个~~  然后你提交时，编译器选C++。 还是编译错误。。和数组应该没关系，编译软件可以运行。估计是环境的原因

user: user-2
content: n 小于 10的100次方，数组元素需要100个~~  然后你提交时，编译器选C++。
user-0 提问: c语言生成随机数偏小？

回复:
user: user-0
content: 局部变量，全局变量，静态变量这些，没怎么学明白，我回去再看看

user: user-0
content: 引用 3 楼 lin5161678的回复:假设RAND_MAX是32767 0-13 这14个数字出现的时候 小于 4/10000 几率是14/32767 你运行100*100000 结果是14/32767*100*100000 == 4272.59 结果是 4200~4300 完全正常 对对对，好像是这样，一直没找明白，想问下有没有什么好的随机数生成方法，生成这种特别小的小数的，谢谢啦

user: user-0
content: 引用 2 楼 user-3的回复:将计数的那个循环拿到j的循环外面来，你这个代码风格有点难看出是不是放错地方了，建议行与行之间不要空行 这个复制出来以后格式乱了，谢谢建议

user: user-1
content: double a[100000]={0}; 这条语句定义的局部变量，建议加上static变成静态变量。因为栈上空间是有限的，而这个条语句申请的栈上空间是很大的。100000 * 8 Bytes

user: user-2
content: 假设RAND_MAX是32767 0-13 这14个数字出现的时候 小于 4/10000 几率是14/32767 你运行100*100000 结果是14/32767*100*100000 == 4272.59 结果是 4200~4300 完全正常

user: user-3
content: 将计数的那个循环拿到j的循环外面来，你这个代码风格有点难看出是不是放错地方了，建议行与行之间不要空行

user: user-3
content: 你嵌套循环了，所以所有数字的个数都乘以100了，原本40就变成4000了
user-0 提问: 单链表的插入和删除

回复:
user: user-0
content: 能实现了，感谢指教，感谢感谢

user: user-1
content: 你的算法有问题~~~给你改了一下~~水平有限   #include<stdio.h> #include<stdlib.h> #include<malloc.h> struct A { 	char sun; 	struct  A *next; }; char n; int num=0; struct A *creat() { 	struct A *p1,*p2,*h; 	char ch_t; 	p1=p2=(struct A*)malloc(sizeof(struct A)); 	printf("请输入字符串以enter结束：\n"); 	p1->sun=getchar(); 	p1->next=NULL; 	h=p1; 	num=1;  //num是用来统计节点个数的吧…… 	; 	while((ch_t=getchar())!='\n') { 		p2=p1; 		p1=(struct A*)malloc(sizeof(struct A)); 		p1->sun=ch_t; 		p1->next=NULL; 		p2->next=p1; 		num++; 	} 	printf("输入完成！\n"); 	return h; }  //打印链表中的每个节点。 int list(struct A *p) { 	if(!p) { 		printf("字母链表为空！\n"); 		return 0; 	}  	printf("字母序列为：\n"); 	while(p) { 		printf("%c ",p->sun); 		p=p->next; 	} 	printf("\n"); 	return 1; }   int reseach(struct A *p) { 	printf("输入一个字符:\n"); 	scanf("%c",&n); 	int pos=1; //寻找链表中是否有等于n的节点。找到返回位置，未找到返回0； 	while(p) { 		if(p->sun==n) break; 		p=p->next; 		pos++; 	} 	if(p) return pos; 	else return 0; }  struct A* deletes(struct A *p) { 	struct A *s,*h;// 	h=p;//不带头结点的链表，如果删除头结点，需要返回新的头结点地址 。 	if(p->sun==n) { 		h=p->next; 		free(p); 	} else { 		while(p) { 			if(p->next->sun==n) {  // 删除相应节点。 				s=p->next; 				p->next=p->next->next; 				free(s); 				break; 			} 			p=p->next; 		} 	}  	printf("删除后的数组为:\n"); 	list(h); 	return h; }  //不带头结点的链表，如果插入在头结点前，需要返回新的头结点地址 。  //你好像 就插在尾部就可以了是吧~~ struct A * insert(struct A *p,int pos) { 	struct A *s,*h; 	s=p;  	h=(struct A*)malloc(sizeof(struct A)); 	printf("请输入要插入的元素:"); 	do { 		h->sun=getchar(); 	} while(h->sun=='\n');  	if (pos==0) { //插在链表头 		h->next=s; 		p=h; 	} else {	//定位到要插入的位置pos 		while((--pos>0)&&s->next!=NULL) { 			s=s->next; 		} 		h->next=s->next; 		s->next=h; 	}  	printf("\n插入后的数组"); 	list(p); 	return p; }  void destroy(struct A *p) { 	struct A *t; 	while(p) { 		t=p->next; 		free(p); 		p=t; 	} }  int main() { 	struct A *head; 	head=creat(); 	list(head); 	int b; 	b=reseach(head); 	if(b) { 		head = deletes(head); 	} else { 		//insert(head，num)用法  num：插在链表第num个元素之后  		printf("链表未找到元素：%c\n",n) ; 		head=insert(head,num); 	} 	//删除链表 	destroy(head) ;  	return 0; }

user: user-0
content: 确实是一个原因。可是后面不管输入什么都是执行插入，而且插入之后为什么输出的是乱码呀？？？？

user: user-1
content: main （）中的      if(b=1)   写错了吧，应是    if(b==1) 吧~
user-0 提问: 请教大神四道题

回复:
user: user-1
content: 第三题  #include <stdio.h> #include <stdlib.h>  int main() {     int a,max=0,i;     for(i=0;i<4;i++){         scanf("%d",&a);         max = max>a?max:a;     }     printf("%d",max);     return 0; }

user: user-1
content: 第二题  #include <stdio.h> #include <stdlib.h>  int main() {     int i,sum=0;     for(i=1;i<=50;i++){         sum+=i*(i+1);     }     printf("%d",sum);     return 0; }

user: user-1
content: 第一题  #include <stdio.h> #include <stdlib.h>  int main() {     int i,a[10];     double sum=0;     for(i=0;i<10;i++){         scanf("%d",&a[i]);         sum+=a[i];     }     printf("%.2f",sum/10);     return 0; }
user-0 提问: c语言新手问题，求大佬看看

回复:
user: user-0
content: 引用 1 楼 盲侠z 的回复:求个位数字的错了吧，，应该是 g=x%10; 谢谢！g=(x-b*100-s*10);这样就对了

user: user-0
content: 求大佬解答！！！

user: user-1
content: 求个位数字的错了吧，，应该是 g=x%10;
user-0 提问: C 读取文件数据

回复:
user: user-1
content: fscanf/fprintf, fread/fwrite，fgets/fputs等这些是文件的读写接口，并且是成对出现的，因此怎么写入的，就要考虑用对应的读去操作。

user: user-2
content: 记得把//    input_stu();   前面的//去掉~~~

user: user-2
content: 方法有点笨，供参考。   #include <stdio.h> #include <stdlib.h> #include <string.h>  typedef struct _stu { 	char id[12]; 	char name[20]; 	float math; 	float english; 	float physics; } student;  int input_stu() { 	student stu[5]; 	FILE * out=fopen("s.txt","w"); 	if(!out) { 		printf("打开文件失败。\n"); 		return 1; 	} 	for(int i=0; i<5; i++) { 		printf("\n输入第 %d 位学生：\n",i+1) ; 		printf("学    号:"); 		scanf("%s",&stu[i].id); 		printf("姓    名:"); 		scanf("%s",&stu[i].name); 		printf("数学成绩:"); 		scanf("%f",&stu[i].math); 		printf("英语成绩:"); 		scanf("%f",&stu[i].english); 		printf("物理成绩:"); 		scanf("%f",&stu[i].physics); 		fprintf(out,"%s %s %.2f %.2f %.2f\n",stu[i].id, 		        stu[i].name,stu[i].math,stu[i].english,stu[i].physics); 	} 	printf("信息保存成功。\n\n") ; 	fclose(out); 	return 0; }  int read_stu(student* stu) { 	FILE* in=fopen("s.txt","r"); 	if(!in) { 		printf("打开文件失败。\n"); 		return 1; 	} 	printf("从文件中读取的成绩如下：\n"); 	printf("学号   姓名    数学成绩    英语成绩    物理成绩  \n"); 	for(int i=0; i<5; i++) { 		fscanf(in,"%s %s %f %f %f",(stu+i)->id, 		       (stu+i)->name,&(stu+i)->math,&(stu+i)->english,&(stu+i)->physics); 		printf("%s    %s    %4.2f       %4.2f      %4.2f    %4.2f\n",stu[i].id, 		       stu[i].name,stu[i].math,stu[i].english,stu[i].physics); 	} 	fclose(in); 	return 0; }  int sort(student* stu) { 	student tmp; 	float t; 	float count[5]; 	for(int i=0; i<5; i++) { 		count[i]=stu[i].math+stu[i].english+stu[i].physics; 	} 	int  max=0; 	for(int i=0; i<5; i++) { 		max=i; 		for(int j=i+1; j<5; j++) { 			if(count[j]>count[max]) max=j; 		} 		if(max!=i) { 			t=count[i]; 			count[i]=count[max]; 			count[max]=t; 		 			memcpy(&tmp,&stu[i],sizeof(student)); 			memcpy(&stu[i],&stu[max],sizeof(student)); 			memcpy(&stu[max],&tmp,sizeof(student)); 		} 	} 	return 0; }  int main() { 	student stu[5]; //	input_stu();//输入信息，然后保存的文件。  	read_stu(stu);//从文件中读取信息  	sort(stu);//排序输出  	printf("\n排序后的成绩如下：\n"); 	printf("学号   姓名    数学成绩    英语成绩    物理成绩   总成绩\n"); 	for(int i=0; i<5; i++) { 		printf("%s    %s    %4.2f       %4.2f      %4.2f    %4.2f\n",stu[i].id, 		       stu[i].name,stu[i].math,stu[i].english,stu[i].physics, 		       stu[i].math+stu[i].english+stu[i].physics); 	       }  }
user-0 提问: 学完c之后应该学什么

回复:
user: user-1
content: 看你想做的是什么类型的程序/项目，各有最合适的语言。

user: user-2
content: 学习程序语言没有必要把一本书从头学到尾才才开始做些事，什么是基本的东西也是比较抽象的。可以自己着手做些简单的事，如果无法入手，起码要了解需要哪些知识，然后针对性地去学习这些知识，一个个突破，不要怕出现问题，你会在解决问题中学会很多东西，而且印象深刻，容易牢记。

user: user-0
content: 引用 1 楼 user-2的回复:学习C++比较好。当然没有必要 把C++全部学会，学一些比较基础的东西，如果工作需要，可以根据工作需要再继续深入学习。有了C/C++ 知识，学习其他程序语言会容易许多。 了解了解，谢谢了

user: user-2
content: 不过，有了C/C++知识后，可能会很看不上其他程序语言了

user: user-2
content: 学习C++比较好。当然没有必要 把C++全部学会，学一些比较基础的东西，如果工作需要，可以根据工作需要再继续深入学习。有了C/C++ 知识，学习其他程序语言会容易许多。
user-0 提问: C语言计算无论输入什么数，得到的结果都相同，求解，不知道问题出在哪儿

回复:
user: user-1
content: 楼上说对了。你打印的有问题，应该去掉&符号。

user: user-2
content: 注意printf中，去掉&t前的&。我想你是想输出t的值，而非t的地址。

user: user-3
content: 这里可以下载一些关于编程的书籍，推荐给你吧https://mp.weixin.qq.com/s/fsvKzaeVsQUVoPhM1mUezQ

user: user-3
content: 建议你看一下c语言操作符，位运算符   ^是位运算操作符（针对二进制位进行运算），不是通常所说的幂运算符

user: user-0
content: 引用 1 楼 user-3 的回复:c语言里平方你可以加#include<math.h>头文件，用函数pow(x,y)表示x^y,或者你直接写成x * x也行，你再试一下  嗯……我试了，为什么在C语言里用n^2和n*n得到的结果不同n呢? 而且有时候计算明明公式没错总是出现一些特别大的数，比如

user: user-3
content: ^表示的是按位异或操作

user: user-3
content: c语言里平方你可以加#include<math.h>头文件，用函数pow(x,y)表示x^y,或者你直接写成x * x也行，你再试一下
user-0 提问: 统计中文词语词频

回复:
user: user-1
content: 引用 楼主 weixin_44796503的回复:我想用c语言统计文件中的中文词语词频，有没有大佬有好方法让小弟借鉴 建议Python

user: user-0
content: 引用 1 楼 user-1 的回复：[quote=引用 楼主 weixin_44796503的回复:]我想用c语言统计文件中的中文词语词频，有没有大佬有好方法让小弟借鉴 建议Python[/quote]小弟正在学c/c++所以希望用c语言实现
user-0 提问: c语言中字符变量赋值问题

回复:
user: user-1
content: 我回答一下第一个问题，比方说c语言中char类型一般是一个字节，系统只会查看后8位，所以p是d；

user: user-2
content: p是字符变量不是字符串指针或数组。因此char p = 'abcd';这样赋值是有问题的，''是表示一个字符，既然是问题的赋值操作，结果可能是未定义的。

user: user-3
content: char类型理论上也是int类型，因为接受的是ASCII码，char a ='abc'， 就是在反复把一个int的值(97,98,99)赋给a，只会警告你，但是不算语法错误

user: user-0
content: 引用 3 楼 秦帅的回复:这道题多处错误，字符串应该用“  ”，字符用单引号，双引号框起来的字符串代表地址， 定义的p是一个字符变量，就是单引号里边本应该只有一个字符，但是放了多个字符也可以编译运行通过，自动取最后一个字符给了p

user: user-0
content: 引用 2 楼 user-5的回复:1.%c是字符输出 2.''这种符号是单个字符，a,b,c,d,e都算一个字符，但是如果连在一起，就是字符串，附值应该是用char *p或者是char p[5] 为什么单引号里边放了多个字符也可以编译通过，然后把最后一个字符赋值给字符变量p

user: user-4
content: 这道题多处错误，字符串应该用“  ”，字符用单引号，双引号框起来的字符串代表地址，

user: user-5
content: 1.%c是字符输出 2.''这种符号是单个字符，a,b,c,d,e都算一个字符，但是如果连在一起，就是字符串，附值应该是用char *p或者是char p[5]

user: user-0
content: 有大神解释下吗，今天突然碰到这个类型题
user-0 提问: 求这个顺序表的问题所在，我要疯了，写了3天了

回复:
user: user-0
content: 可以了可以了，谢谢大佬谢谢大佬。

user: user-0
content: 。。。不行啊

user: user-0
content: 不行啊大哥，出现debug了。还有指针空了是什么意思。。。

user: user-1
content: 楼主，你指针指空了~~~  main（）中修改如下：  SqList t,*T;        //SqList * psq; T=&t; if(InitList(T)==ERROR)  大问题解决了，接下去就是算法的问题了。 好像很多函数都有点小问题，相信楼主自己能解决的了。  楼主加油！
user-0 提问: 判断素数输出因子

回复:
user: user-0
content: 怎么做呢

user: user-0
content: 任意输入一个数将它分解为三个正整数且个位不为2

user: user-0
content: 引用 3 楼 user-1的回复:[quote=引用 2 楼 weixin_44854092 的回复:] [quote=引用 1 楼 user-1的回复:]这道题讲了如何求素数因子的两种方法，可以参考哈：https://blog.csdn.net/pyuxing/article/details/88848202 会判断但是不会输出它的因子，要求：输入9输出:9的因子有1，3，9，不是素数 输入11输出：11的因子有1，11，是输出[/quote] 这两种方法里都是有输出因子的，如果输出有格式要求的话，可以将因此存入数组，然后再统一最后输出也可以的。[/quote] 谢谢了

user: user-1
content: 引用 2 楼 weixin_44854092 的回复:[quote=引用 1 楼 user-1的回复:]这道题讲了如何求素数因子的两种方法，可以参考哈：https://blog.csdn.net/pyuxing/article/details/88848202 会判断但是不会输出它的因子，要求：输入9输出:9的因子有1，3，9，不是素数 输入11输出：11的因子有1，11，是输出[/quote] 这两种方法里都是有输出因子的，如果输出有格式要求的话，可以将因此存入数组，然后再统一最后输出也可以的。

user: user-0
content: 引用 1 楼 user-1的回复:这道题讲了如何求素数因子的两种方法，可以参考哈：https://blog.csdn.net/pyuxing/article/details/88848202 会判断但是不会输出它的因子，要求：输入9输出:9的因子有1，3，9，不是素数 输入11输出：11的因子有1，11，是输出

user: user-1
content: 这道题讲了如何求素数因子的两种方法，可以参考哈：https://blog.csdn.net/pyuxing/article/details/88848202
user-0 提问: C语言菜鸟求助

回复:
user: user-0
content: 引用 5 楼 puthon 的回复:在调用这部分的时候你应该先要判断一下，就是保证输入的是非0, 0。 即if(a!=0 && n!=0)再进下面的代码段，防止数组越界c[i] = a+ b;i++;k++ if 并不能实现循环输入   这里我刚看到了是while 循环条件逻辑出了问题，假如是a != 0 && b != 0那么a和b中的其中一个取0的时候也会跳出循环  改成!(a ==0 && b==0) 就没问题了。  谢谢你的热心回复    另外咋点哪儿给分鸭 =  =

user: user-1
content: 在调用这部分的时候你应该先要判断一下，就是保证输入的是非0, 0。 即if(a!=0 && n!=0)再进下面的代码段，防止数组越界c[i] = a+ b;i++;k++

user: user-0
content: 引用 3 楼 puthon 的回复:这里应该是局部变量j来遍历：printf("%d\n",c[j]); 看到了  但是我好像while这儿的条件还是有问题

user: user-1
content: 这里应该是局部变量j来遍历：printf("%d\n",c[j]);

user: user-2
content: 第13行，c[k]改为c[j]

user: user-3
content: for(j = 0;j < k;j++) 	{ 		printf("%d\n",c[   j   ]); /// 这里 k -> j  	}
user-0 提问: C语言进制转化

回复:
user: user-1
content: 进制转换用递归可能更加好办一点，因为符合人的思维

user: user-2
content: 关于void main()可以参考这里http://www.stroustrup.com/bs_faq2.html#void-main

user: user-2
content: static bs=0; 要声明一下变量类型，比如static int bs=0; 同时建议main函数返回值最好不用void c++实现十六进制的转换https://blog.csdn.net/pyuxing/article/details/88847810，关于stl的使用不能再舒服了，
user-0 提问: 请问在数据结构中，顺序表中插入元素时空间已满增加新的分配时返回地址给newbase为什么定义成ElemType型不是SqList型

回复:
user: user-0
content: 引用 1 楼 user-1 的回复://?为什么是ElemType不能是SqList?  SqList是用来记录顺序表的具体位置、长度、大小。 具体是用一个数组来实现的 ：  (*L).elem=(ElemType*)malloc((LIST_INIT_SIZE)*sizeof(ElemType)); 元素的类型在SqList中写明了，是ElemType。  //(*vi)什么意思(ElemType*)什么意思// 函数指针    参数类型 具体请百度：函数指针   //?为什么是ElemType不能是SqList? 你这顺序表是按照ElemType类型建的~~~ 谢谢，明白了，非常感谢！

user: user-1
content: //?为什么是ElemType不能是SqList?  SqList是用来记录顺序表的具体位置、长度、大小。 具体是用一个数组来实现的 ：  (*L).elem=(ElemType*)malloc((LIST_INIT_SIZE)*sizeof(ElemType)); 元素的类型在SqList中写明了，是ElemType。  //(*vi)什么意思(ElemType*)什么意思// 函数指针    参数类型 具体请百度：函数指针   //?为什么是ElemType不能是SqList? 你这顺序表是按照ElemType类型建的~~~
user-0 提问: 求大神解答！！！

回复:
user: user-0
content: 加上# include <stdbool.h>,之后依然会报错

user: user-1
content: 加个 #include "stdafx.h"

user: user-2
content: 少头文件#include <stdbool.h>，错误提示找不到bool类型

user: user-3
content: return false  后面 在加一个 return  true;  或者 false 错误原因   ： 你的函数  只有局部返回值
user-0 提问: 如何实现获取鼠标按下左键的坐标？

回复:
user: user-1
content: 用c语言需要获取鼠标的句柄，然后对鼠标的操作进行判断  HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE); // 获取标准输入设备句柄 INPUT_RECORD inRec; DWORD res; ReadConsoleInput(hInput, &inRec, 1, &res); if (inRec.EventType == MOUSE_EVENT && inRec.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED) //鼠标左键  大概基本操作就这样吧，你也可以查一下win32api的书籍
user-0 提问: *（w+1）[2]与*（（w+1）[2]）的区别

回复:
user: user-0
content: 引用 9 楼 lin5161678的回复:引用对于*（（w+1）[2]）我还是很清楚的，相当于数组w[1][2] 清楚是清楚了 可惜是错的 这是 w[3][0] 前面打错了，后面跟着复制了，手机上打代码比较麻烦，那个[ ]不能解引用嘛？不是指针里面[ ]同等于*解引用嘛？

user: user-1
content: 引用对于*（（w+1）[2]）我还是很清楚的，相当于数组w[1][2] 清楚是清楚了 可惜是错的 这是 w[3][0]

user: user-2
content: 引用 7 楼 懵逼是一种状态 的回复:[quote=引用 6 楼 qq_38834405的回复:]你二维数组要么用[]要么用*来解引用，*(w+1)[2]，w+1先与[2]结合，因为优先级的问题，他还没有解引用，所以是一直在对行操作，就变成了*(w+3)，再与*结合，变成**(w+3)。 你可以写一下(w+1)[2][1]，等同于w[3][1]。 [ ]的优先级仅次于（），为什么w+1会与[2]结合啊？不是应该先[ ]解引用嘛？请问这块知识能到哪里去看呀？我看谭浩强书上没有讲有关解引用的点。而且网上也没有找到有关二位数组的解引用问题[/quote]  [ ]  ( )  ->   . 是同一优先级，顺序是从左→向右。 *  & 之类的一元运算符，优先级第二，顺序是从右←向左 所以*(w+1)[2] 先算(w+1)    再算[2]，将(w+1)[2]展开就是：*（（w+1）+2）==*(w+3)，这就是数组第四行的首地址。 然后再*运算，解引用，*（*(w+3)），得到数组第四行第一个元素的值（w[3][0]）。

user: user-0
content: 引用 6 楼 qq_38834405的回复:你二维数组要么用[]要么用*来解引用，*(w+1)[2]，w+1先与[2]结合，因为优先级的问题，他还没有解引用，所以是一直在对行操作，就变成了*(w+3)，再与*结合，变成**(w+3)。 你可以写一下(w+1)[2][1]，等同于w[3][1]。 [ ]的优先级仅次于（），为什么w+1会与[2]结合啊？不是应该先[ ]解引用嘛？请问这块知识能到哪里去看呀？我看谭浩强书上没有讲有关解引用的点。而且网上也没有找到有关二位数组的解引用问题

user: user-0
content: 引用 1 楼 qq_38834405的回复:优先级和括号的用法有什么关系。。 各位，抱歉，我打错了，是*（w+1）[2]与（*（w+1））[2]的区别

user: user-0
content: 引用 1 楼 qq_38834405的回复:优先级和括号的用法有什么关系。。 抱歉抱歉，我才看到我打错了，是*（w+1）[2]与（*（w+1））[2]的区别，原谅我...

user: user-3
content: 优先级和括号的用法有什么关系。。

user: user-3
content: 你二维数组要么用[]要么用*来解引用，*(w+1)[2]，w+1先与[2]结合，因为优先级的问题，他还没有解引用，所以是一直在对行操作，就变成了*(w+3)，再与*结合，变成**(w+3)。 你可以写一下(w+1)[2][1]，等同于w[3][1]。

user: user-0
content: 引用 4 楼 qq_38834405的回复: 本质就是a[0] = *(a+0) 额，所以说我打错了，还是谢谢你，我还有疑问是那个*（w+1）[2]为什么可以写成*（*（（w+1）+2））。或者说，（w+1）[2]可以写成*（（w+1）+2）啊？

user: user-3
content: 本质就是a[0] = *(a+0)
user-0 提问: #include    
#include    
#include 
typedef struct{

回复:
user: user-1
content: 引用 2 楼 æ¶åæ å£° 的回复:[quote=引用 1 楼 niiiloc的回复:]自己发的帖都不看看发成什么鬼样子的么？ 发错了，本来想删掉的，但删不掉呀。[/quote] 在这个帖子下面回复时再发一遍，不然不清楚你的问题无法给你解决。

user: user-0
content: 引用 1 楼 niiiloc的回复:自己发的帖都不看看发成什么鬼样子的么？ 发错了，本来想删掉的，但删不掉呀。

user: user-2
content: 自己发的帖都不看看发成什么鬼样子的么？
user-0 提问: 大佬们，我想知道这是为什么？

回复:
user: user-1
content: 这个和你的程序没什么关系吧

user: user-2
content: 另外 调试时F5 运行时Ctrl+F5

user: user-2
content: 这个是输出窗口,正常情况下就是有些dll无法加载,你就注重窗口预览中的变量的值是不是和你预想的一样就好了.这些符号不用管他.这种dll就算是有问题你也改不了,因为不是你写的,索性就不用管它.你需要关注的是左边的窗口

user: user-3
content: 你F5运行的？

user: user-4
content: 是不是编译器的位数问题，你要加载的是64位的库文件，而你的是win32的编译器。

user: user-5
content: 要下符号表 https://blog.csdn.net/simo_xi/article/details/85126756
user-0 提问: 高分求调制解调器发送语音的源码

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:感觉安卓做这个工作比较简单些。。 安卓在打电话的时候放不出声音，我试过。你要是有用安卓实现的方法也可以。

user: user-1
content: 感觉安卓做这个工作比较简单些。。
user-0 提问: 输入输出格式问题

回复:
user: user-1
content: 浮点数在内存中存储会以0.xxxxx加一个指数来存储，这个主要是计算机在设计时为了增大存储的范围而设定的，而如果以%d读入会抹去零头于是就是0，最后输出也就是0了

user: user-2
content: scanf里要用%f

user: user-3
content: 建议从网上搜一下整型和浮点型在内存中的表示，通过它们之间的区别来分析这个问题。

user: user-4
content: 引用 3 楼 秦帅的回复:scanf    %d是整型，应该用%f， 这里没有将读取的整型变成浮点型

user: user-4
content: scanf    %d是整型，应该用%f，

user: user-0
content: 引用 1 楼 user-5的回复:看源码  你多试几个数、不一定是0 我试了10多个数呢，都是输出0.000000,我觉得是格式不一致，但这种说法太肤浅了，根本原因是啥呢

user: user-5
content: 看源码  你多试几个数、不一定是0
user-0 提问: UDP通信第一次接收数据时会有较长时间延时的问题

回复:
user: user-1
content: 或许可以试试，先打开接收端，再启动发送端

user: user-2
content: 抓包看看数据包有没有传到，若没到看看是不是路由的问题，到了的话看看recv代码是不是效率不好

user: user-3
content: 发送前，先connect如何？ UDP编程中的connect

user: user-4
content: 如果是我，让进程保持7×24小时不间断每隔比如10秒钟收发一个心跳包！

user: user-5
content: 同遇到，楼主解决了么
user-0 提问: 问一下C中extern的

回复:
user: user-1
content: 每加一个extern 就相当于把变量作用域扩大到了当前作用域.

user: user-2
content: 结果是1，你可以写个代码试试，extern表示对其他文件中变量的引用，可以当成一个所有extern文件的全局变量。

user: user-3
content: 再引用，肯定为1

user: user-4
content: extern 相当于是对外部声明了这个变量,共用了栈空间,所以,改了一个地方,另一个地方的值也就跟着改了.

user: user-5
content: extern一般是全局变量，中间只要对其修改，它的值就会变化。
user-0 提问: 新手学C语言

回复:
user: user-1
content: 仅供参考，记得结贴：）  #include <stdio.h>  int func(int x, int y) {     if (x < 0)         x = -x;      if (y < 0)         y = -y;      return x + y; }  int main() {     int x,y;     scanf("%d %d", &x, &y);     printf("func(%d, %d) = %d\n", x, y, func(x, y));     return 0; }

user: user-2
content: 分段函数用if 来选择对应每种情况；运行时输入用scanf一个一个输入。
user-0 提问: hdoj1006分析

回复:
user: user-0
content: 引用 1 楼 niiiloc的回复:不要过多用数学思维去解答，这样就没必要编程去做了 程序看不懂是真的难受啊。总想搞懂每个语句的含义。。。。

user: user-1
content: 不要过多用数学思维去解答，这样就没必要编程去做了
user-0 提问: C语言求三角形面积

回复:
user: user-1
content: 海伦公式: https://baike.baidu.com/item/%E6%B5%B7%E4%BC%A6%E5%85%AC%E5%BC%8F

user: user-0
content: 引用 2 楼 DeepBlue7122的回复:這問題用海伦公式解在電腦上是最好的 请问海伦公式是什么，求大神解答

user: user-1
content: 這問題用海伦公式解在電腦上是最好的

user: user-2
content: 没问题都可以  挺好的
user-0 提问: ngx_save_argv()中ngx_os_argv与ngx_argv的区别且FREEBSD为什么没有申请 

回复:
user: user-1
content: 这个看起来是要把参数保存到全局变量 ngx_argv 中，所以会有分配空间操作。   至于为什么需要两个argv： ngx_os_argv,   ngx_argv。    可能是因为这两个参数的使用范围不一样。另外宏定义NGX_FREEBSD的作用，我没深入接触过nginx的源码所以不知道，等其他大神解答吧。
user-0 提问: 如何用c语言实现 从一个文件以每个单词为单位 读取每一行 然后把每一行存入栈中，再反向输出到另一个文件

回复:
user: user-1
content: 引用 1 楼 IPJLiiiii 的回复:我想写一个 将一个文件里的每一行单词都 反着输入另一个文件（单词位置反着），就想用栈处理每一行 用数组将每个单依次存入栈 然后再 拿出来 给另一个文件 每行单独处理 但是不知道怎么做到 建议楼主考虑下strtok这个函数，应该可以满足你的要求。 大概步骤，先获取文件大小，然后calloc文件大小的内存，一次性读取出来，然后使用strtok。

user: user-1
content: sscanf，%s字符串。这将读取连续字符，直到遇到一个空格字符（空格字符可以是空白、换行和制表符）。 http://www.runoob.com/cprogramming/c-function-sscanf.html

user: user-0
content: 我想写一个 将一个文件里的每一行单词都 反着输入另一个文件（单词位置反着），就想用栈处理每一行 用数组将每个单依次存入栈 然后再 拿出来 给另一个文件 每行单独处理 但是不知道怎么做到
user-0 提问: 动态分配内存问题，大佬求助帮帮看看代码哪里错了，Debug直接报错意味指针越界，可我寻思动态分配内存没啥问题啊。

回复:
user: user-1
content: 2L代码改的没毛病，还可以将scanf改成scanf_s，更安全一点

user: user-2
content: #include<stdio.h> #include <malloc.h>  void InputMatrix(double *matrix,int rows,int cols) {     int i,j,ind;     for(i=0;i<rows;i++)     {         for(j=0;j<cols;j++)         {             ind=i*cols+j;             //scanf("%lf\t",matrix[ind]);             scanf("%lf", &matrix[ind]);         }         printf("\n");     } }  void Transpose(double *a,double *b,int rows,int cols) {     int _rows,_cols,Aind,Bind;     for(_rows=0;_rows<rows;_rows++)     {         //for(_cols=0;_cols>cols;_cols++)         for(_cols=0;_cols < cols;_cols++)         {             Aind=_rows*cols+_cols;             Bind=_cols*rows+_rows;             b[Bind]=a[Aind];         }     } }  void ShowTransposeMatrix(double *matrix,int rows,int cols) {     int i,j,ind;     for(i=0;i<rows;i++)     {         for(j=0;j<cols;j++)         {             ind=i*cols+j;             printf("%lf\t", matrix[ind]);         }         printf("\n");     } }  int main() {     double *a=NULL,*b=NULL;     int rows,cols;      puts("Please input the matrix rows and cols:");     scanf("%d%d",&rows,&cols);      a=(double *)malloc(rows*cols*sizeof(double));     b=(double *)malloc(rows*cols*sizeof(double));      puts("Please input the matrix:");     InputMatrix(a,rows,cols);      puts("Transposing and show:");     Transpose(a,b,rows,cols);     ShowTransposeMatrix(b,cols,rows);      free(a);     free(b);      return 0; }  供参考，代码替换的地方都是有问题的地方。

user: user-3
content: 段错误原因是scanf("%lf", &matrix[ind]);  剩下的问题你自己调吧

user: user-0
content: 感谢楼上三位，一开始是直接初始化的矩阵，没有自己输入，然后输入语法就直接把显示复制过去改了。就改了个printf和scanf= =，其他符号都忘记了，尴尬。
user-0 提问: 链表删除直接传指针

回复:
user: user-0
content: 引用 1 楼 自信男孩 的回复:因为你删除的不是头指针，这是其一。其二是head是指向堆上的内存，那么传入head之后，del函数内接收的head也是指向堆上空间的地址，另外又因为第一个原因，所以不会出现问题。 如果你删除的是头结点，建议试一下，可能就会出问题的谢谢

user: user-1
content: 因为你删除的不是头指针，这是其一。其二是head是指向堆上的内存，那么传入head之后，del函数内接收的head也是指向堆上空间的地址，另外又因为第一个原因，所以不会出现问题。 如果你删除的是头结点，建议试一下，可能就会出问题的
user-0 提问: 新手求助

回复:
user: user-1
content: 结尾加上system（“pause”）；

user: user-0
content: 不知道啊，，我就选了一个图片就这样变成这样了

user: user-2
content: 最近這麽多發照片上來的？而且還沒翻轉好？ 這樣看著很累，換個方式吧。

user: user-3
content: 老弟，你这排版看着真心费劲。
user-0 提问: 哪位大神帮我一下下

回复:
user: user-1
content: 建议查一下这些函数的用法：  #include <ctype.h>         int isalnum(int c);        int isalpha(int c);        int iscntrl(int c);        int isdigit(int c);        int isgraph(int c);        int islower(int c);        int isprint(int c);        int ispunct(int c);        int isspace(int c);        int isupper(int c);        int isxdigit(int c);         int isascii(int c);        int isblank(int c);

user: user-2
content: 用判断ASCII码的方法来实现

user: user-3
content: #include<stdio.h>  int main() { 	char c; 	scanf("%c", &c);  	if (c >= 'A' && c <= 'Z') { 		c = c + ('a' - 'A'); 		printf("%c\n", c); 	} 	else if (c >= 'a' && c <= 'z') { 		c = c - ('a' - 'A'); 		printf("%c\n", c); 	} 	else if (c == ' ') { 		printf("space"); 	} 	else { 		printf("other"); 	}  	return 0; }