Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 基础数组问题

回复:
user: user-1
content: 如果不知道数组大小,可以申请动态数组.

user: user-0
content: 引用 5 楼 user-3的回复:[quote=引用 4 楼 m0_46196884 的回复:] 我是指主函数中的1000，我这个素数例子不需要长度，也不知道长度。 另外我函数使用错误了，假如我传了数组指针到函数里，函数结束后也就不需要return数组了，而且我不知道返回类型可不可以是一个数组 1. 不可以不知道长度，你把数组声明好后它的大小就不会变了，难道你指望编译器帮你自动扩容？ 2. 不可以返回数组，但我上面给了一个周转方案，就是用结构体包裹数组。[/quote] 谢谢指教，但你让我说1000内有多少个素数我也说不出来，我本来就是想让程序帮我算出来的，现在只能先预留一个大范围的空间给数组。

user: user-2
content: 计算素数本来就是一个渐进的过程， 不能预先知道有多少个素数 你只能预先开一个大数组， 在计算素数的过程当中，边计算边填充数组，也就知道了有效的数组长度 你可以把这个有效长度返回，告知这个数组当中前多少位是有效的素数  你也可以把这个数组全部初始化成0， 那么函数返回后， 使用数组的时候，遇到了数组当中的0元素，自然也可以知道后面的数据也都是无效的了  其他的一楼都说了

user: user-3
content: 引用 4 楼 m0_46196884 的回复:我是指主函数中的1000，我这个素数例子不需要长度，也不知道长度。 另外我函数使用错误了，假如我传了数组指针到函数里，函数结束后也就不需要return数组了，而且我不知道返回类型可不可以是一个数组 1. 不可以不知道长度，你把数组声明好后它的大小就不会变了，难道你指望编译器帮你自动扩容？ 2. 不可以返回数组，但我上面给了一个周转方案，就是用结构体包裹数组。

user: user-0
content: 引用 3 楼 user-3的回复:[quote=引用 2 楼 m0_46196884 的回复:] 你好，大佬，1：传递指针，我记得需要一个长度传入函数，我看您给出的例子中，给了数组一个1000长度的整型空间，我这边的情况是默认不清楚长度，是不是我记错指针用法了？ 2，3方法的话，我目前还没学到，不做评论。 如果你指形参里的 1000 的话，没有任何作用。长度传与不传都是可以的，关键看你代码的需求。如果你的函数需要长度，那么就： void func(int n, int arr[]) {     // 用 n 和 arr 干一些事... }[/quote] 我是指主函数中的1000，我这个素数例子不需要长度，也不知道长度。 另外我函数使用错误了，假如我传了数组指针到函数里，函数结束后也就不需要return数组了，而且我不知道返回类型可不可以是一个数组

user: user-3
content: 引用 2 楼 m0_46196884 的回复:你好，大佬，1：传递指针，我记得需要一个长度传入函数，我看您给出的例子中，给了数组一个1000长度的整型空间，我这边的情况是默认不清楚长度，是不是我记错指针用法了？ 2，3方法的话，我目前还没学到，不做评论。 如果你指形参里的 1000 的话，没有任何作用。长度传与不传都是可以的，关键看你代码的需求。如果你的函数需要长度，那么就： void func(int n, int arr[]) {     // 用 n 和 arr 干一些事... }

user: user-0
content: 引用 1 楼 user-3的回复:这什么奇葩语法... 如果你要返回数组，可以选择： 1: 传递指针 (推荐) int func(int arr[1000]) {     arr[...] = ...; } int main(void) {     int arr[1000];     fun(arr); } 2: 返回结构体 struct a {     int arr[1000]; }; struct a func(void) {     return ....; } int main(void) {     struct a stru = func();     stru.arr[...]; } 3: 全局对象，很简单，不需要例子。 你好，大佬，1：传递指针，我记得需要一个长度传入函数，我看您给出的例子中，给了数组一个1000长度的整型空间，我这边的情况是默认不清楚长度，是不是我记错指针用法了？ 2，3方法的话，我目前还没学到，不做评论。

user: user-3
content: 这什么奇葩语法... 如果你要返回数组，可以选择： 1: 传递指针 (推荐) int func(int arr[1000]) {     arr[...] = ...; } int main(void) {     int arr[1000];     fun(arr); } 2: 返回结构体 struct a {     int arr[1000]; }; struct a func(void) {     return ....; } int main(void) {     struct a stru = func();     stru.arr[...]; } 3: 全局对象，很简单，不需要例子。
user-0 提问: 求大佬帮忙解答一下这段代码的自动变量的问题

回复:
user: user-1
content: 如果没有初始化，那么set_mode和gat_info等函数的参数mod，last，fuel，distance的内存信息就是不确定的（可能是垃圾信息），可能导致set_mode和get_info等方法的运行错误。当然，在你这个例子中不会出什么系统错误，只会导致运行结果不对。
user-0 提问: C语言求助 实在不会

回复:
user: user-1
content: 循环后len的值变了，需要重新初始化

user: user-2
content: 呵呵，循环中变量的初始化是很多人容易犯的错误

user: user-3
content: 每次fgets后，重新初始化len的值 或者在do{ ... }while（）； 之后也可以

user: user-3
content: while(fgets(buf, MAX_BUF, stdin)){ len = 0;  //加这么一句就好了             do{
user-0 提问: 改错

回复:
user: user-0
content: 引用 1 楼 focuslight的回复:运行好像正确，你那里显示错误吗？ 把错误贴出来吧 哦，谢谢，我运行出来了

user: user-1
content: 运行好像正确，你那里显示错误吗？ 把错误贴出来吧
user-0 提问: 求助

回复:
user: user-1
content: 初学，也来完成一下这个作业，请大佬们指点。  #include <stdio.h>  int search(int list[], int n, int x) {     int i;     for (i=0; i<n; i++)     {         if(x==*(list+i))             return i;     } }  int main() {     int repeat, n, x, i, index;     int arr[10];     printf("请输入运算次数(0-10)：\n");     scanf("%d", &repeat);     printf("请输入数组长度(0-10)：\n");     scanf("%d", &n);      for (i=0; i<n; i++)     {         printf("请输入数组第%d个元素:\n",i+1);         scanf("%d", &arr[i]);     }      printf("数组元素为：\n");     for (i=0; i<n; i++)     {         printf("%d\t",arr[i]);     }     printf("\n\n");      while (repeat)     {         printf("请输入要查找的数:\n");         scanf("%d", &x);         index = search(arr, n, x);         if(index)             printf("index= %d\n", index);         else             printf("Not found\n");         repeat--;     }      return 0; }

user: user-0
content: 输入一个正整数repeat (0<repeat<10)，做repeat次下列运算： 输入一个正整数 n (1<n<=10)，然后输入n个整数存入数组a中，再输入一个整数x，在数组a中查找x，如果找到则输出相应元素的最小下标，否则输出"Not found"。 要求定义并调用函数search(list, n, x)，它的功能是在数组list中查找元素x，若找到则返回相应元素的最小下标，否则返回-1，函数形参 list 的类型是整型指针，形参n和x的类型是int，函数的类型是int。 输出格式语句：printf("index = %d\n", ); 输入输出示例：括号内为说明，无需输入输出

user: user-0
content: 好的，这就复制粘贴！

user: user-2
content: 你就不能把文字复制粘贴进来吗？！ 累眼睛的问题不回答
user-0 提问: 学习上的问题

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 引用 2 楼 m0_46328473 的回复:[quote=引用 1 楼 與蘤舊縐的回复:]刚发给你了，无非就是%优先级高于-，%后的负数被当做正数处理了 为什么？负号（-）优先级高于％的，％优先级高于的是减号（-）。[/quote]  %后的负数被当做正数处理：不清楚为什么，应该涉及到底层运算，这不是优先级的问题 前面说的是独立的两个原因，没有因果关系

user: user-0
content: 引用 1 楼 與蘤舊縐的回复:刚发给你了，无非就是%优先级高于-，%后的负数被当做正数处理了 为什么？负号（-）优先级高于％的，％优先级高于的是减号（-）。

user: user-3
content: 求余最后归根结底就是调用汇编div/idiv IDIV 带符号除法指令  格式：IDIV SRC  执行的操作：与DIV相同，但操作数必须是带符号的数，商和余数也都是带符号的数，且余数的符号和被除数的符号相同

user: user-4
content: 引用 2 楼 m0_46328473 的回复:[quote=引用 1 楼 與蘤舊縐的回复:]刚发给你了，无非就是%优先级高于-，%后的负数被当做正数处理了 为什么？负号（-）优先级高于％的，％优先级高于的是减号（-）。[/quote] 这是规定,没有为什么.建议查一下C语言符号优先级

user: user-5
content: 引用 5 楼 m0_46328473 的回复:你这个还真可以啊。-8%-3=-3也成立。网上都搜不到你这严格定义啊？你怎么知道的？ 我已经说了，这来自于 C 语言标准，是官方组织发布的，我参考的是 C11 标准，对应于草案 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf。当然，草案和实际会有小差别，如果有意向的话，可以考虑花钱支持正版。

user: user-2
content: 引用 6 楼 m0_46328473的回复:[quote=引用 3 楼 與蘤舊縐的回复:][quote=引用 2 楼 m0_46328473 的回复:] [quote=引用 1 楼 與蘤舊縐的回复:]刚发给你了，无非就是%优先级高于-，%后的负数被当做正数处理了 为什么？负号（-）优先级高于％的，％优先级高于的是减号（-）。[/quote]  %后的负数被当做正数处理：不清楚为什么，应该涉及到底层运算，这不是优先级的问题 前面说的是独立的两个原因，没有因果关系[/quote] 我明白你的意思了。你这种说法也对。我可以理解。不过我觉得可能4楼的说法要更好一些。。a%b=a-(a/b)*b。这个式子对所有情况都成立。[/quote] 我也觉得这解释比较专业，学到了

user: user-0
content: 引用 3 楼 與蘤舊縐的回复:[quote=引用 2 楼 m0_46328473 的回复:] [quote=引用 1 楼 與蘤舊縐的回复:]刚发给你了，无非就是%优先级高于-，%后的负数被当做正数处理了 为什么？负号（-）优先级高于％的，％优先级高于的是减号（-）。[/quote]  %后的负数被当做正数处理：不清楚为什么，应该涉及到底层运算，这不是优先级的问题 前面说的是独立的两个原因，没有因果关系[/quote] 我明白你的意思了。你这种说法也对。我可以理解。不过我觉得可能4楼的说法要更好一些。。a%b=a-(a/b)*b。这个式子对所有情况都成立。

user: user-0
content: 引用 4 楼 user-5的回复:首先解释 % 的工作原理：% 是一个依赖于 / 的运算符。C 语言标准规定：设有 int a, b; 则 a 严格等于 (a / b) * b + a % b。也就是说，a % b 的结果严格等于 a - (a / b) * b。然后就可以解释你的例子了。  -8 % 5 = -3： 即 (-8) % (5) = (-3) => (-8) - ((-8) / (5)) * (5) = (-3)  8 % -5 = 3： 即 (8) % (-5) = (3) => (8) - ((8) / (-5)) * (-5) = (3) 你这个还真可以啊。-8%-3=-3也成立。网上都搜不到你这严格定义啊？你怎么知道的？

user: user-5
content: 首先解释 % 的工作原理：% 是一个依赖于 / 的运算符。C 语言标准规定：设有 int a, b; 则 a 严格等于 (a / b) * b + a % b。也就是说，a % b 的结果严格等于 a - (a / b) * b。然后就可以解释你的例子了。  -8 % 5 = -3： 即 (-8) % (5) = (-3) => (-8) - ((-8) / (5)) * (5) = (-3)  8 % -5 = 3： 即 (8) % (-5) = (3) => (8) - ((8) / (-5)) * (-5) = (3)

user: user-2
content: 刚发给你了，无非就是%优先级高于-，%后的负数被当做正数处理了
user-0 提问: C语言，循环

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 初学，试着写一下。  #include <stdio.h>  int main() {     int i=1,j=1,n=6;     for(;i<=n;i++)     {         for(j=1;j<=n+1-i;j++)         {             switch (i)             {             case 1:                 printf("%d\t", j);                 break;             case 2:                 printf("%d\t", j*10+(j+1));                 break;             case 3:                 printf("%d\t", j*100+(j+1)*10+(j+2));                 break;             case 4:                 printf("%d\t", j*1000+(j+1)*100+(j+2)*10+(j+3));                 break;             case 5:                 printf("%d\t", j*10000+(j+1)*1000+(j+2)*100+(j+3)*10+(j+4));                 break;             case 6:                 printf("%d\t", j*100000+(j+1)*10000+(j+2)*1000+(j+3)*100+(j+4)*10+(j+5));                 break;             }          }         printf("\n");     }     return 0; }

user: user-0
content: 引用 2 楼 focuslight的回复:void PrintArrSpecially(int n) {	 	assert(n > 0);	 	int Row = 1;//代表当前在第几行	 	int Count = 0;//目前打印了几个数字	 	int i;	 	do	 	{		 		for (i = 0; i < n; i++)		 		{			 			printf("%d", i+1);  			Count++;//目前已经打印了Count个数据			 			if (i == n - 1)break;//一旦打印到最后一个元素就退出for循环表示此行打印结束			 			if (Row == Count)//第n行，每块的元素的个数就是行数。故在这个条件下做出相应的操作			 			{				 				printf("\t");//打印制表符，输出的结果更加清晰				 				Count = 0;//恢复当前块打印的个数为0				 				if (Row > 1)i = i - (Row - 1);//如果不是第一行那么就得移动下次块开始得位置，注意：for循环体完毕之后i还要加1			  			}		 		}		 		printf("\n");		 		Count = 0;//每行结束时直接跳出了for循环，所以我们再给Count置0		 		Row++;//每次打印完一行，行数加1	 	} while (Row <= n); }    PrintArrSpecially(6); //n=6 嗯嗯，会了会了，谢谢啦

user: user-3
content: void PrintArrSpecially(int n) {	 	assert(n > 0);	 	int Row = 1;//代表当前在第几行	 	int Count = 0;//目前打印了几个数字	 	int i;	 	do	 	{		 		for (i = 0; i < n; i++)		 		{			 			printf("%d", i+1);  			Count++;//目前已经打印了Count个数据			 			if (i == n - 1)break;//一旦打印到最后一个元素就退出for循环表示此行打印结束			 			if (Row == Count)//第n行，每块的元素的个数就是行数。故在这个条件下做出相应的操作			 			{				 				printf("\t");//打印制表符，输出的结果更加清晰				 				Count = 0;//恢复当前块打印的个数为0				 				if (Row > 1)i = i - (Row - 1);//如果不是第一行那么就得移动下次块开始得位置，注意：for循环体完毕之后i还要加1			  			}		 		}		 		printf("\n");		 		Count = 0;//每行结束时直接跳出了for循环，所以我们再给Count置0		 		Row++;//每次打印完一行，行数加1	 	} while (Row <= n); }    PrintArrSpecially(6); //n=6

user: user-4
content: i-- 用循环语句 每次用另一个循环变量控制输出
user-0 提问: C

回复:
user: user-1
content: *a=是拿地址 =*a是拿数字

user: user-2
content: *a= 表明是指针，=*a 把a指向的值赋值给 =左边的变量

user: user-0
content: *a在左侧，就只执行了一次访问操作 *a在右侧，执行两次访问操作 这样理解对吗？

user: user-3
content: 二维数组  a[0]就是a[0][0]的地址  *a相当于a[0]

user: user-0
content: 难道说*a= 只是访问a，找到了a指向变量的地址，就结束了 ，没有再继续取内容
user-0 提问: 何为指针？

回复:
user: user-1
content: 不要从内存位置等底层实现来思考，要从 C 语言本身的语法来理解，否则很多东西会被解释得一片混乱。例如 int a, *b; 那么 a 就是一个对象，类型为 int；b 也为一个对象，类型为 int*，即指向 int 的指针。b = &a，其中 &a 生成了一个 int* 对象，这个指针指向 a(即：这个指针的值是 a 的地址)，而 = 使得 b 的值被 &a 覆盖，即 b 指向了 a，这以后 *b 与 a 等价。

user: user-2
content: a和b相当于一个房间的门牌号

user: user-0
content: 引用 3 楼 apkipa1的回复:不要从内存位置等底层实现来思考，要从 C 语言本身的语法来理解，否则很多东西会被解释得一片混乱。例如 int a, *b; 那么 a 就是一个对象，类型为 int；b 也为一个对象，类型为 int*，即指向 int 的指针。b = &a，其中 &a 生成了一个 int* 对象，这个指针指向 a(即：这个指针的值是 a 的地址)，而 = 使得 b 的值被 &a 覆盖，即 b 指向了 a，这以后 *b 与 a 等价。 有道理！我是初学者！个人理解！😂😂😂

user: user-0
content: 变量(例如a,b)是为了方便记忆是复杂的二进制地址所定义的，是用a,b代替二进制地址，但不能认为a或b=二进制地址。
user-0 提问: case语句中的奇怪现象

回复:
user: user-0
content: 引用 7 楼 好吃的大水坑 的回复:case 2:到break加个大括号可以吗  引用 6 楼 阿荣（l） 的回复:case后面应该只能是一条语句，第一个你虽然没加花括号，但是因为if  else算一条所以没有报错，第二个语句太多了，你直接case后面到break前面用花括号扩起来就行了  加括号  可以正常。

user: user-1
content: case后面应该只能是一条语句，第一个你虽然没加花括号，但是因为if  else算一条所以没有报错，第二个语句太多了，你直接case后面到break前面用花括号扩起来就行了

user: user-2
content: case 2:到break加个大括号可以吗

user: user-0
content: 引用 3 楼 apkipa1 的回复:C 语言规定在一个标签后面必须跟一个语句，否则作为语法错误处理。例如： // 1) Label_1:  // 这是一个标签     int abc1;  // 非法，标签后面跟的应当是语句，而不是声明 // 2) Label_2:;  // 这是一个标签，后面跟了一个空语句     int abc2;  // 合法 对于你的 switch-case，同理。  谢谢！

user: user-0
content: 引用 1 楼 寻开心 的回复:你把 case 2: 后面的用花括号括起来就好了  问题出在 那个变量定义上， case语句里面定义变量难以确定其有效空间， 严格意义上case之间的代码是平等关系， 但是变量有是从其定义的部分开始向下生效， 编译器搞不明白其空间了  解决办法是变量定义要么放到switch语句前面，要么用花括号把那段括起来，还有一种办法是声明和初始化分成两条来写； 比如  case 1:      int n;      n =3;  而不是 int n=3； 一起来写  用花括号可以，用分号隔开也可以，不过  直接int n ; n =3 ;这样在c语言中不行。  java可以。

user: user-3
content: C 语言规定在一个标签后面必须跟一个语句，否则作为语法错误处理。例如： // 1) Label_1:  // 这是一个标签     int abc1;  // 非法，标签后面跟的应当是语句，而不是声明 // 2) Label_2:;  // 这是一个标签，后面跟了一个空语句     int abc2;  // 合法 对于你的 switch-case，同理。

user: user-4
content: 可能你case 2:后面跟了一个换行符，而不是回车换行，你可以在case 2:后再打一个回车试试

user: user-5
content: 你把 case 2: 后面的用花括号括起来就好了  问题出在 那个变量定义上， case语句里面定义变量难以确定其有效空间， 严格意义上case之间的代码是平等关系， 但是变量有是从其定义的部分开始向下生效， 编译器搞不明白其空间了  解决办法是变量定义要么放到switch语句前面，要么用花括号把那段括起来，还有一种办法是声明和初始化分成两条来写； 比如  case 1:      int n;      n =3;  而不是 int n=3； 一起来写
user-0 提问: 求大佬详细告知这两个函数有什么区别？哪一种函数好？好在哪？

回复:
user: user-1
content: 第一个没有做输入错误的重做处理，也就是输入非数字类型的时候，程序运行错误。 第二个是有输入错误的重做处理，输入非数字类型时一直提示输入错误，要求重输，直到输入正确位置。 从程序的健壮性来考虑，第二个好。

user: user-2
content: 后者是多了安全检测，确保必须输入正确的数字才可以继续下一项。 显然，从代码的安全性和用户的友好性上， 后者都更好  前者代码简短了，但是留给用户的是烂摊子，万一错了，就无可挽回，只能关闭执行文件从头再来  两者之间没有可比性啊 前者是写代码的人省事儿了， 问题写代码是给自己看的吗？！ 还是要从用户的角度来考虑问题的
user-0 提问: 文本文档读取

回复:
user: user-0
content: 引用 2 楼 寻开心的回复:VC下标准c/c++文件操作代码都支持， 找c教程的本书看看文件操作都有了 如果是mfc， CFileDialog， CFile等一堆相关类就可以用 如同 一楼说的， 这个没什么好讲方法的， 基础的东西， 嗯呢呢，谢谢谢谢你啦

user: user-0
content: 引用 1 楼 程序代码的回复:使用FILE *指针，fopen函数进行打开文件，读取文本的函数有fgetc fgets fread，只讲方法，实现自己百度或看书 好的，非常谢谢啦。。。

user: user-1
content: VC下标准c/c++文件操作代码都支持， 找c教程的本书看看文件操作都有了 如果是mfc， CFileDialog， CFile等一堆相关类就可以用 如同 一楼说的， 这个没什么好讲方法的， 基础的东西，

user: user-2
content: 使用FILE *指针，fopen函数进行打开文件，读取文本的函数有fgetc fgets fread，只讲方法，实现自己百度或看书
user-0 提问: C语言

回复:
user: user-1
content: 试试将vs的vc编译器的目录添加到可执行文件的目录。 比如 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin 添加到VC++目录中的可执行文件的目录。

user: user-0
content: 引用 1 楼 程序代码的回复:运行可以啊，检查是不是你的编译器问题。 应该是编译器问题，但是重新安装了还是这样

user: user-0
content: 引用 3 楼 阿荣（l）的回复:看看是不是system后面用了中文的括号了 应该不是，我复制出来的代码在上面

user: user-2
content: 看看是不是system后面用了中文的括号了

user: user-3
content: 复制下来新建一个项目吧

user: user-4
content: 运行可以啊，检查是不是你的编译器问题。
user-0 提问: 头文件为什么只能声明函数而不能定义？那么函数定义放在哪？

回复:
user: user-1
content: 声明只是告诉编译器有这个函数，链接才是真正用到这个函数

user: user-2
content: 同一个项目当中，包含多个文件--c/cpp文件 头文件，可以被多个c/cpp文件所包含 如果头文件当中，包含了函数的实现那么对整个工程来说，它就等同于多次实现， 出现了重复函数的错误了  要理解#include 就等同于把头文件的内容，复制了一份放到c/cpp文件内容的前面了 函数声明，在同一个文件里面，可以声明多次， 但是定义只能有一个，否则就是重复定义了  头文件就是为了让，同一个工程当中的多个c/cpp之间共享信息， 让彼此知道其他文件当中实现了那些功能可以为自己所用 头文件内容就是要方，要让其他的c/cpp文件所要知道的内容， 通过#include的方式， 一次性告知了所有信息，而不必每个c/cpp文件当中都自己再写代码声明一次
user-0 提问: 结构体套结构体，然后建立一个结构体数组，并且传递地址引用报错

回复:
user: user-0
content: 引用 1 楼 ?Victor.?? 的回复:17行函数input 24行intput哦哦，太粗心了我，谢谢

user: user-1
content: 17行函数input 24行intput
user-0 提问: 大佬帮忙看看

回复:
user: user-0
content: 引用 4 楼 qybao的回复:我怎么觉得是你的structurel工程参照/使用了另一个工程的debug文件夹的文件，因为另一个工程编译/调试的的时候，debug文件夹可能会清空或者重新生成文件，导致structurel工程参照/使用的文件可能不对，所以才报了个警报。 我刚才改了改项目，源文件的名字，有可能是这个原因，至于参考/使用别的工程，有可能是编译器被我的操作搞懵了

user: user-1
content: 我怎么觉得是你的structurel工程参照/使用了另一个工程的debug文件夹的文件，因为另一个工程编译/调试的的时候，debug文件夹可能会清空或者重新生成文件，导致structurel工程参照/使用的文件可能不对，所以才报了个警报。

user: user-0
content: 引用 1 楼 與蘤舊縐 的回复:从这个警告本身不好说发生了什么，网上也查了一下，应该不是常见的问题  如果你干了啥，那就复原吧  如果不知道干了啥，那么先检查一下代码，施展各种调试大法，确定问题的根源  如果是编译器的问题，那直接卸了这部分重装吧  机智如我，用极其智慧的方式解决了

user: user-2
content: 直接创建一个全新的项目应该就没啥奇怪的问题了。其它同 #1。

user: user-3
content: 从这个警告本身不好说发生了什么，网上也查了一下，应该不是常见的问题  如果你干了啥，那就复原吧  如果不知道干了啥，那么先检查一下代码，施展各种调试大法，确定问题的根源  如果是编译器的问题，那直接卸了这部分重装吧
user-0 提问: 求助一道编程题

回复:
user: user-1
content: 如果m==1，你的if(m==1) cnt=cnt;会一直执行(因为你的m不会变，而图3的m会变，只执行一次)，所以要改成 if (i == 1)  cnt=cnt;

user: user-1
content: 如果m==1，你的if(m==1) cnt=cnt;会一直执行(因为你的m不会变，而图3的m会变，只执行一次)，所以要改成 if (i == 1)  cnt=cnt;
user-0 提问: 急急急 在线等  C语言怎么向输入缓冲流中写入数据　目的是判断用户是否输入

回复:
user: user-0
content: 引用 6 楼 與蘤舊縐 的回复:[quote=引用 4 楼 dasd21a 的回复:] [quote=引用 2 楼 與蘤舊縐 的回复:] 如果你的目的是想应用的话，可以直接使用_kbhit检测是否有键盘敲击响应，用getch接收、vs中应该是_getch  你的实现方式中getchar是需要enter提交的，我好像不是很明白你的思路，按我的理解似乎不行  确实不行　我就是想实现游戏那种不论按不按键盘都能正常运行　然后自己想出了这个办法　通过ｇｅｔｃｈ（）函数也需要用户输入才行，不然就会停下来　所以我就想向输入缓冲区写入我预定的数据　然后检验获取的数据是不是我预设的　　就是这个思路  目的是实现游戏里面那种即使我不按键盘也能正常运行的功能[/quote]  我就知道你想这样才告诉你的方法，怎么不行  if(_kihit()){char input = _getch()；爱干嘛干嘛}只有键盘敲击时才会执行，不敲击正常运行[/quote]  测试跟我想的一样  十分感谢 谢谢你的解答

user: user-1
content: 引用 4 楼 dasd21a 的回复:[quote=引用 2 楼 與蘤舊縐 的回复:] 如果你的目的是想应用的话，可以直接使用_kbhit检测是否有键盘敲击响应，用getch接收、vs中应该是_getch  你的实现方式中getchar是需要enter提交的，我好像不是很明白你的思路，按我的理解似乎不行  确实不行　我就是想实现游戏那种不论按不按键盘都能正常运行　然后自己想出了这个办法　通过ｇｅｔｃｈ（）函数也需要用户输入才行，不然就会停下来　所以我就想向输入缓冲区写入我预定的数据　然后检验获取的数据是不是我预设的　　就是这个思路  目的是实现游戏里面那种即使我不按键盘也能正常运行的功能[/quote]  我就知道你想这样才告诉你的方法，怎么不行  if(_kihit()){char input = _getch()；爱干嘛干嘛}只有键盘敲击时才会执行，不敲击正常运行

user: user-0
content: 引用 1 楼 寻开心 的回复:ascii里面的内容，没有键盘输入不了的（alit+数字小键盘输入的ascii数值）  c/c++标准函数不支持你向键盘缓冲区里面注入字符这种命令，没有这样的函数  freopen可以重定向stdin到文件， 预先在文件当中设置一些内容来检验getchar的反馈是可以尝试的办法  最关键的是，你想通过这点来验证什么，意义何在呢？  目的是我想实现游戏那种即使不按按键也能正常运行的功能

user: user-0
content: 引用 2 楼 與蘤舊縐 的回复:如果你的目的是想应用的话，可以直接使用_kbhit检测是否有键盘敲击响应，用getch接收、vs中应该是_getch  你的实现方式中getchar是需要enter提交的，我好像不是很明白你的思路，按我的理解似乎不行  确实不行　我就是想实现游戏那种不论按不按键盘都能正常运行　然后自己想出了这个办法　通过ｇｅｔｃｈ（）函数也需要用户输入才行，不然就会停下来　所以我就想向输入缓冲区写入我预定的数据　然后检验获取的数据是不是我预设的　　就是这个思路  目的是实现游戏里面那种即使我不按键盘也能正常运行的功能

user: user-0
content: 是这样的　　游戏里面不是按键与否游戏都正常进行吗，我也想实现这样的功能 ；ｇｅｔｃｈａｒ（）确实是要ｅｎｔｅｒ提交的　所以我才想把输入缓冲区放一些字符进去　然后用ｇｅｔｃｈ（）；检验我获取的字符是不是我预设的　如果是　那么用户没有输入  我不知道该如何实现这样的功能　　我是自己想的上面的办法

user: user-1
content: 如果你的目的是想应用的话，可以直接使用_kbhit检测是否有键盘敲击响应，用getch接收、vs中应该是_getch  你的实现方式中getchar是需要enter提交的，我好像不是很明白你的思路，按我的理解似乎不行

user: user-2
content: ascii里面的内容，没有键盘输入不了的（alit+数字小键盘输入的ascii数值）  c/c++标准函数不支持你向键盘缓冲区里面注入字符这种命令，没有这样的函数  freopen可以重定向stdin到文件， 预先在文件当中设置一些内容来检验getchar的反馈是可以尝试的办法  最关键的是，你想通过这点来验证什么，意义何在呢？
user-0 提问: 这个程序用C语言怎么写？

回复:
user: user-1
content: 没懂你说的什么意思。。。。

user: user-2
content: 同意1楼说的，先对数组排序，然后写个算法，看一下相邻的数字是不是一样，这样就可以了

user: user-3
content: 数组有多大，里面的数字范围是什么情况， 都要明确一下， 要不这个题目很泛泛  万能的做法就是排序，相同的数都相邻了，然后再循环一次数数就知道了
user-0 提问: 把一个变量的指针传到一个函数，然后在函数里对指针赋值地址，函数结束后指针还是原来的值？

回复:
user: user-0
content: 引用 8 楼 寻开心的回复:还在疑惑？  函数的参数可以是变量，也可以是表达式，也可以是另外一个函数 但是不管哪种情况，最终传递进去的都是一个具体的数值，  是这些表达式，变量，函数的最终计算得到的一个常量数值 这个数值，被放入函数的栈当中， 它在栈中的地址就是形参这个变量， 栈在函数执行完毕后都会弹出， 这个内存就失效了  你可以简单的理解为， 有一个函数内的局部变量， 在系统调用这个函数的时候，把传递的参数赋值给了这个函数内部的局部变量 这样就能理解， 赋值之后的变量和原来的调用函数传参的那个东东之间的关系了，那就是两个独立的，除了值相同以外毫无关系  总结就是：无论函数原型里面的参数是什么类型， 传递进函数里面的都是其值，这就是二楼说的那个道理！  回到楼主的问题，你要想改指针并返回，那就传参指针的指针，也就是取指针变量的地址作为参数进来 就如同要改一个整数变量内容，就要传递整数变量的地址一样 要改哪一个变量，就传递哪一个变量的地址  void nn(int ** a) {       *a = (int*) malloc( 100*sizeof(int)); }  int main() {    int * n = NULL;    nn(&n);  // 传变量地址，不管变量生类型，要改变量的值，都要传变量的地址    return 0; } 真大佬 明白了 谢谢

user: user-1
content: 引用 2 楼 liups 的回复:这个其实是很多教材讲坏了！其实C、C++永远都是值传递，哪怕指针也是如此。调用nn时把n复制给a，然后就没有然后了  所以a的值不会返回main中 补充一下，很多教材中把传值和传指针并列在教材中讲，所以初学者容易误解成传指针就不是传值了。  另外楼主的需求一般有两个办法，一是上面说的指针的指针，另一个是使用函数的返回值

user: user-2
content: 还在疑惑？  函数的参数可以是变量，也可以是表达式，也可以是另外一个函数 但是不管哪种情况，最终传递进去的都是一个具体的数值，  是这些表达式，变量，函数的最终计算得到的一个常量数值 这个数值，被放入函数的栈当中， 它在栈中的地址就是形参这个变量， 栈在函数执行完毕后都会弹出， 这个内存就失效了  你可以简单的理解为， 有一个函数内的局部变量， 在系统调用这个函数的时候，把传递的参数赋值给了这个函数内部的局部变量 这样就能理解， 赋值之后的变量和原来的调用函数传参的那个东东之间的关系了，那就是两个独立的，除了值相同以外毫无关系  总结就是：无论函数原型里面的参数是什么类型， 传递进函数里面的都是其值，这就是二楼说的那个道理！  回到楼主的问题，你要想改指针并返回，那就传参指针的指针，也就是取指针变量的地址作为参数进来 就如同要改一个整数变量内容，就要传递整数变量的地址一样 要改哪一个变量，就传递哪一个变量的地址  void nn(int ** a) {       *a = (int*) malloc( 100*sizeof(int)); }  int main() {    int * n = NULL;    nn(&n);  // 传变量地址，不管变量生类型，要改变量的值，都要传变量的地址    return 0; }

user: user-3
content: 引用 4 楼 weixin_44568462的回复:[quote=引用 1 楼 可以写无吗 的回复:] 我认为问题在你把指针作为实参传递给函数，函数中的指针变量接受了你传递的地址，然后你在函数中更改地址，只是更改了函数中这个变量的指向，不影响主函数的指针。这个变量为局部变量，函数结束后 ，此变量的存储空间会释放，这个变量也会消失。 如果真要在函数修改地址除了返回值 还有其他办法吗   刚玩的论坛不知道是不是这样回复[/quote] 这就不大清楚，毕竟我也刚学，问下3楼大佬，他回答了好多问题

user: user-4
content: 引用 2 楼 liups的回复:这个其实是很多教材讲坏了！其实C、C++永远都是值传递，哪怕指针也是如此。调用nn时把n复制给a，然后就没有然后了  所以a的值不会返回main中 请问是这个意思吗？  地址传递实际意义上是将一个实参的地址复制给形参，形参的值就是这个地址，就相当于门牌号，通过门牌号找人，可以在自定义函数中或其他方式将门牌号调换来达到找不同人的目的，但无法更改这个已经存在的门牌号，也就是无法更改已经定义null或者其他的地址 仅仅个人理解，还望大佬指点

user: user-0
content: 引用 2 楼 liups 的回复:这个其实是很多教材讲坏了！其实C、C++永远都是值传递，哪怕指针也是如此。调用nn时把n复制给a，然后就没有然后了  所以a的值不会返回main中 如果真要在函数修改地址除了返回值 还有其他办法吗   刚玩的论坛不知道是不是这样回复

user: user-0
content: 引用 1 楼 可以写无吗 的回复:我认为问题在你把指针作为实参传递给函数，函数中的指针变量接受了你传递的地址，然后你在函数中更改地址，只是更改了函数中这个变量的指向，不影响主函数的指针。这个变量为局部变量，函数结束后 ，此变量的存储空间会释放，这个变量也会消失。 如果真要在函数修改地址除了返回值 还有其他办法吗   刚玩的论坛不知道是不是这样回复

user: user-2
content: 引用 2 楼 liups 的回复:这个其实是很多教材讲坏了！其实C、C++永远都是值传递，哪怕指针也是如此。调用nn时把n复制给a，然后就没有然后了  所以a的值不会返回main中

user: user-1
content: 这个其实是很多教材讲坏了！其实C、C++永远都是值传递，哪怕指针也是如此。调用nn时把n复制给a，然后就没有然后了  所以a的值不会返回main中

user: user-3
content: 我认为问题在你把指针作为实参传递给函数，函数中的指针变量接受了你传递的地址，然后你在函数中更改地址，只是更改了函数中这个变量的指向，不影响主函数的指针。这个变量为局部变量，函数结束后 ，此变量的存储空间会释放，这个变量也会消失。
user-0 提问: C语言鸡兔同笼代码（求助）

回复:
user: user-0
content: 引用 6 楼 阿荣（l） 的回复：明天你还没有代码的话找我一下，我给你写谢谢，我写出来啦

user: user-1
content: 明天你还没有代码的话找我一下，我给你写

user: user-2

user: user-0
content: 引用 2 楼 寻开心 的回复：竞赛题就是弄公式 联系基础语言的时候，这是一个循环方面的问题 输入易 ， 和禮 鸡头和兔头和是输入的头，用它来做循环控制就行了  for （ =0；  <= 易;  ++ ）{       = 易-       if (    * 2 +  *4 == 禮 )  {           ️             break;        } }？

user: user-3
content: 引用 2 楼 寻开心 的回复:竞赛题就是弄公式 联系基础语言的时候，这是一个循环方面的问题 输入易 ， 和禮 鸡头和兔头和是输入的头，用它来做循环控制就行了  for （ =0；  <= 易;  ++ ）{       = 易-       if (    * 2 +  *4 == 禮 )  {           ️             break;        } } 这个代码好生精彩，生动形象呀

user: user-2
content: 竞赛题就是弄公式 联系基础语言的时候，这是一个循环方面的问题 输入🧠 ， 和🦶 鸡头和兔头和是输入的头，用它来做循环控制就行了  for （🐔 =0； 🐔 <= 🧠; 🐔 ++ ）{      🐰 = 🧠-🐔       if (   🐔 * 2 +  🐰*4 == 🦶 )  {           🖨️ 🐔 🐰           break;        } }

user: user-3
content: 列个方程就出来了
user-0 提问: C语言数组与函数

回复:
user: user-1
content: 外部复制不好， 在函数内部复制更好， 这样函数退出后可以自动释放 函数声明的时候，最好也把不希望改变的数组声明成const 类型  void func( const int ary[], int n) {      int tempAry = (int*) malloc( sizeof(int) * n);      memcpy( tempAry, ary, n*sizeof(int)); // 或者改成循环赋值。tempAry[i]=ary[i] 这种      这里继续改你tempAry      free(tempAry);   }

user: user-2
content: 那就在函数内复制一个好了，或者在函数外复制好了，把复制的传给函数
user-0 提问: 请问大佬node.h头文件是干什么的

回复:
user: user-0
content: 引用 3 楼 user-2 的回复:那是他自己定义的头文件，估计里面是node（节点）的结构体定义之类的，不加的话，编译器不认识你的Node类型 谢谢  引用 4 楼 寻开心 的回复:应该是自定义的 看看node的有哪些属性，  自己翻过来构建一个完了。 没有什么特别的  看起来就是类似于 #define ElementType int struct  NodeType {      ElementType         data;      struct NodeType * pNext; }; typedef  Node struct NodeType; 谢谢

user: user-1
content: 应该是自定义的 看看node的有哪些属性，  自己翻过来构建一个完了。 没有什么特别的  看起来就是类似于 #define ElementType int struct  NodeType {      ElementType         data;      struct NodeType * pNext; }; typedef  Node struct NodeType;

user: user-2
content: 那是他自己定义的头文件，估计里面是node（节点）的结构体定义之类的，不加的话，编译器不认识你的Node类型

user: user-0
content: 引用 1 楼 user-2 的回复:这不是标准c的头文件吧，网上查了一下，好像是nodejs的头文件，你是哪弄来的，看看它又什么就好了呀  是一个老师讲链表用到的，这个加不加有关系吗

user: user-2
content: 这不是标准c的头文件吧，网上查了一下，好像是nodejs的头文件，你是哪弄来的，看看它又什么就好了呀
user-0 提问: 求助看一下哪里错了

回复:
user: user-1
content: 还是那个老问题 初学者不能认为scanf调用了就一定正确的获得了返回值 自己打印一下获得的值就能发现问题  字符和数字混合输入的时候要特别注意 scanf在遇到空格，tab和回车的时候到底如何处理的， 仔细的看scanf函数的帮助说明吧

user: user-0
content: 引用 5 楼 user-2的回复:你不输入任何字符直接回车就可以 即上面的例子，你连续输入两次回车，看看c和d是不是都是回车 好的，十分感谢！！！！！！！！

user: user-2
content: 你不输入任何字符直接回车就可以 即上面的例子，你连续输入两次回车，看看c和d是不是都是回车

user: user-0
content: 引用 3 楼 user-2的回复:[quote=引用 2 楼 qq_46316063 的回复:] 哦哦十分感谢，那为什么我的另一个程序是一个数一次回车呢，格式和这个一样的，请您教教我 如果你确定你另一个程序的输入格式是一样的话，我只能说可能是不同的编译器对输入缓存的回车符处理不一样了。 你可以试试 char c, d; scanf("%c%c", &c, &d); //要求输入两个字符后回车 printf("%d, %d", c, d); //看看打印的结果d是什么？  输入（实际上只输入了一个字符就回车） a回车 看看d是不是回车符？  [/quote] 哦哦，我明白了，请问一下输入单个字符%c时是不是能读取回车符啊

user: user-2
content: 引用 2 楼 qq_46316063 的回复:哦哦十分感谢，那为什么我的另一个程序是一个数一次回车呢，格式和这个一样的，请您教教我 如果你确定你另一个程序的输入格式是一样的话，我只能说可能是不同的编译器对输入缓存的回车符处理不一样了。 你可以试试 char c, d; scanf("%c%c", &c, &d); //要求输入两个字符后回车 printf("%d, %d", c, d); //看看打印的结果d是什么？  输入（实际上只输入了一个字符就回车） a回车 看看d是不是回车符？

user: user-0
content: 引用 1 楼 user-2的回复:不是一个一个数据输入，是4个4个数据输入 即 输入 3+4i回车 在输入另一个数据（也是以上面的格式） 哦哦十分感谢，那为什么我的另一个程序是一个数一次回车呢，格式和这个一样的，请您教教我

user: user-2
content: 不是一个一个数据输入，是4个4个数据输入 即 输入 3+4i回车 在输入另一个数据（也是以上面的格式）
user-0 提问: 结构体中的数据取绝对值

回复:
user: user-0
content: 引用 2 楼 寻开心 的回复:文件是.c 是c语言默认， cpp文件默认是c++， 提交的时候有选择吗  这代码怎么看着眼熟呢 网上的代码  引用 2 楼 寻开心 的回复:文件是.c 是c语言默认， cpp文件默认是c++， 提交的时候有选择吗  这代码怎么看着眼熟呢 我粘贴的

user: user-1
content: 文件是.c 是c语言默认， cpp文件默认是c++， 提交的时候有选择吗  这代码怎么看着眼熟呢

user: user-2
content: 找不到头文件。你是用proc编译的呀，那估计c++的头文件没有，你可以改成c标准的头文件试试 去掉 #include<iostream> #include<algorithm> 加入 #include<stdlib.h>  然后把sort函数改成qsort函数 再试试
user-0 提问: 求教大神>o<

回复:
user: user-1
content: p2一动不动

user: user-2
content: #include<stdio.h> void copy_string(char from[],char to[]); int main() { 	char a[]="i am so happy"; 	char b[]="she is so happy"; 	copy_string(a,b); 	printf("%s",b); 	return 0; } void copy_string(char from[],char to[]) { 	char *pc1=from,*pc2=to; 	for(;*pc1!='\0';pc1++,pc2++) 		*pc2=*pc1; 		*pc2='\0'; }

user: user-3
content: for （； *p1 ！= ‘\0’; p1++ )     *p2 = *p1;   // 这里始终只给b的第一个元素赋值，   *p2 = '\0;'// 还是b的第一个元素， 导致b就是一个空字符串  修改    for （； *p1 ！= ‘\0’; p1++ )       *p2++ = *p1;   // 这里始终只给b的第一个元素赋值，
user-0 提问: 求助C语言一小段数组代码输入哪里不对？

回复:
user: user-1
content: n=3, ReadScore(n)函数里 for(i=0; i<n; i++)只接收3个输入，所以只打印3个

user: user-2
content: scanf(“%d%d”, &b[i],&a[i]); 输入格式不要\n

user: user-2
content: 说错了，c有逗号表达式，所以返回值只有1个

user: user-2
content: c的return只能返回一个值，如果想返回多个值，可以用结构体。 你现在的例子，结果都保存在全局变量里了，没必要return。

user: user-0
content: ok了，谢谢啦。

user: user-3
content: return 0；不就行了

user: user-4
content: c/c++语言没有元组的功能， 不能返回多值。  python等语言才有这种功能
user-0 提问: 求助

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: #include<stdio.h> #define PI 3.1415926; int main() { 	double r; 	double s; 	printf("请输入半径：\n"); 	scanf_s("%lf", &r); 	s = r * r * PI; 	printf("圆的面积为：%lf\n", s); 	return 0; }
user-0 提问: 随机产生绝对值小于1的数

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 随机0.0 到 2.0  结果-1.0

user: user-3
content: rand() / (RAND_MAX + 1.0)
user-0 提问: ………………

回复:
user: user-1
content: int a1[3]是什么，   长度是int的，3个对象依次排列，  a++， a+1是在这些int对象之间来回移动， 指针的数值每次增加4bytes，而不是1byte  类似的int a2[3][3]  是长度为int[3]也就是13Bytes的3个对象依次排列， a++，a+1在这些int[3]对象之间来回移动， 指针每次增加12bytes

user: user-1
content: int a[3][3] a是二维数组 把a当作指针使用的时候， a是    int（*）[3]   类型， 也就是指向 int[3] 这种类型的指针， 是数组的指针    所以a++， a+1这种操作，指针都是在a[0],a[1],a[2]这种地址之间来移动  注意指向数组的指针类型是。  int (*)[3];  也就是说数组的指针 而 int *[3] 是等同于 （int*）[3] 这是指针的数组 拗口，但是他们就是天差地别的

user: user-2
content: 二维数组和一维数组不一样。 a是二维数组首行地址。

user: user-0
content: 但a如果是二级指针常量的话，存储的应该一级指针的地址，但a和a[0]的值一样

user: user-0
content: 我怎么感觉a是个二级指针常量？
user-0 提问: 大佬们帮我看看这个 咋都是得a的值

回复:
user: user-1
content: scanf不要加,  scanf("%d%d%d",&a,&b,&c")

user: user-2
content: scanf(%d%d%d)不要加逗号，输入时也不要输逗号，直接空格

user: user-3
content: 你输入时用的中文逗号

user: user-4
content: 初学者要学会老老实实的，每次scanf读取到一次数据后，就马上printf一次，看看获得的是不是刚才输入的  这个是非常非常常见的毛病， 以为自己输入的内容一定可以被scanf等输入语句正确的获得

user: user-5
content: 输入值的时候输入一个按一下空格，不要标点符号

user: user-6
content: 格式控制中，有其它符号，在输入数据时在相应位置输入相同的符号，半角全角或者中英文符号要一致。
user-0 提问: 【菜鸟我又双叒叕来求教了】

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 这是源码： # include <stdio.h>  struct fun { 	int s; 	int x; 	 };  void fun_1(struct fun * m, struct fun * n) { 	int sum, diff; 	sum = (*m).s + (*n).s; 	diff = (*m).s - (*n).s; 	(*m).s = sum; 	(*n).s = diff; 	 }  void fun_2(struct fun * p, struct fun * q) { 	int sum, diff; 	sum = (*p).x + (*q).x; 	diff = (*p).x - (*q).x; 	(*p).x = sum; 	(*q).x = diff; 	 }  int main() { 	struct fun a, b; 	 	printf("请各自输入两个复数的实部与虚部：\n"); 	scanf("%d %d", &a.s, &a.x); 	scanf("%d %d", &b.s, &b.x); 	  	fun_1(&a.s, &b.s); 	     fun_2(&a.x, &b.x); 	 	printf("和为 ：%d + %d\n", a.s, a.x); 	printf("差为 ：%d + %d\n", b.s, b.x); 	 	return 0; }
user-0 提问: 大佬帮忙看看什么问题

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: fun函数， char *p = NULL；  第九行 *p = str[I] 是错误的，  给内存NULL赋值，这个是不允许的   fun是判断字符串是否是回文吗？ int func(char * str) {         int I, j=0;         for ( I =0; str[I]!='\0'; I++ );         I--; // I指向字符串最后一个字符的位置         for (j=0; j<I; j++, I-- ) { // j向后，I向前，直到相遇               if ( str[j] != str[I] ) return 0;         };         return 1; }

user: user-3
content: 17行，return 0和break重复了，break可以去掉，因为执行return 0就退出函数了，不会执行break 有报错吗？有就发
user-0 提问: c

回复:
user: user-1
content: 按照你的逻辑 int a=5 a不就是一个变量的值吗？  值=值是什么鬼   你搞错了一件事儿，  = 不是 ==，  =是赋值操作， 等号前面的是一个变量， 把后面的值赋予前面变量 否则的话，你就可以让  3 = x +2 ； 计算机自动帮你去求x是几啦， 可惜啊，c语言现在还没有这个功能

user: user-2
content: 比如： 一维数组 a[10] a是首地址，即 a[0]的地址。 二维数组 a[10][10] a是首行地址，也就是第 0行的地址。 可以把行看成一个变量 ，则列就可以看成一个一维数组，这样就好理解了。

user: user-3
content: 很简单，例如有 int a[13][17]; 那么 a 的类型是 int[13][17]，a + 0 的类型是 int(*)[17]，a[0] 的类型是 int[17]，a[0] + 0 的类型是 int*。你仔细梳理一下就会恍然大悟。

user: user-0
content: 引用 2 楼 與蘤舊縐的回复:*(a+i)+j == &a[i][j]有问题吗  你觉得*(a+i)是数组里存储的值，但这是二维数组，不是一维数组，*(a+i)=a[i]，也就是第i行的首地址  注意a[0][0]!=a[0]，前面的是值，后面的是地址 int a[3];在一维数组中*(a+i)的值和a[i]内容一样，这我理解 但放在二维数组中我觉得*(a+i)是第i+1个元素的值 而二维中a[i]是个指针常量不是个数组元素，还没弄明白

user: user-4
content: *(a+i)+j == &a[i][j]有问题吗  你觉得*(a+i)是数组里存储的值，但这是二维数组，不是一维数组，*(a+i)=a[i]，也就是第i行的首地址  注意a[0][0]!=a[0]，前面的是值，后面的是地址

user: user-0
content: 二维数组a中，a[i]+j=*(a+i)+j a+i是指针移动，*（a+i）是一个具体数值，不是地址值啊，为什么*(a+i)+j被解释成了一个地址值
user-0 提问: 写入到stack时缓冲区溢出

回复:
user: user-0
content: 引用 1 楼 寻开心 的回复:你确定文件打开正确了吗 scanf进来后，你printf一次数据看看 此外， 文本当中的字符串确实没有超过100吧，否则str数组最后一个可不是‘\0’, 会导致对str的访问溢出的    for (i = 0;str[i] != '\0'&&I<99;i++) {  这样更安全 这个I是用作什么的呢？ 结果为“匹配”时能够写入，“不匹配”就不行了

user: user-1
content: 你确定文件打开正确了吗 scanf进来后，你printf一次数据看看 此外， 文本当中的字符串确实没有超过100吧，否则str数组最后一个可不是‘\0’, 会导致对str的访问溢出的    for (i = 0;str[i] != '\0'&&I<99;i++) {  这样更安全
user-0 提问: 求大神 百思不得其解

回复:
user: user-0
content: 引用 2 楼 初学小菜 的回复:你少考虑情况了 包含负数 完全平方数为零 没有问题啊

user: user-1
content: 你少考虑情况了

user: user-1
content: 提示说的很清楚了
user-0 提问: 萌新求助

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 1 楼 寻开心的回复:Link * pHead 是头， 要插入的节点是pNode pNode->next = pHead->next; pHead->next = pNode;  这样就把pNode放在第一个节点，也就是头节点后面的第一个上面了呗 谢谢了，我发现我好像忘记malloc了

user: user-2
content: Link * pHead 是头， 要插入的节点是pNode pNode->next = pHead->next; pHead->next = pNode;  这样就把pNode放在第一个节点，也就是头节点后面的第一个上面了呗
user-0 提问: while循环不跳出循环，感谢！

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: p和q怎么会为空呢 最初他有初始值的,后面p++,q++,地址空间从你软件的加载基址开始，你一直自增，等溢出回到null? 估计你的条件是*p&&*q吧
user-0 提问: C语言杨辉三角

回复:
user: user-1
content: 1 #include<stdio.h>  2 int main()  3 {  4     int n,i,j,a[100];  5     printf("请输入行数n:");  6     scanf("%d",&n);  7     printf("  1");  8     printf("\n");  9     a[1]=a[2]=1; 10     printf("%3d%3d\n",a[1],a[2]); 11     for(i=3;i<=n;i++) 12     { 13         a[1]=a[i]=1; 14         for(j=i-1;j>1;j--) 15             a[j]=a[j]+a[j-1]; 16         for(j=1;j<=i;j++) 17             printf("%3d",a[j]); 18         printf("\n"); 19     } 20     return 0; 21 }//没有注释将就看吧

user: user-0
content: 嗯嗯，我试试，谢谢啦

user: user-2
content: 引用 8 楼 Nx呐！ 的回复:[quote=引用 7 楼 最大风力17级的回复:]#include<stdio.h> int n; int in[1005],out[1005];//in[]包括上一层的数据，out[]用来计算本层的数据 int main(){ 	scanf("%d",&n);//输入需要输出的层数 	if(n==1)printf("1\n"); 	else if(n==2){ 		printf("1\n"); 		printf("1 1\n"); 	} 	else{ 		printf("1\n"); 		printf("1 1\n");//输出了前两层并且从第三层开始算； 		in[1]=in[2]=1;//初始化上一层的数据  		for(int i=3;i<=n;i++){//计算第i层数据数据 		    //memset(out,0,sizeof(out)); 			out[1]=out[i]=1; 			for(int j=2;j<i;j++)out[j]=in[j-1]+in[j];//计算下一层的第二位到第i-1  			for(int j=1;j<=i;j++)printf("%d ",out[j]);//输出  			printf("\n"); 			for(int j=1;j<=n;j++)in[j]=out[j];//将本层数据移到下一层的上一层数据 		}  	} 	return 0; }  会了会了，谢谢啦。。[/quote] 可以把数组的数据类型改一下，这个在大一点的数据下会超数据范围

user: user-0
content: 引用 7 楼 最大风力17级的回复:#include<stdio.h> int n; int in[1005],out[1005];//in[]包括上一层的数据，out[]用来计算本层的数据 int main(){ 	scanf("%d",&n);//输入需要输出的层数 	if(n==1)printf("1\n"); 	else if(n==2){ 		printf("1\n"); 		printf("1 1\n"); 	} 	else{ 		printf("1\n"); 		printf("1 1\n");//输出了前两层并且从第三层开始算； 		in[1]=in[2]=1;//初始化上一层的数据  		for(int i=3;i<=n;i++){//计算第i层数据数据 		    //memset(out,0,sizeof(out)); 			out[1]=out[i]=1; 			for(int j=2;j<i;j++)out[j]=in[j-1]+in[j];//计算下一层的第二位到第i-1  			for(int j=1;j<=i;j++)printf("%d ",out[j]);//输出  			printf("\n"); 			for(int j=1;j<=n;j++)in[j]=out[j];//将本层数据移到下一层的上一层数据 		}  	} 	return 0; }  会了会了，谢谢啦。。

user: user-2
content: #include<stdio.h> int n; int in[1005],out[1005];//in[]包括上一层的数据，out[]用来计算本层的数据 int main(){ 	scanf("%d",&n);//输入需要输出的层数 	if(n==1)printf("1\n"); 	else if(n==2){ 		printf("1\n"); 		printf("1 1\n"); 	} 	else{ 		printf("1\n"); 		printf("1 1\n");//输出了前两层并且从第三层开始算； 		in[1]=in[2]=1;//初始化上一层的数据  		for(int i=3;i<=n;i++){//计算第i层数据数据 		    //memset(out,0,sizeof(out)); 			out[1]=out[i]=1; 			for(int j=2;j<i;j++)out[j]=in[j-1]+in[j];//计算下一层的第二位到第i-1  			for(int j=1;j<=i;j++)printf("%d ",out[j]);//输出  			printf("\n"); 			for(int j=1;j<=n;j++)in[j]=out[j];//将本层数据移到下一层的上一层数据 		}  	} 	return 0; }

user: user-2
content: 引用 5 楼 最大风力17级 的回复:可以一层一层往下推下去 我写下试试

user: user-2
content: 可以一层一层往下推下去

user: user-0
content: 引用 3 楼 最大风力17级的回复:必须要用两个一维数组吗？ 嗯呢，俩个一维数组，，，

user: user-2
content: 必须要用两个一维数组吗？

user: user-3
content: 就是用循环控制空格和字符数jiu xing

user: user-3
content: 百度超级多的，不用一维数组都可以
user-0 提问: C语言求助，万分感谢！~

回复:
user: user-0
content: 引用 4 楼 qybao的回复:上面遗漏了，修改一下 for ( int row=0; row<160; row++) {      for (int col=1; col<37; col++)            B[36*row+col-1] = A[40*row+col]; } 非常感谢😊已经成功解决了。

user: user-1
content: 上面遗漏了，修改一下 for ( int row=0; row<160; row++) {      for (int col=1; col<37; col++)            B[36*row+col-1] = A[40*row+col]; }

user: user-1
content: 一维数组也一样啊，借用上面的代码  int A[160*40] ; int B[160*36];   for ( int row=0; row<160; row++) {      memcpy( &B[row*36], &A[row*40+1], 36*sizeof(int)); }  或者 for ( int row=0; row<160; row++) {      for (int col=1; col<37; col++)            B[row+col-1] = A[row+col]; }

user: user-0
content: 请教一下 ，如果数组是一维的 应该怎样写哈？不知道哪里出错了 图像尾部总是出来的数据总是不对 。感谢！@~

user: user-2
content: int A[160][40] ; int B[160][36];   for ( int row=0; row<160; row++) {      memcpy( B[row], A[row]+1, 36*sizeof(int)); }  或者 for ( int row=0; row<160; row++) {      for (int col=1; col<37; col++)            B[row][col-1] = A[row][col]; }
user-0 提问: 有没有人能告诉我，这到底是为什么啊啊啊啊啊啊啊啊！

回复:
user: user-0
content: 引用 3 楼 寻开心 的回复:你看你的警告提示哈 前两个警告：  size 和 get两个都未定义， 假定是返回int 最后一个警告： dog2的类型是明确的，  但是参数类型是不是int不确定，它假定是int的  你还有一个编译错误， 先把那个错误解决掉，后面也许会跟着改变  但是 去掉A处的代码，程序可以正常运行。 加上A后就有错了，报错信息指向B处。

user: user-1
content: 你看你的警告提示哈 前两个警告：  size 和 get两个都未定义， 假定是返回int 最后一个警告： dog2的类型是明确的，  但是参数类型是不是int不确定，它假定是int的  你还有一个编译错误， 先把那个错误解决掉，后面也许会跟着改变

user: user-0
content: 引用 1 楼 真相重于对错 的回复:还是那句老话先把基本语法学好。不是自己在哪里瞎猜。 size是什么？你定义的函数吗？  嗯。

user: user-2
content: 还是那句老话先把基本语法学好。不是自己在哪里瞎猜。 size是什么？你定义的函数吗？
user-0 提问: 假设printf函数中有两个数字，先后计算哪个数字，先后输出哪个数字

回复:
user: user-1
content: 你问得好奇怪哦，没定义就要看编译器了

user: user-2
content: 不要浪费生命在错误的问题上

user: user-3
content: 多个参数的函数， 这些参数是表达式的时候，这些表达式的执行顺序在c/c++标准当中是没有定义的 因为不同的编译器就会有不同的解释， 有的从左到右，有的从右到左 这就是未定义行为

user: user-3
content: 属于c/c++当中的未定义行为， 不同编译器上执行的顺序不同
user-0 提问: 求解一道C语言题 求大神帮一下

回复:
user: user-1
content: main() {         int m=0;         int d=1;	/* 购买天数 */         int i=2;	/* 最近一天购买苹果数*/         int k=2;	/* 购买苹果总数 */         for(;d<100;)         {                 i=2*i;                 k=k+i;                 d++;                if(k>=100)                {                 break;                }         }         if(k<100)	/*感觉你们的代码都少了后面的判断，如果苹果总数少于100直接 总数/天数就可以  */         {                m= (k*1.8)/d;         }         else		/*但是如果苹果总数大于100，需要减去最后一天的苹果树，天数也要减1  */         {                 m=((k-i)*1.8)/(d-1);         }        /* printf("k = %d i=%d d = %d\n",k,i,d); */         printf("%d",m); } 结果是22

user: user-2
content: 引用 6 楼 他们都管我叫郑老师 的回复：[quote=引用 4 楼 m0_46346717 的回复：][quote=引用 2 楼 他们都管我叫郑老师的回复:]我给你写，明天回复我，提醒我一下 兄弟写完了没。。。。。。。。[/quote]#include <stdio.h> main() { 	int n=2,day=0;	/*定义n，day为基本整型*/ 	float money=0,ave;	/*定义money，ave为单精度型*/ 	while(n<100)/*苹果个数不超过100，故while中表达式n小于100*/ 	{ 		money+=0.8*n;	/*将每天花的钱数累加求和*/ 		day++;	/*天数自加*/ 		n*=2;	/*每天买前一天个数的2倍*/ 	} 	ave=money/day;  /*求出平均每天花的钱数*/ 	printf("The result is %.6f\n",ave);	 /*将求出的ave输出*/ } [/quote]加油吧，少年，别等坐吃山空。

user: user-2
content: 引用 4 楼 m0_46346717 的回复：[quote=引用 2 楼 他们都管我叫郑老师的回复:]我给你写，明天回复我，提醒我一下 兄弟写完了没。。。。。。。。[/quote]#include <stdio.h> main() { 	int n=2,day=0;	/*定义n，day为基本整型*/ 	float money=0,ave;	/*定义money，ave为单精度型*/ 	while(n<100)/*苹果个数不超过100，故while中表达式n小于100*/ 	{ 		money+=0.8*n;	/*将每天花的钱数累加求和*/ 		day++;	/*天数自加*/ 		n*=2;	/*每天买前一天个数的2倍*/ 	} 	ave=money/day;  /*求出平均每天花的钱数*/ 	printf("The result is %.6f\n",ave);	 /*将求出的ave输出*/ }

user: user-3
content: int main() {     float  unitPrice = 1.8f;     int    day = 1;     int    nPurchase = 2;     float  cost = nPurchase * unitPrice;     int    nTotal = 2;     while  ( nTotal < 100 ) {         printf("Day:%02d, Purchase:%02d, Total:%02d, cost:%5.2f\n", day, nPurchase, nTotal, cost);         day++;  nPurchase *=2; cost = nPurchase *unitPrice;         // cost *= 2; // 这样写也是可以的，反正购买量翻倍，花费也是翻倍         nTotal += nPurchase;     }     return 0; }

user: user-0
content: 引用 2 楼 他们都管我叫郑老师的回复:我给你写，明天回复我，提醒我一下 兄弟写完了没。。。。。。。。

user: user-4
content: 初学，也来做一下这个作业  #include <stdio.h> #define price 1.8 //苹果价钱  int main() {     int sum=0; //苹果总数     double sum_price=0.0; //苹果总价     int i=2;     int j=0;   //天数     while(sum<100)     {         sum += i;         i *= 2;         j++;     }     sum_price = sum * price;     printf("总共买了%d个苹果，用了%d天，共花费%.2f元。", sum, j, sum_price);     printf("平均每天花%.2f元。\n", sum_price/j);      return 0; }

user: user-2
content: 我给你写，明天回复我，提醒我一下

user: user-3
content: 做一个循环就可以解决的基础问题， 自己写代码，错了贴上来提问
user-0 提问: 在for循环中scanf的问题

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: scanf 遇到回车的处理， 看看scanf函数的说明， 它把回车留在缓冲区里面没有提取走， 所以下次getchar或者%c格式的scanf都会遇到它

user: user-2
content: 我想先问问，你确定你的代码能跑吗？ #include<stdio.h> int main() { char shuzu[1000000]; int num,i; scanf("%d",&num); for(i=1;i<=n;i++ ) {  数组开1MB，堆栈没有溢出？ n没有定义，就可以循环？

user: user-0
content: 引用 2 楼 apkipa1的回复:可以像 #1 那样做，也可以直接写 scanf(" %c", &shuzu[i])，看你个人偏好了。 呃，谢谢。 想问下为啥只有%c才会出现这种情况，而输入%d的时候不会发生录入回车键的情况。

user: user-3
content: 可以像 #1 那样做，也可以直接写 scanf(" %c", &shuzu[i])，看你个人偏好了。

user: user-4
content: 因为\n也是一个字符，所以要用getchar来接收回车 for(i=1;i<=n;i++ ) { getchar(); scanf("%c",&shuzu[i]); }
user-0 提问: 字符数组变量在字符函数参数表中为什么取地址后会有warning？？

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 引用 4 楼 qybao 的回复:a是变量，&a是变量的地址（也就是变量类型的指针） 你的例子中a是数组，所以&a如LS所说是数组的指针，&a[0]才是char指针（也就是a[0]是char，所以&a就是char指针） 笔误，修正一下 （也就是a[0]是char，所以&a[0]就是char指针）

user: user-2
content: a是变量，&a是变量的地址（也就是变量类型的指针） 你的例子中a是数组，所以&a如LS所说是数组的指针，&a[0]才是char指针（也就是a[0]是char，所以&a就是char指针）

user: user-3
content: 变量的名字就是char*类型了，  &a的类型是 char (*)[6] 是数组的指针， 类型不匹配了

user: user-0
content: 噢噢，那请问是不是 &a是int * ，而a是char * ，所以不取地址才是对的 ， 可以这样理解吗？

user: user-4
content: 编译器都告诉你了，指针类型不匹配。
user-0 提问: 作业求助

回复:
user: user-1
content: 设计什么?编程总要有需求或者要求的.编写的程序要用于做什么,需要描述清楚.这也叫需求分析

user: user-2
content: 是输出 ******************** *     C程序设计      * ******************** 吗？ #include <stdio.h>  int main() { printf("********************\n*     C程序设计      *\n********************\n"); return 0; }

user: user-3
content: printf
user-0 提问: 初学c的小菜鸡，前来请教各路大佬。

回复:
user: user-1
content: 可以这么理解。 int i=fa()+fb()+fc()*(fd()+fe()); 编译器并不保证五个函数的求值顺序。 但是可以保证先计算fd()+fe()的和（括号优先级） 再计算fc()*r3(算术优先级)  也就是说编译器并未假定按优先级，来顺序求值。

user: user-0
content: 那具体应该怎么算才正确呢？

user: user-2
content: 求值顺序和运算符优先级不是一回事~~~

user: user-3
content: 优先级： 括号 > * > +。+从左至右执行。 答案为 A
user-0 提问: APFFT C语言代码

回复:
user: user-1
content: 请问您实现了嘛？

user: user-2
content: 请问您实现了么

user: user-3
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-4
content: 居然。。。，没人

user: user-5
content: 哈哈 俺也想求一个apfft的c代码

user: user-1
content: 请问您求到了吗？
user-0 提问: 求助 指针内容 感谢大佬

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: LZ应该找本入门级别的教程好好看看，p=a后，*p是什么，*(p+1)是什么？它们和a[0]，a[1]是什么关系？弄清楚了就明白了。
user-0 提问: 【求助求助】C语言小问题：将数字变成0的次数

回复:
user: user-1
content: 引用 楼主 weixin_45707268 的回复:题目： 给定一个非负整数，返回将其减少到零的步骤数。如果当前的数字是偶数,你要除以2,否则,你必须从中减去1 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/number-of-steps-to-reduce-a-number-to-zero  递归代码： int numberOfSteps (int num) {     if(num%2==0) return numberOfSteps(num/2)+1;     if(num==1) return 1;     return numberOfSteps(num-1)+1; }  为什么要加1呀？  如果当前数字是偶数，需要把它除以 2 ；如果是奇数，需要减去 1。  如果是偶数，  numberOfSteps(num/2)的次数比numberOfSteps(num)少一次 如果是奇数， numberOfSteps(num -1)的次数比numberOfSteps(num)少一次 递归到1的时候 就是直接返回1了。 凡递归，就是处理本轮和前一轮的逻辑关系。

user: user-0
content: 引用 1 楼 他们都管我叫郑老师的回复:不减1，你反悔的数据就会少1，最简单的是带入一个数据，去验证一下程序，你就会发现1的用处 举例容易，可是我理解的好困难呀

user: user-2
content: 不减1，你反悔的数据就会少1，最简单的是带入一个数据，去验证一下程序，你就会发现1的用处
user-0 提问: 有没有会这道C语言循环题的，求详细步骤

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html
user-0 提问: 新人求助，这个问题困扰我好几天了，一直找不到解决办法，要哭了

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 6 楼 ?Victor.??的回复:抱歉，把f打成d了 ok。。。。。。。。

user: user-2
content: 抱歉，把f打成d了

user: user-2
content: 引用 3 楼 You're  Beautiful 的回复:[quote=引用 1 楼 ?Victor.??的回复:]你好像把lf打成了1f,scanf_s("%lf",&b) 奥 那为什么float类型printf和scanf用5f都行呢[/quote] float类型scanf(%5d)意思是接收位数（包括小数点） printf(%5d)意思是输出最小宽度（包括小数点） 而double类型lf应该是long float 的意思 double(%5lf)是一个意思

user: user-0
content: %f和%lf分别是float类型和double类型用于格式化输入输出时对应的格式符号。 其中： float，单精度浮点型，对应%f。 double,双精度浮点型，对应%lf。  在用于输出时: float类型可以使用%lf格式，但不会有任何好处。 double类型如果使用了%f格式可能会导致输出错误。  在用于输入时: double 类型使用了%f格式，会导致输入值错误。 float类型使用double类型不仅会导致输入错误，还可能引起程序崩溃。  所以在输入输出时，一定要区分好double和float，而使用对应的格式符号。

user: user-0
content: 引用 1 楼 ?Victor.??的回复:你好像把lf打成了1f,scanf_s("%lf",&b) 奥 那为什么float类型printf和scanf用5f都行呢

user: user-0
content: 奥 那为什么float类型printf和scanf用5f都行呢

user: user-2
content: 你好像把lf打成了1f,scanf_s("%lf",&b)
user-0 提问: 请大佬瞧瞧

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:你得把你创建的链表头结点传入addnum中再操作，addnum中pStrHead=NULL了，函数返回指针地址都丢失了。 好的，问题解决，谢谢

user: user-1
content: 你得把你创建的链表头结点传入addnum中再操作，addnum中pStrHead=NULL了，函数返回指针地址都丢失了。
user-0 提问: 求！！！

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 4 楼 的amara的回复:[quote=引用 3 楼 RoseYui的回复:][quote=引用 2 楼 的amara的回复:]#include<stdio.h> int main() { 	int a=1; 	scanf("%d", &a); 	a += a -= a*a; 	printf("%d",a); 	return 0; }  //最后得到的值直接赋给a了 哇，谢谢您！！！那个地方是不是直接int a;?[/quote] 这个a是局部变量 初始化，也可以初始化为其他的值[/quote] 嗷嗷，好的，谢谢您啦啦啦啦啦啦啦啦啦啦啦啦

user: user-2
content: 引用 3 楼 RoseYui的回复:[quote=引用 2 楼 的amara的回复:]#include<stdio.h> int main() { 	int a=1; 	scanf("%d", &a); 	a += a -= a*a; 	printf("%d",a); 	return 0; }  //最后得到的值直接赋给a了 哇，谢谢您！！！那个地方是不是直接int a;?[/quote] 这个a是局部变量 初始化，也可以初始化为其他的值

user: user-0
content: 引用 2 楼 的amara的回复:#include<stdio.h> int main() { 	int a=1; 	scanf("%d", &a); 	a += a -= a*a; 	printf("%d",a); 	return 0; }  //最后得到的值直接赋给a了 哇，谢谢您！！！那个地方是不是直接int a;?

user: user-2
content: #include<stdio.h> int main() { 	int a=1; 	scanf("%d", &a); 	a += a -= a*a; 	printf("%d",a); 	return 0; }  //最后得到的值直接赋给a了

user: user-3
content: 从右到左拆分成两步算
user-0 提问: C

回复:
user: user-1
content: 数组就是数组，你之所以会混淆数组和指针，只不过是因为数组名在绝大多数情况下可以自动变成指向首元素的指针罢了。你应当把数组和 int 等类型同等看待，再记住几个特性(例如数组不能赋值、数组名遇到取地址符或 sizeof 不退化为指针)，然后大多数问题就能解决了。

user: user-2
content: 你把你看到的原文发上来，

user: user-3
content: 数组是数组，表示一串连续放置的相同类型变量，是一组变量组的集合 如 int a[10]; 数组a就是指这10个int的集合。 指针是指针，是一个存储了某个地址的变量或常量，指向某个变量或常量的存储位置,如     int av;      int *ptr=&av; 指针ptr就指向了整型变量av的存储位置  对于编译器而言，可以将数组名（注意是数组名，而非数组）作为指向数组第一个元素的指针 如 int a[10]; *a和a[0]是等价的，此时的数组名a和int* ptr=&a[0];时的指针ptr是基本等效的。  数组名作为指针与一般的指针变量又是不一样的，指针变量可以改变其自身的内容，既可以指向不同的变量（存储空间），如     int av,bv;       int* ptr=&av;//定义ptr,指向av      ptr=&bv;//ptr改变指向的位置 但数组名a就始终只能指向数组a的起始位置，int a[10],b[10]; //定义一旦结束，是不能让a重新指向b的空间的  所以说数组名是一个（指向数组首地址的）指针（常量），这就是有些书简单说数组名就是指针，有些书说不是指针，而有些书又说像一个指针的原因

user: user-0
content: 引用 2 楼 apkipa1的回复:数组就是数组，你之所以会混淆数组和指针，只不过是因为数组名在绝大多数情况下可以自动变成指向首元素的指针罢了。你应当把数组和 int 等类型同等看待，再记住几个特性(例如数组不能赋值、数组名遇到取地址符或 sizeof 不退化为指针)，然后大多数问题就能解决了。 那个数组不能赋值是数组名不能被赋值吧
user-0 提问: 请求帮助我这到底出了啥问题

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: i的值未初始化，它的值是随机的。声明的时候int i=0;

user: user-0
content: 引用 3 楼 weixin_40290083的回复:不是没有定义i,而是i没有初始化 第一段程序中的sum没有初始化。 第二段程序中的i没有初始化。 怎么初始化，我感觉没错啊

user: user-3
content: 不是没有定义i,而是i没有初始化 第一段程序中的sum没有初始化。 第二段程序中的i没有初始化。

user: user-4
content: main15的i和main的i不是同一个i，是不同函数栈的局部变量。main函数的i没有初始化

user: user-0
content: 引用 6 楼 weixin_40290083的回复:初始化就是在使用这个变量进行计算之前对它赋初值。 嗷嗷，这个叫初始化是吧😂😂明白了明白了

user: user-3
content: 初始化就是在使用这个变量进行计算之前对它赋初值。

user: user-0
content: 考二级c语言路上第一个问题，难搞哦
user-0 提问: 求详细代码！天平砝码问题，最后求左右加的砝码

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 1 楼 真相重于对错的回复:提醒一下， 判断能称重的条件是 (w+1)%n==0 或者 (w-1)%n==0 或者 w%n==0 这个我之前看到过，但是是判断天平是否平衡的。。这道题目要求左右加的的砝码分别是多少

user: user-2
content: 提醒一下， 判断能称重的条件是 (w+1)%n==0 或者 (w-1)%n==0 或者 w%n==0
user-0 提问: 求大佬通俗地解释一下，这两段代码为什么相等

回复:
user: user-1
content: 实际上两段代码不相等

user: user-0
content: 引用 4 楼 qybao 的回复：while(*str)表示当前指针指向的字符不是字符串结尾符就一直循环 *dst++ = *str++ 等价于 *dst = *str，str++，dst++ 所以意思就是str指针走到字符串结尾符前一直循环把str指向的字符赋给dst，然后str，dst指针递增 第二个直接把*dst++ = *str++ 放在while里，上面说了，该语句等价于 *dst = *str，str++，dst++，整个while就等价于执行这些操作后，判断赋值后的*dst是不是字符串结尾符，如果不是则继续循环。 所以意思就是用*str当前指向的字符赋给*dst，然后str，dst指针递增，然后判断赋值后的dst指向的字符是不是字符串结尾符，如果不是则继续循环。 所以比较第一个和第二个的意思，其实是一样的。非常感谢

user: user-2
content: while(*str)表示当前指针指向的字符不是字符串结尾符就一直循环 *dst++ = *str++ 等价于 *dst = *str，str++，dst++ 所以意思就是str指针走到字符串结尾符前一直循环把str指向的字符赋给dst，然后str，dst指针递增 第二个直接把*dst++ = *str++ 放在while里，上面说了，该语句等价于 *dst = *str，str++，dst++，整个while就等价于执行这些操作后，判断赋值后的*dst是不是字符串结尾符，如果不是则继续循环。 所以意思就是用*str当前指向的字符赋给*dst，然后str，dst指针递增，然后判断赋值后的dst指向的字符是不是字符串结尾符，如果不是则继续循环。 所以比较第一个和第二个的意思，其实是一样的。

user: user-0
content: 引用 2 楼 weixin_45906870 的回复：引用 1 楼 與蘤舊縐 的回复：首先*src++的值等于*src，下一个while括号中的一句相当于*dst++，相当于*src++，相当于*src，也就是第一个while括号里的内容，然后第一个while花括号中的内容就是第二个while括号中的内容，这一条语句在每次循环是都执行一次，两个while等效谢谢大佬，虽然没看到你的解释没看懂....

user: user-0
content: 引用 1 楼 與蘤舊縐 的回复：首先*src++的值等于*src，下一个while括号中的一句相当于*dst++，相当于*src++，相当于*src，也就是第一个while括号里的内容，然后第一个while花括号中的内容就是第二个while括号中的内容，这一条语句在每次循环是都执行一次，两个while等效谢谢大佬，虽然没看到你的解释

user: user-3
content: 首先*src++的值等于*src，下一个while括号中的一句相当于*dst++，相当于*src++，相当于*src，也就是第一个while括号里的内容，然后第一个while花括号中的内容就是第二个while括号中的内容，这一条语句在每次循环是都执行一次，两个while等效
user-0 提问: 大学课本中的c语言是指c还是c++

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 引用 3 楼 ?Victor.??的回复:[quote=引用 2 楼 與蘤舊縐 的回复:] c和c++是两门语言，c自然就是c 大佬，有没有兴趣看看已解决区的第二篇帖子[/quote] 我是APP，看不了撒

user: user-3
content: 引用 2 楼 與蘤舊縐 的回复:c和c++是两门语言，c自然就是c 大佬，有没有兴趣看看已解决区的第二篇帖子

user: user-2
content: c和c++是两门语言，c自然就是c

user: user-3
content: 好强大的问题，据我所知，是c
user-0 提问: 求助

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 1 楼 與蘤舊縐的回复:文件后缀为msi，是一个安装程序，应该是vs安装的中间产物，最后没有删除，直接删掉问题不大，前提是你的vs安装完成了 嗯好谢谢你了那我就删掉了

user: user-2
content: 文件后缀为msi，是一个安装程序，应该是vs安装的中间产物，最后没有删除，直接删掉问题不大，前提是你的vs安装完成了
user-0 提问: C语言long double为啥输不出数字5

回复:
user: user-1
content: 引用 9 楼 與蘤舊縐 的回复:好吧，这样子的我试过了，并不行，不过它显然是支持long double的，可以获取到长度为16我再看看吧 这是我用 msys2 测试的结果：  令我奇怪的是，我看 msys1 的头文件说 __USE_MINGW_ANSI_STDIO 已经被弃用了，要换别的宏，没想到 msys2 还在用，我还以为 mingw-w64 单纯是原始 mingw 的升级版呢。

user: user-2
content: 引用 8 楼 apkipa1 的回复:[quote=引用 6 楼 與蘤舊縐 的回复:] 话说我两都不行，是不是得安装下扩展，别怀疑我装了假编译器mysy2配的mingw64工具链 我暂时用的是 msys1，这样子可以正确输出，你可以参考一下： [/quote]  好吧，这样子的我试过了，并不行，不过它显然是支持long double的，可以获取到长度为16我再看看吧

user: user-1
content: 引用 6 楼 與蘤舊縐 的回复:话说我两都不行，是不是得安装下扩展，别怀疑我装了假编译器mysy2配的mingw64工具链 我暂时用的是 msys1，这样子可以正确输出，你可以参考一下：

user: user-3
content: #include <cstdio>  文件是cpp，你再跑一遍看看

user: user-2
content: 引用 5 楼 apkipa1 的回复:[quote=引用 2 楼 AKK188888881 的回复:] 刚刚搞错了 图是这两张 可能的原因： 1. 你的编译器的 C99 是假的，或没有成功开启。 2. 你的编译器确实用了 C99，但是 Windows 本身不支持，于是编译器被微软坑了。 要解决的话你可以去网上搜下 mingw long double，看是否有解决方案。[/quote]  话说我两都不行，是不是得安装下扩展，别怀疑我装了假编译器mysy2配的mingw64工具链

user: user-1
content: 引用 2 楼 AKK188888881 的回复:刚刚搞错了 图是这两张 可能的原因： 1. 你的编译器的 C99 是假的，或没有成功开启。 2. 你的编译器确实用了 C99，但是 Windows 本身不支持，于是编译器被微软坑了。 要解决的话你可以去网上搜下 mingw long double，看是否有解决方案。

user: user-4
content: 说明lf不是指long double

user: user-2
content: 和编译器有关，有的可以用Lf，有的可以用llf，有的都不行  用scanf+Lf赋值也不一定能改变结果  long double是C99开始支持的，但不同的编译器对其支持可能不同

user: user-0
content: 刚刚搞错了 第一种： 第二种： 图是这两张

user: user-1
content: 这两张图有区别吗？
user-0 提问: 哪个兄弟会！！！跪求

回复:
user: user-1
content: 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 这么简单的总得自己先尝试一下吧  给你一个提示，使用字符数组存储学号
user-0 提问:  [求助] warning C4133: “函数”: 从“student *”到“student *”的类型不兼容

回复:
user: user-0
content: 引用 2 楼 寻开心 的回复:全局 和 main 函数里面各自提供了一个struct student结构， 这个不对。 删掉main函数里面的定义  刚刚才看到，一开始在main函数里定义，复制出来忘记删掉了

user: user-1
content: 全局 和 main 函数里面各自提供了一个struct student结构， 这个不对。 删掉main函数里面的定义