Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 孤何罪之有？蒙圈了

回复:
user: user-1
content: 引用 3 楼 lin5161678 的回复:[quote=引用 2 楼 拥抱Linux 的回复:]  （3）scanf里面的格式符直接用%d就行，不需要%3d，没有任何作用。输出的时候才起作用。for循环的右花括号的后面也不需要分号了，当然，加了也不会错，只是不必要。 %3d 当然有作用了 加了会不会出错看逻辑了  这里说求和没限制取值范围  如果输入  1234 %3d 只会读取到 123  后面的 4 会被下一个scanf处理  [/quote] 哦，是的，你提到的这样的情况确实起作用，是俺上面的说法简单化、片面了。 刚才一连看到数组的两个3，再加上这个3，直觉认为楼主把这3个3联系在一起了，所以说不起作用，也许只是俺的直觉失误。主观还是想表达这里不需要%3d，而且这个%3d的3和数组的行列长度3没关系，直接用%d就行。

user: user-2
content: 程序要求是输入9个，输入6个后程序会继续等待你的输入

user: user-3
content: 1. 3*3=9，就是要输入9个数字 2. 求和算法也不对，也应该用两层循环

user: user-4
content: 引用 2 楼 拥抱Linux 的回复:（3）scanf里面的格式符直接用%d就行，不需要%3d，没有任何作用。输出的时候才起作用。for循环的右花括号的后面也不需要分号了，当然，加了也不会错，只是不必要。 %3d 当然有作用了 加了会不会出错看逻辑了  这里说求和没限制取值范围  如果输入  1234 %3d 只会读取到 123  后面的 4 会被下一个scanf处理

user: user-1
content: 看上去没毛病啊！ （1）只能输入6个数字吗？ 再怎么输入，都输入不了了吗？很奇怪啊！看代码应该是可以输入9个数字的呀！再试试输入9个数字看看。 （2）要输出sum的结果的话，肯定要先输入9个数字，程序才会运行到下面去！ （3）scanf里面的格式符直接用%d就行，不需要%3d，没有任何作用。输出的时候才起作用。for循环的右花括号的后面也不需要分号了，当然，加了也不会错，只是不必要。 （4）如果sum是计算数组中所有数字的求和结果的话，还是跟上面的输入部分一样，用两个循环来做。 （5）你的IDE太老旧了，建议你可以试试vscode这段轻量级的文本编辑器，安装插件之后就可以变身为IDE了，很强大！具体配置C语言的编译、运行过程，可以百度一下。推荐一篇文章给你看看，虽然文章说的是在linux平台下的操作，但是vscode本身是跨平台软件，所以内容基本都是一样的。配置vscode调试C程序 （6）另外，附赠你上面的程序的参考代码如下：  #include <stdio.h>  int main(void) { 	int a[3][3]; 	int sum = 0; 	for (int i = 0; i < 3; i++) { 		for (int j = 0; j < 3; j++) { 			scanf("%d", &a[i][j]); 			sum += a[i][j]; 		} 	} 	printf("sum = %d\n", sum);                  char done[10];         scanf("%s",done);  	return 0; }

user: user-5
content: 求和不对，你是a[i][i]

user: user-6
content: 1、你这个输出的结果第一行就是乱码的，不知道是不是你的编译器有问题。 2、你输入数组元素的scanf不要设置为%3d，一般情况下scanf是不需要设置格式控制的，除非有特殊要求。 3、你的sum并不是计算的每一行之和，你写的是计算对角线上的数之和，可以用一个sum[10]的数组来存储每一行数之和，在这之前把sum数组的值初始化为0，循环改为: for(i=0;i<3;i++) for(j=0;j<3;j++) sum[i]+=a[i][j]; 然后输出sum数组的值即可
user-0 提问: 这份代码为什么Output Limit Exceeded

回复:
user: user-1
content: 估计是while循环的结束条件和题目的隐含要求不一致。 （1）题目里面没说输入的数据如何结束，应该不是以两个0来结束输入，应该是以文件结束符EOF来结束输入的吧，毕竟这种题库都是自动从内部文件读入输入数据来进行测试的。你可以试试把while循环的条件改成下面这样：  while(scanf("%d%d",&n,&m)  != EOF)  （2）题目说， n <= 100 ，所以 数组 a 的长度至少应该也是100吧。 （3）题目说，如果最后不足m个，则以实际数量求平均值，意思还是要对最后的不足m个的数字求平均值。 （4）如果 n <= m 的话，输出结果应该也是平均值而不应该是总和哦。 （5）不知道需不需要考虑 n 为 0 的情况。

user: user-2
content: //while(scanf("%d%d",&n,&m) && n!=0&&m!=0){    3     while(scanf("%d%d",&n,&m)==2 && n!=0&&m!=0){   2     |   if (n >= 99)    //防止越界   1     |   |   n = 99; 11      |   for(i=0;i<n;i++){                                                                                                                                                                                   1     |   |   a[i]=(i+1)*2;   2     |   }      改成这样？

user: user-3
content: 引用有一个长度为n ( n ≤ 100 ) 的数列  int a[99];  达到最大长度会越界

user: user-3
content: 引用Input 输入数据有多组，每组占一行，包含两个正整数n和m，n和m的含义如上所述。 没说 0 0 结束

user: user-3
content: 引用 1 楼 user-4 的回复:题目要求的输入输出是分开的，而你的代码是一行输入一行输出这个没问题

user: user-4
content: 题目要求的输入输出是分开的，而你的代码是一行输入一行输出
user-0 提问: 关于DLL静态调用的问题

回复:
user: user-1
content: 编译期出错说明问题出在源代码中。鼠标放在EdrCenterText()上右键选择“转到定义”，看看Edrlib.h是否真的存在，是否被你包含进来了。缺了它，EdrCenterText()就不能被正确转化为EdrCenterTextA()或EdrCenterTextW()。或者，你直接明确地调EdrCenterTextA()或EdrCenterTextW()，而不调EdrCenterText()。

user: user-2
content: 头文件有包括么？
user-0 提问: 关于C 泛型选择 _Generic

回复:
user: user-1
content: _Generic要支持C11的编译器才行

user: user-0
content: 引用 4 楼 拥抱Linux 的回复:看楼上的说法，那就应该是编译器不支持引入 _Generic 的新标准而造成的错误了，不是代码的问题。俺没用过你截图中的编译器，认不出来。 要不试试 vscode 吧，也是巨硬家的，本身是非常轻量级的文本编辑器，安装插件之后就可以变身为IDE，只是不像很多IDE一来就从建立工程开始，所以会影响对工程这个概念的认识。安利一篇为 vscode 配置 C 编译、调试环境的文章，因为是跨平台软件，无论是Linux还是Windows下的界面和设置都是一样的，所以虽然文章内容是说的Linux平台下，但是可以通用于Windows平台。配置vscode调试C程序 ～ 试了别的编译器结果也一样

user: user-2
content: 我看这代码没问题，gcc上编译通过结果为1。你不用define试试，直接把_Generic写到printf里试试，我估计基本是它现在没支持C11，你百度下，加编译命令，让它支持C11。

user: user-3
content: 引用 5 楼 bbcvb 的回复:试了别的编译器结果也一样 那正说明你试的别的编译器也没有支持C语言的泛型这个新特性啊！ 有没有看过上面给你推荐的安装、配置vscode的文章呢？安装软件和插件，试过了吗？ 嫌麻烦的话，再给你推荐一款网页版的在线编译器：wandbox 下面是俺把你的代码粘贴进去，点击了运行之后的截图：  你自己可以试试。 ～

user: user-3
content: 看楼上的说法，那就应该是编译器不支持引入 _Generic 的新标准而造成的错误了，不是代码的问题。俺没用过你截图中的编译器，认不出来。 要不试试 vscode 吧，也是巨硬家的，本身是非常轻量级的文本编辑器，安装插件之后就可以变身为IDE，只是不像很多IDE一来就从建立工程开始，所以会影响对工程这个概念的认识。安利一篇为 vscode 配置 C 编译、调试环境的文章，因为是跨平台软件，无论是Linux还是Windows下的界面和设置都是一样的，所以虽然文章内容是说的Linux平台下，但是可以通用于Windows平台。配置vscode调试C程序 ～

user: user-4
content: 引用 2 楼 bbcvb 的回复:改成C也没用vs? 人家早就说了 没支持C99 你们为什么就是不听呢

user: user-0
content: 改成C也没用

user: user-3
content: 代码本身，除了 换行符 的反斜杠打错了、没有返回值语句  之外，泛型本身相关的内容 没看出来什么问题啊。 把文件类型从 cpp 改成 c  看看。
user-0 提问: 求大神用c语言教一下怎么做，谢谢

回复:
user: user-1
content: 引用 4 楼 bin_shuaiwang 的回复:[quote=引用 2 楼 篝之雾枝的回复:]#include<stdio.h> int main() { 	double distance=100,high=75; 	int count=0; 	while(distance<590) 	{ 		count++; 		distance+=2*high; 		high*=0.75; 	} 	printf("落地次数：%d次",count); 	return 0; } 2*high是什么意思，谢谢[/quote]  除第一次下落外，余下的都是同一高度的来回 ，所以加的是2*high

user: user-2
content: 引用 4 楼 bin_shuaiwang 的回复:[quote=引用 2 楼 篝之雾枝的回复:]#include<stdio.h> int main() { 	double distance=100,high=75; 	int count=0; 	while(distance<590) 	{ 		count++; 		distance+=2*high; 		high*=0.75; 	} 	printf("落地次数：%d次",count); 	return 0; } 2*high是什么意思，谢谢[/quote]小球从最低点到最高点再到最低点的路程是两个high的长度啊，刚开始易得100米落地后总路程没达到590，所以直接设置初始distance为100，初始high为100*3/4=75

user: user-0
content: 引用 2 楼 篝之雾枝的回复:#include<stdio.h> int main() { 	double distance=100,high=75; 	int count=0; 	while(distance<590) 	{ 		count++; 		distance+=2*high; 		high*=0.75; 	} 	printf("落地次数：%d次",count); 	return 0; } 2*high是什么意思，谢谢

user: user-3
content: #include<stdio.h> int main(void){ 	int heigh = 100; 	int travelled = 0; 	int times = 0; 	int userset = 0; 	printf("请输入你想要计算的长度："); 	scanf("%d", &userset); 	printf("\n"); 	while (travelled < userset){ 		travelled += heigh; 		if (travelled >= userset){ 			break; 		} 		else{ 			times++; 		} 		heigh = heigh / 4 * 3; 		travelled += heigh; 	} 	printf("落地次数%d\n", times); }  你确定小球从100米下落在它弹不起来的之前总路程能走到590米吗？

user: user-2
content: #include<stdio.h> int main() { 	double distance=100,high=75; 	int count=0; 	while(distance<590) 	{ 		count++; 		distance+=2*high; 		high*=0.75; 	} 	printf("落地次数：%d次",count); 	return 0; }

user: user-4
content: while (distance < 590) {     distance += high * 3 / 4;     count++; }
user-0 提问: 为什么我的答案对了却wa

回复:
user: user-1
content: 你这道题过了吗？我测试对了也是wa，难受，不知道是输入溢出还是什么

user: user-2
content: for(i=1;i<=i1;i++) 改成： for(i=1;i<i1;i++)

user: user-3
content: 小白先好好学学怎么让自己的提问让别人看的懂

user: user-0
content: 引用 3 楼 user-4的回复:如果你是在测试平台上做，printf("Sample Output\n%d\n",s);只需要你输出s的值换行就行，你额外输出Sample Output，会导致系统不能查出错误，一般测试平台差错都是核对输出字符串与标准答案的字符串是否完全相同，另外，不知道你输入的a：b：c的意思是什么，如果还有错，是否考虑了出现成绩相同时的排名 在oj上的，改了还是wa，但答案是对的，是输入的数有限制吗

user: user-4
content: ++++++++++++测试样例

user: user-4
content: 如果你是在测试平台上做，printf("Sample Output\n%d\n",s);只需要你输出s的值换行就行，你额外输出Sample Output，会导致系统不能查出错误，一般测试平台差错都是核对输出字符串与标准答案的字符串是否完全相同，另外，不知道你输入的a：b：c的意思是什么，如果还有错，是否考虑了出现成绩相同时的排名

user: user-0
content: 引用 1 楼 user-4的回复:++++++++++++测试样例 Output 对于每一组输入，输出一个整数，也就是我在该局比赛的名次(ranking)。 Sample Input 1 3 2:02:123 2:03:000 2:02:124 Sample Output 1
user-0 提问: 关于数组声明的一点小疑问

回复:
user: user-1
content: 其实我们定义一个数组，主要是定义了它的首地址和长度，虽然你定义了数组的长度为10，但实际上后面的地址空间还是存在的，只是正常情况下我们没有对它进行操作。由于你只是输入了a[1]到a[10]的值，所以a[0]和a[100]的值都是随机值。也就是说除了a[1]到a[10]的值是我们输入的数值之外，其他的都是随机值。在这里说一点，只有全局变量的整形数组初始值才是0。

user: user-2
content: 就是说你定义了a[10]，就老老实实只用a[0]-a[9]，因为这块空间明确规定是给a用的，如果你非要用a[10]，没人拦你，不过你这个a[10]读的可能就不是a的数据，假设一块20大小连续空间，10个分给a，10个分给b，你用个a[15]=1,改的是b的数据，当然这还是你知道a空间后面的空间是b，如果不知道,你用的a[15],你知道改了谁的数据吗？

user: user-0
content: 引用 1 楼 user-2 的回复:C/C++数组不做越界检查，所以你数组访问越界并不会报错，但使用的时候一定注意不能越界，否则运气好，可能越界改了一个没用的数据还行，万一改了关键数据（比如说账户存款一百万改成一百块了），岂不是快哉使用是什么意思呢，我刚刚试了下在printf a[100]前令a[100]=10，程序还是老老实实给我打印出来了，我读入数字当i=10的时候下标应该是越界的吧，但还是把第十个数字储存进a[10]中了。

user: user-2
content: C/C++数组不做越界检查，所以你数组访问越界并不会报错，但使用的时候一定注意不能越界，否则运气好，可能越界改了一个没用的数据还行，万一改了关键数据（比如说账户存款一百万改成一百块了），岂不是快哉
user-0 提问: c语言问题

回复:
user: user-1
content: 变量的作用域及生命周期      变量的作用域:变量(存储区)能被访问的范围      变量的生命周期:变量的分配,被回收       局部变量(在函数内部声明的变量)的作用域,       C89  局部变量只能在当前函数访问   函数       C99  代码块中局部变量只能在当前代码块访问          同一作用域之内 不能出现同名变量      局部变量生命周期             auto  int a = 0;          局部变量生命周期限于函数声明该变量开始,函数结束(C99 代码块结束),自动(auto) 变量释放       全局变量          作用域 当前程序 可访问          生命周期 ,程序开始 到程序结束           如何声明 是全局的呢?          写在函数外面的变量 是全局变量         在所有函数中可以其进行读写          全局变量名 跟局部变量名可以同名        函数首先会找局部变量(就近原则)         全局变量名 可以跟函数名 同名吗?        函数名具有全局作用域特性    全局变量弊端:        全局命令空间 污染        函数复用降低     静态变量       声明局部变量 前加static 关键字       静态变量的作用域 限定在当前代码块       生命周期  整个程序结束  简单点来说，全局变量和静态局部变量都有作用域和生命周期，不同的是全局变量的生命周期和作用域是程序结束它才结束，静态的是在自己的作用域里运行，不在全局运行，生命周期也是程序结束才结束。当然你先这样理解，等在到一定水平在去理解全局变量和静态局部变量。很有意思的。

user: user-2
content: 全局变量是声明和定义在函数外的函数。全局函数是可以被其他文件函数调用的，一般不叫全局函数，一般交对外接口函数吧。  建议找一下与此相对应的名称：局部变量，静态函数等等，可以从网上搜一下，对比学习和了解效率比较高。

user: user-3
content: 百度一下更快。
user-0 提问: 求求帮助我

回复:
user: user-1
content: 继续烧脑下去，你写的这个程序有问题，一看你用的就是VC++6.0。抛弃它，跟我在ubuntu在写一遍，我就能告诉你怎么会事？微软的编译器，抱歉我不会微软的编译器写的软件

user: user-2
content: 引用 6 楼 jsx_SEVEN 的回复:[quote=引用 3 楼 qq_45092516 的回复:] [quote=引用 1 楼 jsx_SEVEN的回复:]for循环后面的分号去掉试试 没用，好烧脑啊[/quote] 加点空格啥的 看得清楚  #include <stdio.h> #include <math.h>  void main() { 	int i, j, num = 0, k; 	int a[4] = { 11,7,13,12 };  	for (i = 0; i < 4; i++) 	{ 		k = a[i]; 		int flag = 1; 		for (j = 2; j < k; j++) 		{ 			if (k % j == 0) 			{ 				flag = 0; 				break; 			} 		} 		if (flag == 1) 			num++; 	} 	printf("%d", num); } [/quote]  +++

user: user-0
content: 引用 7 楼 袁君元的回复:你这个程序是逻辑问题。你的程序中if(k%j==0)时，应该执行两个操作，先执行flag=0;表明k不是素数，然后就break跳出循环。所以这里应该写成: if(k%j==0){flag=0;break;}可以看看这篇有关逻辑的文章，对你会有帮助。https://blog.csdn.net/weixin_43956598/article/details/90049508 谢谢！！！！！！！！！！

user: user-3
content: 你这个程序是逻辑问题。你的程序中if(k%j==0)时，应该执行两个操作，先执行flag=0;表明k不是素数，然后就break跳出循环。所以这里应该写成: if(k%j==0){flag=0;break;}可以看看这篇有关逻辑的文章，对你会有帮助。https://blog.csdn.net/weixin_43956598/article/details/90049508

user: user-4
content: 引用 3 楼 qq_45092516 的回复:[quote=引用 1 楼 jsx_SEVEN的回复:]for循环后面的分号去掉试试 没用，好烧脑啊[/quote] 加点空格啥的 看得清楚  #include <stdio.h> #include <math.h>  void main() { 	int i, j, num = 0, k; 	int a[4] = { 11,7,13,12 };  	for (i = 0; i < 4; i++) 	{ 		k = a[i]; 		int flag = 1; 		for (j = 2; j < k; j++) 		{ 			if (k % j == 0) 			{ 				flag = 0; 				break; 			} 		} 		if (flag == 1) 			num++; 	} 	printf("%d", num); }

user: user-5
content: if(k%j==0) {     flag=0;     break; }

user: user-0
content: 引用 2 楼 focuslight的回复:第二个 for 循环那行不应加 ;  后面两行用 { } 还是有问题，我很难受

user: user-0
content: 引用 1 楼 jsx_SEVEN的回复:for循环后面的分号去掉试试 没用，好烧脑啊

user: user-5
content: 第二个 for 循环那行不应加 ;  后面两行用 { }

user: user-4
content: for循环后面的分号去掉试试
user-0 提问: 求助输入./a.out后无限自动输入^@这是什么情况？

回复:
user: user-1
content: 建议贴出代码～

user: user-2
content: Ctrl键和@键被压住了或坏了。

user: user-3
content: 引用 2 楼 AtourBabaev 的回复:引用 1 楼 拥抱Linux 的回复：程序代码是什么？就写了个普通的作业 现在gcc任意我写的文件./a.out都会自动输入这个^@ 莫名其妙 那就先把 该目录下的 文件 a.out 删除了。重新用 gcc 编译生成一个 .c 文件的 默认的 a.out 文件来运行， 试试有没有变化，能不能获得想要的运行结果。 还有一个就是，俺不太清楚 路径当中的 中文名 影不影响可执行文件的执行哦。

user: user-0
content: 引用 1 楼 拥抱Linux 的回复：程序代码是什么？就写了个普通的作业 现在gcc任意我写的文件./a.out都会自动输入这个^@ 莫名其妙

user: user-3
content: 程序代码是什么？
user-0 提问: 求解答（C语言）

回复:
user: user-0
content: 引用 2 楼 jsx_SEVEN的回复:写的有点乱，你试试能用不  #include <stdio.h> #include <stdlib.h>  int isthefinenumber(int n) { 	int i; 	int nums[3]; 	int x=0; 	nums[0] = n / 100; 	nums[1] = (n - nums[0] * 100) / 10; 	nums[2] = (n - nums[0] * 100 - nums[1] * 10);  //分解出百位、十位、个位 	 	for (int j = 10; j < 32; j++)//三位数开方的范围 	{ 		if (n == j * j)   //如果是完全平方数 		{ 			if (nums[0] == nums[1] || nums[0] == nums[2] || nums[1] == nums[2]) 				return 1; 		} 	}	 	return 0; }  int main() { 	int n,i; 	scanf("%d", &n); 	for ( i = 101; i < n; i++) 	{ 		if (isthefinenumber(i)) 			printf("%d  ", i); 	} }  大神，能不能帮我看看我新的那道题目，我是真的不会了

user: user-0
content: 引用 3 楼 自信男孩的回复:#include <stdio.h> #include <math.h>  int main(void) {     int num, tmp, i;      printf("Please input a three-digit number: ");     scanf("%d", &num);      while (num < 101 || num > 1000) {         printf("Input error, please try again: ");         scanf("%d", &num);     }      for (i = 101; i <= num; i++) {         tmp = (int)sqrt(i);         if (tmp * tmp == i)             printf("%d is a complete squares number(%d = %d x %d)\n", i, i, tmp, tmp);     }      return 0; }  供参考～ 谢谢大佬，我试过了，可以用的，多谢了

user: user-1
content: #include <stdio.h> #include <math.h>  int main(void) {     int num, tmp, i;      printf("Please input a three-digit number: ");     scanf("%d", &num);      while (num < 101 || num > 1000) {         printf("Input error, please try again: ");         scanf("%d", &num);     }      for (i = 101; i <= num; i++) {         tmp = (int)sqrt(i);         if (tmp * tmp == i)             printf("%d is a complete squares number(%d = %d x %d)\n", i, i, tmp, tmp);     }      return 0; }  供参考～

user: user-2
content: 写的有点乱，你试试能用不  #include <stdio.h> #include <stdlib.h>  int isthefinenumber(int n) { 	int i; 	int nums[3]; 	int x=0; 	nums[0] = n / 100; 	nums[1] = (n - nums[0] * 100) / 10; 	nums[2] = (n - nums[0] * 100 - nums[1] * 10);  //分解出百位、十位、个位 	 	for (int j = 10; j < 32; j++)//三位数开方的范围 	{ 		if (n == j * j)   //如果是完全平方数 		{ 			if (nums[0] == nums[1] || nums[0] == nums[2] || nums[1] == nums[2]) 				return 1; 		} 	}	 	return 0; }  int main() { 	int n,i; 	scanf("%d", &n); 	for ( i = 101; i < n; i++) 	{ 		if (isthefinenumber(i)) 			printf("%d  ", i); 	} }

user: user-3
content: 用折半查找，计算出平方是否等于输入的整数就可以了。
user-0 提问: 求解！！！

回复:
user: user-0
content: 额，没定义！我搞忘了怎么定义

user: user-1
content: 需要提供更多的代码，起码是locate的函数定义，这样才能找出error所在。

user: user-2
content: 第一句错误信息说的是，locate 是未定义的标识符。 第二句错误信息说的是，不能将返回值类型 int 转换为 struct BiNode *。也就是说，q = locate(tree, 'B');  这句赋值失败。 根据错误提示信息，查查代码哪里需要调整吧。
user-0 提问: C语言关于字符数组的问题

回复:
user: user-1
content: 调用函数时的参数应该传入整个数组，printf("%d\n", strrindex(s, t)); s[10],t[2],都只是单个元素，还有就是，定义的s[10],是有10个元素，s[0]~s[9]
user-0 提问: c语言代码

回复:
user: user-1
content: 引用 5 楼 weixin_45091724 的回复：[quote=引用 4 楼 拥抱Linux的回复:]是手滑了吗？ 「main」敲成了「main1」？  关于 main 返回值的问题，现在有写编译器会对 void main() 提出警告。 从代码的逻辑上来说，没有问题。 另外，建议把变量ch的类型定义为int型。  #include <stdio.h>  int main(void) { 	int n = 0; 	int ch; 	while ((ch = getchar()) != '\n') { 		n++; 	} 	printf("%d", n); 	return 0; }  可是我c++编译出来还是有错误，在    int main（void）这一行[/quote]你这个写法不对，要么是int main（）后面有个return 0要么是main(void) 没有返回值

user: user-2
content: 引用 5 楼 weixin_45091724 的回复:可是我c++编译出来还是有错误，在    int main（void）这一行 错误信息是什么？

user: user-0
content: 引用 4 楼 拥抱Linux的回复:是手滑了吗？ 「main」敲成了「main1」？  关于 main 返回值的问题，现在有写编译器会对 void main() 提出警告。 从代码的逻辑上来说，没有问题。 另外，建议把变量ch的类型定义为int型。  #include <stdio.h>  int main(void) { 	int n = 0; 	int ch; 	while ((ch = getchar()) != '\n') { 		n++; 	} 	printf("%d", n); 	return 0; }  可是我c++编译出来还是有错误，在    int main（void）这一行

user: user-2
content: 是手滑了吗？ 「main」敲成了「main1」？  关于 main 返回值的问题，现在有写编译器会对 void main() 提出警告。 从代码的逻辑上来说，没有问题。 另外，建议把变量ch的类型定义为int型。  #include <stdio.h>  int main(void) { 	int n = 0; 	int ch; 	while ((ch = getchar()) != '\n') { 		n++; 	} 	printf("%d", n); 	return 0; }

user: user-0
content: 引用 1 楼 user-3的回复:代码贴出来------ #include <stdio.h> void main1() { int n=0; char ch; while((ch=getchar())!='\n') n++; printf("%d"，n); } 这是最后一个的

user: user-0
content: #include <stdio.h> void main1() { 	int n=0; 	char ch; 	while((ch=getchar())!='\n') 		n++; 	printf("%d"，n); } 这是最后一个的

user: user-3
content: 代码贴出来------
user-0 提问: 求助

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h>  int main() { 	int n; 	int i, j; 	int PriDiagonal = 0;  //主对角线和 	int DepDiagonal = 0;  //副对角线和 	scanf("%d", &n); 	int **matrix = (int*)malloc(n * sizeof(int*)); 	for (i = 0; i < n; i++) 	{ 		matrix[i] = (int *)malloc(n * sizeof(int)); 		for (j = 0; j < n; j++) 		{ 			scanf("%d", &matrix[i][j]); 		} 	} 	for ( i = 0; i < n; i++) 	{ 		PriDiagonal += matrix[i][i]; 		DepDiagonal += matrix[i][n - i-1]; 	} 	printf("%d %d", PriDiagonal, DepDiagonal); }
user-0 提问: 想问一下，哪里错了，怎么改

回复:
user: user-1
content: #include<stdio.h> #include<malloc.h>  typedef struct student {     int num;     char name[9];     char sex[3];     int age;     struct student *next; }stu; //stu *create;  //int create(stu *head) stu *create(void) {     stu *p1,*p2,*head=NULL;     p1=(stu *)malloc(sizeof(stu));     head=p1;     //*p1->num;     //p1->num;     while(1)     {         printf("please enter your num:");         scanf("%d",&p1->num);         if(p1->num==0) break;         printf("please enter your name:");         scanf("%s",p1->name);         printf("please enter your sex:");         scanf("%s",p1->sex);         printf("please enter your age:");         scanf("%d",&p1->age);         p2=p1;         p1=(stu *)malloc(sizeof(stu));         p2->next=p1;     }     p2->next=NULL;     free(p1);     return(head); }  int main(void) {     stu *head=NULL;     head=create();     return 0; }  供参考～

user: user-2
content: 你这个程序看起来，很明显的程序结构由问题呀！你怎么在main函数体的最开始实现了creat功能，并返回head，然后再后面又写了creat函数的调用。好混乱；还有就是自定义函数的声明和函数的调用，他们里面的参数列表都是一致，你怎么在声明时直接写成了stu *create; 说明你对自定义函数的声明、调用、实现没有弄明白，可以看看这篇文章，学习一下https://blog.csdn.net/weixin_43956598/article/details/90055036 附上修改后的代码：  #include<stdio.h> #include<malloc.h> typedef struct student { 	int num; 	char name[9]; 	char sex[3]; 	int age; 	struct student *next; } stu; stu *create() { 	stu *p1,*p2,*head=NULL; 	p1=(stu *)malloc(sizeof(stu)); 	head=p1; 	//*p1->num;怎么会有这种写法呢，你是要输入还是输出还是赋值呀！  	while(1) { 		printf("please enter your num:"); 		scanf("%d",&p1->num); 		if(p1->num==0) break; 		printf("please enter your name:"); 		scanf("%s",p1->name); 		printf("please enter your sex:"); 		scanf("%s",p1->sex); 		printf("please enter your age:"); 		scanf("%d",&p1->age); 		p2=p1; 		p1=(stu *)malloc(sizeof(stu)); 		p2->next=p1; 	} 	p2->next=NULL; 	free(p1); 	return(head); } int main() { 	stu *head=NULL; 	head=create(); 	return 0; }

user: user-3
content: main函数的参数是固定的，不能自定义

user: user-4
content: 首先 你向main函数里传入了参数*head 又在主函数里定义了*head 这是参数重定义 emmm然后剩下的代码乱糟糟 不知道你想要做什么

user: user-5
content: main函数好像不能这样带参的，你也不能用其他的函数调用这个main函数呀，然后while里面有一个return（head）不对呀，主函数的返回值是int类型，类型都对不上
user-0 提问: 求助txt大数据文件处理

回复:
user: user-1
content: bat脚本不会。不过写个简单的控制台程序也能满足你的要求。 open infile; open outfile; while( getline) {   removespace();   write into outfile; }

user: user-0
content: 请问有人能提供一下.bat脚本源码吗？我自己写了一个只能处理掉空格，而且不能处理太大型的文件
user-0 提问: 刷PATA1012遇到的问题，连续调用两次以上的sort函数就会出现段错误，求解？

回复:
user: user-0
content: 引用 2 楼 Italink 的回复:比较函数有问题，拿cmpE来说，如果a.grade[2] == b.grade[2]，函数有返回值吗？需要保证在逻辑的最后一行是return  bool cmpE(student a, student b) { 	if (a.grade[2] != b.grade[2]) 		return a.grade[2] > b.grade[2]; }  谢谢了，就是这个原因，修改后就成功了。

user: user-1
content: 比较函数有问题，拿cmpE来说，如果a.grade[2] == b.grade[2]，函数有返回值吗？需要保证在逻辑的最后一行是return  bool cmpE(student a, student b) { 	if (a.grade[2] != b.grade[2]) 		return a.grade[2] > b.grade[2]; }

user: user-2
content: 一般是入参传得有问题，自己打印下sort的入参就知道了
user-0 提问: 顺序表实现A=AUB，求大神帮忙看一下，问题出在哪里？

回复:
user: user-1
content: 粗心了  int Insert_SequenList(SequenList * L, elemtype x, int i) { 	int j; 	if (L->last == MAXSIZE - 1)		//Error: = -> == 		return 0; 	if (i<1 || i>L->last + 2) 		return -1; 	for (j = L->last; j >= i - 1; j--) 		L->data[j + 1] = L->data[j]; 	L->data[i - 1] = x; 	L->last = L->last + 1; 	return 1; }

user: user-0
content: 引用 1 楼 user-1 的回复：粗心了  int Insert_SequenList(SequenList * L, elemtype x, int i) { 	int j; 	if (L->last == MAXSIZE - 1)		//Error: = -> == 		return 0; 	if (i<1 || i>L->last + 2) 		return -1; 	for (j = L->last; j >= i - 1; j--) 		L->data[j + 1] = L->data[j]; 	L->data[i - 1] = x; 	L->last = L->last + 1; 	return 1; } 十分感谢，我自己找了很久没找到
user-0 提问: E0167	"const wchar_t *" 类型的实参与 "TCHAR *" 类型的形参不兼

回复:
user: user-0
content: 找到问题了花了变天时间唉 WinMain 多了个A

user: user-0
content: 这里也没问题

user: user-0
content: 引用 1 楼 user-1 的回复:int CDECL MessageBoxPrintf(const TCHAR* szCaption, const TCHAR* szFormat, ...)  改后出现这个

user: user-1
content: int CDECL MessageBoxPrintf(const TCHAR* szCaption, const TCHAR* szFormat, ...)
user-0 提问: 数组分 整数负数

回复:
user: user-0
content: 引用 2 楼 袁君元 的回复：输出负数的时候，因为负数只有k个，而且数组下标是从0开始的。所以应该是i<k，如果等于k，就会输出a[k]的值，而它的值是我们初始化的0，不是你输入的0。好的，谢谢

user: user-1
content: 输出负数的时候，因为负数只有k个，而且数组下标是从0开始的。所以应该是i<k，如果等于k，就会输出a[k]的值，而它的值是我们初始化的0，不是你输入的0。

user: user-2
content: 你输出的时候等于k了，这个0不是你输入的那个0，是初始化的0，也就是说你多输出了一个
user-0 提问: 这个C语言为什么运行不了?

回复:
user: user-1
content: 这是语法基础知识，当我们定义一个数组的时候，它的维度是一个常量，也就是说值是确定的，当是变量的时候，我们不能这样定义数组。而是需要动态申请空间: int *b=(int*)malloc(sizeof(int)*N);//动态申请长度为N的一维数组b //动态申请二维数组 int **a=(int **)malloc(sizeof(int*)*M);//先申请M行的空间  for(i=0; i<=M-1; i++) //对于每一行动态申请 	a[i]=(int*)malloc(sizeof(int)*N);

user: user-2
content: VC6.0不支持变长数组

user: user-3
content: 你的M没有给它指定值，在visual c++的编译器不知道多大，所以不能分配空间
user-0 提问: 求助

回复:
user: user-1
content: 首先，我们来看看for循环中，它实现的是100到1000之间的每一个数，求每个数各个位置上的数之和，while循环就是实现的计算一个数的各个位置上的数之和，理解到这一点就知道为什么每次在while之前都要把s初始化为0，因为s是存储当前数字i的各个位置上的数之和，如果不初始化，就会在之前的s上进行累加，这样的s得到的是100到当前i之前的所有数的各个位置上的数之和。 也正是因为对程序的解读，发现一个问题，就是你的程序是先计算每个数各个位置上的数之和s，然后判断s是否为5，如果不是，就继续计算下一个数，如果是，就count++，从你的程序看来，你是统计的100到1000之间，满足各个位置上的数之和为5的数的个数了。这个好像和你给的题意不符合吧？但是我看你给的题意是统计个位数字为5的数吧，如果是这样的话，你的for循环里面改为:s=0;k=i;s=k%10;//只截取个位上的数即可。后面的不变。

user: user-2
content: k复制了i的值，%10可以得到一个数的最低位比如1234%10=4，/10可以消除最低位，比如1234/10=123，s用作累加求和，所以那个while循环的作用就显而易见了，求数字i各个位数相加的和，你说s一直等于0是不正确的
user-0 提问: 动态开辟

回复:
user: user-1
content: 你应该要问的是下面这两个有没有区别，个人感觉没有 calloc(1,sizeof(char[100])); calloc(100,sizeof(char));

user: user-2
content: 前者是申请大小为n*100的二维数组，后者是申请长度为n的一维数组

user: user-1
content: 当然有区别，sizeof(char)是1，sizeof(char[100])是100
user-0 提问: 怎么把这个代码 改成纯c，并显示以下结果（只要三个stack[0];stack[1];stack[2]）。

回复:
user: user-1
content: 引用 3 楼 zfr0626 的回复：引用 2 楼 袁君元 的回复：c和c++本质上没什么区别，只是在某些头文件，库函数的使用，输入输出函数方面有些区别，你给的程序中第一个头文件iostream是标准的c++输入输出头文件，在纯c里面是不能有的。其他的就是c的写法我可以问一下，怎样去除stack3和四吗，只显示三个你先说一下你的题意是什么

user: user-0
content: 引用 2 楼 袁君元 的回复：c和c++本质上没什么区别，只是在某些头文件，库函数的使用，输入输出函数方面有些区别，你给的程序中第一个头文件iostream是标准的c++输入输出头文件，在纯c里面是不能有的。其他的就是c的写法我可以问一下，怎样去除stack3和四吗，只显示三个

user: user-1
content: c和c++本质上没什么区别，只是在某些头文件，库函数的使用，输入输出函数方面有些区别，你给的程序中第一个头文件iostream是标准的c++输入输出头文件，在纯c里面是不能有的。其他的就是c的写法

user: user-0
user-0 提问: 论坛如何联系各位大神，想学习，但是0基础

回复:
user: user-1
content: ubuntu操作系统是学习C语言的平台，想学C语言，你可以看下《 C语言入门经典》其他书就不要看了，买了。都他妈的写的不知道是什么程序，运行都运行不了。记住了，在linux平台下的个个操作系统都是可以学习C语言的。但是在微软开发的平台就不要学C语言了，因为那是两马事，想要成大神，这些就要记住，不想成大神。这些你可以当我没说。

user: user-2
content: 你吧那个C语言基础读完，简单代码敲完，在这个过程中不懂的就问，还不懂的，继续读下去，不懂也没事，找个视频教程更好，读完了，就入门了

user: user-3
content: 建立先买讲解C/C++语言基础知识的书来看看，先系统学习一下，然后自己动手编写程序，如果有问题的话，可以在论坛中提问，这样才会帮助你进步！只要是真心想学好这门语言的，我们都欢迎你提问哦！

user: user-4
content: 引用 楼主 qq_21794639 的回复:不知道从何学起，一片空白，因为0基础，看到各位大神的文章，压根看不懂，有没有大神赐教，从那里开始入门！也无法留联系的东西，好麻烦  没有免费的东西，有付出才有收获，努力或者金钱。

user: user-5
content: Visual C++ 2010 Express简体中文版http://pan.baidu.com/s/1bnwRVLt

user: user-5
content: C语言教程（附带C语言100例）http://download.csdn.net/detail/zhao4zhong1/8830817

user: user-6
content: 想自学？ 网上很多免费的 教程、视频，从最基础的 C语言入门 之类的开始学，先了解基本的概念。 跟着教程敲代码，看运行结果，找找练习题做做，上网发帖提问等等，一点一点积累才有收获。 想跟着别人学的话，如果不是在学校里，那就直接去报个培训班，更有针对性和计划性。 ～
user-0 提问: C语言数组小问题求解答

回复:
user: user-1
content: 其实我们定义了一个数组，主要是定义了它的首地址和数组的长度，这里虽然你定义的是char a[1]，指定了a的长度为1，但是实际上后面的地址空间还是存在的，只是正常情况下我们没有对它们进行操作，而我们知道scanf都是以回车符，制表符或者空格来停止数据的读取的，所以当你输入很长的字符串的时候，scanf就一直在读取字符，而你定义的数组长度为1，所以多出来的字符就非法的访问了后面本来就存在的地址空间，然后并把它们存入这些地址空间里面。所以当你执行printf语句的时候，由于是以%s的格式输出的，当遇到\0的时候才停止输出，所以输出的结果就是你输入的字符串。

user: user-2
content: 2个问题，其一，c/c++不做越界检查，所以你访问越界不会报错，其二是scanf只是单纯的根据地址输入数据，并没有考虑到数据的大小，所以其实用scanf是不安全的，可以用scanf_s替换，增加一个参数，控制长度，至于你问怎么知道字符串的长度，char[]字符串以'\0'结尾

user: user-3
content: 你这种情况应该用用scanf_s，保证读入的长度不会超过缓冲区大小

user: user-4
content: 错误原因楼上的已经说的差不多了。 惯常的做法是： #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<windows.h> int main(int argc, const char *argv[]) { char a[1024];//给定一个足够长的数组 while (1) { memset(a, 0, 1024); printf("请输入字符串："); scanf("%s", a); printf("输出字符串：%s\n", a); Sleep(1000); } return 0; }
user-0 提问: C语言求结果，求大神

回复:
user: user-1
content: 书上给的答案有错。

user: user-0
content: 引用 5 楼 Italink 的回复：引用 3 楼 浮沉之殇 的回复:[quote=引用 1 楼 Italink 的回复：]答案是a=7，b=3，不要问我为什么，我就运行了一下我也是得出这样的结果，可是没有答案啊 漏了下面还有个a=a^b[/quote]呵呵呵

user: user-2
content: 引用 3 楼 浮沉之殇 的回复:引用 1 楼 Italink 的回复：答案是a=7，b=3，不要问我为什么，我就运行了一下我也是得出这样的结果，可是没有答案啊 漏了下面还有个a=a^b

user: user-0
content: 引用 2 楼 jsx_SEVEN 的回复：应该是B吧 a^b得到新的a，b^新的a得到新的b,两个新的异或，得到最终的a，图上的二进制数也表示出来了 牛啊，谢谢

user: user-0
content: 引用 1 楼 Italink 的回复：答案是a=7，b=3，不要问我为什么，我就运行了一下我也是得出这样的结果，可是没有答案啊

user: user-3
content: 应该是B吧 a^b得到新的a，b^新的a得到新的b,两个新的异或，得到最终的a，图上的二进制数也表示出来了

user: user-2
content: 答案是a=7，b=3，不要问我为什么，我就运行了一下

user: user-0
content: 引用 7 楼 袁君元 的回复：书上给的答案有错。我知道怎么算了，没有错
user-0 提问: 有没有大佬帮帮我 我看不懂

回复:
user: user-0
content: 引用 5 楼 打杂的9527 的回复：第一张图应该是涉及了%x的隐式转换，还有-1的存储形式  char c= -1; //c -> 11111111 //char是8位  这里猜测%x应该是将char或者unsigned char转化为int(32位)然后进行输出，所以显示的是ffffffff，而%d应该是没有进行相应的转化直接输出了 具体的需要自己查一下，毕竟我不会去关注这种转化的，感觉不实用，有可能导致其他问题。  第二题涉及结构体的内存对齐  //sizeof char -> 1 //sizeof int -> 4 //sizeof short -> 2 //但是sizeof node -> 12 //为什么是12，因为结构体的顺序为char,int,short,因为要对齐，你不能让int跟char对齐，数据必须保持完整，所以char应该要占4位，跟int一致，同理，short也需要对齐int //内存格式应该是01 00 00 00-02 00 00 00-03 00 00 00,01后面的数据是无意义的，03 00后面的数据也是无意义的 //当然如果你换一个位置结果就会不同了，比如node的顺序为int,char,short,那么sizeof node -> 8，具体的自己搜了，以上只是我自己记忆中的理解 //这就是内存对齐的结果 //同理sizeof n -> 8 //初始化后，我们就可以直接将a的内存写出来了，这里我就不写了 //01 00 00 00-02 00 00 00 00-03 00 00 00-04 00 00 00-05 00 00 00-06 00 00 00 //char*表示一位一位的移动，所以(char*)a + 2*8 的指针指向05， //然后又把指针强制转换为int类型，所以指向的就是05 00 00 00 //最后结果就是把5设置为100了  第四题考的是long和int在内存中的存储方式  //没啥好说的内存应该是78 69 79 6f 75 4c 69 6e-75 78 00 00 //倒着存的 //&num->取num的首地址，(char*)&num,取num的首地址，强制转换为char*的类型，+i表示向后偏移多少个字节量，比如+2就应该指向79   ps:linux上的c编程不熟，不保证一定对多谢大佬嗷

user: user-0
content: 第一个题书出来的结果是ffffffff ffffffff 255为啥啊

user: user-0
content: 引用 1 楼 neu_ZZM 的回复：问问题好歹说自己哪个点不会，哪有一下扔一大堆图上来的第二张图main函数里面第二个语句 char*a指向的是{1,2,3}还是啥 这一整个语句是啥意思啊

user: user-0
content: 第四张图ch =*((char*)&num +i)这个语句是啥意思

user: user-1
content: 问问题好歹说自己哪个点不会，哪有一下扔一大堆图上来的

user: user-2
content: 第一张图应该是涉及了%x的隐式转换，还有-1的存储形式  char c= -1; //c -> 11111111 //char是8位  这里猜测%x应该是将char或者unsigned char转化为int(32位)然后进行输出，所以显示的是ffffffff，而%d应该是没有进行相应的转化直接输出了 具体的需要自己查一下，毕竟我不会去关注这种转化的，感觉不实用，有可能导致其他问题。  第二题涉及结构体的内存对齐  //sizeof char -> 1 //sizeof int -> 4 //sizeof short -> 2 //但是sizeof node -> 12 //为什么是12，因为结构体的顺序为char,int,short,因为要对齐，你不能让int跟char对齐，数据必须保持完整，所以char应该要占4位，跟int一致，同理，short也需要对齐int //内存格式应该是01 00 00 00-02 00 00 00-03 00 00 00,01后面的数据是无意义的，03 00后面的数据也是无意义的 //当然如果你换一个位置结果就会不同了，比如node的顺序为int,char,short,那么sizeof node -> 8，具体的自己搜了，以上只是我自己记忆中的理解 //这就是内存对齐的结果 //同理sizeof n -> 8 //初始化后，我们就可以直接将a的内存写出来了，这里我就不写了 //01 00 00 00-02 00 00 00 00-03 00 00 00-04 00 00 00-05 00 00 00-06 00 00 00 //char*表示一位一位的移动，所以(char*)a + 2*8 的指针指向05， //然后又把指针强制转换为int类型，所以指向的就是05 00 00 00 //最后结果就是把5设置为100了  第四题考的是long和int在内存中的存储方式  //没啥好说的内存应该是78 69 79 6f 75 4c 69 6e-75 78 00 00 //倒着存的 //&num->取num的首地址，(char*)&num,取num的首地址，强制转换为char*的类型，+i表示向后偏移多少个字节量，比如+2就应该指向79   ps:linux上的c编程不熟，不保证一定对
user-0 提问: 【求助】C语言ATM

回复:
user: user-1
content: 这东西写出来给你是要钱的。不是不会写

user: user-2
content: 你说吧，你是出几万让人做这个系统

user: user-3
content: 我相信你是等不到人帮你写的

user: user-4
content: 引用 8 楼 weixin_45064505的回复:[quote=引用 7 楼 user-4的回复:]那假如别人帮你写了，你就会写了？你得清楚老师让你做这个的意义 至少我还能看看    。。。。。[/quote] 万事开头难，躲是躲不掉的，话就这么多了，你要么接着等，要么靠自己

user: user-0
content: 引用 7 楼 user-4的回复:那假如别人帮你写了，你就会写了？你得清楚老师让你做这个的意义 至少我还能看看    。。。。。

user: user-4
content: 那假如别人帮你写了，你就会写了？你得清楚老师让你做这个的意义

user: user-0
content: 引用 5 楼 user-4的回复:[quote=引用 4 楼 weixin_45064505的回复:][quote=引用 3 楼 user-4的回复:][quote=引用 1 楼 636f6c696e 的回复:] 你说吧，你是出几万让人做这个系统 笑抽   没个十万八万的，没人给你做这个，有钱什么都好说[/quote] 哥啊    就简单的C做出来就行    能用codeblocks放出来就行啊[/quote] 你阔能没明白我的意思，如果你觉得简单，为什么不自己写呢，这个论坛愿意帮人解决问题的人很多，但没人愿意帮别人代写作业，换句话说，你自己都不愿意写的东西，别人有义务帮你写吗？就凭一句大佬？[/quote] 我不是不愿意写   而是不会写

user: user-4
content: 引用 4 楼 weixin_45064505的回复:[quote=引用 3 楼 user-4的回复:][quote=引用 1 楼 636f6c696e 的回复:] 你说吧，你是出几万让人做这个系统 笑抽   没个十万八万的，没人给你做这个，有钱什么都好说[/quote] 哥啊    就简单的C做出来就行    能用codeblocks放出来就行啊[/quote] 你阔能没明白我的意思，如果你觉得简单，为什么不自己写呢，这个论坛愿意帮人解决问题的人很多，但没人愿意帮别人代写作业，换句话说，你自己都不愿意写的东西，别人有义务帮你写吗？就凭一句大佬？

user: user-0
content: 引用 3 楼 user-4的回复:[quote=引用 1 楼 636f6c696e 的回复:] 你说吧，你是出几万让人做这个系统 笑抽   没个十万八万的，没人给你做这个，有钱什么都好说[/quote] 哥啊    就简单的C做出来就行    能用codeblocks放出来就行啊

user: user-4
content: 引用 1 楼 636f6c696e 的回复:你说吧，你是出几万让人做这个系统 笑抽   没个十万八万的，没人给你做这个，有钱什么都好说

user: user-0
content: 引用 1 楼 636f6c696e的回复:你说吧，你是出几万让人做这个系统 哪有啊   这是我们考试题    用简单的C语言做出来就行了      大佬会不会啊   帮帮忙呗
user-0 提问: 存10个小于等于10^1000000的数

回复:
user: user-0
content: 引用 4 楼 lin5161678 的回复:引用 3 楼 Italink 的回复:直接当成字符串来输入一行就行了c语言用gets，C++getline，用法百度gets废弃 用fgets或者gets_s 引用 5 楼 袁君元 的回复:int类型的数不超过10的9次方，long long型不超过10的18次方，10的1000000次方远远超出了整型的范围，这种情况下，我们就用字符串来存储数据，而字符串有两种定义方式: 一种是字符数组，char str[1000001]，注意字符数组的长度必须大于1000000，然后可以直接用scanf(“%s”,str);或者说gets(str);读入字符串。 第二种是string类，这是c++里面的，用getline(cin,str)或者cin.getline(str)读入字符串麻烦您打了那么多字，谢谢前辈

user: user-1
content: int类型的数不超过10的9次方，long long型不超过10的18次方，10的1000000次方远远超出了整型的范围，这种情况下，我们就用字符串来存储数据，而字符串有两种定义方式: 一种是字符数组，char str[1000001]，注意字符数组的长度必须大于1000000，然后可以直接用scanf(“%s”,str);或者说gets(str);读入字符串。 第二种是string类，这是c++里面的，用getline(cin,str)或者cin.getline(str)读入字符串

user: user-2
content: 引用 3 楼 Italink 的回复:直接当成字符串来输入一行就行了c语言用gets，C++getline，用法百度gets废弃 用fgets或者gets_s

user: user-3
content: 直接当成字符串来输入一行就行了c语言用gets，C++getline，用法百度

user: user-0
content: 引用 1 楼 江月待潮生 的回复:好大的数，用字符串吧字符串咋存啊，这数吓到我了，开始以为一百万

user: user-4
content: 好大的数，用字符串吧
user-0 提问: 《初学者打印杨辉三角》

回复:
user: user-0
content: 引用 2 楼 lin5161678 的回复:#include <stdio.h> int main(int argc, char *argv[]) { 	int arr[15] = {1}; 	for(int i=0; i<sizeof arr/sizeof *arr; ++i) 	{ 		for(int j=i; j>0; --j) 		{ 			arr[j]+=arr[j-1]; 		} 		for(int j=0; j<i; ++j) 		{ 			printf("%5d", arr[j]); 		} 		puts("    1"); 	} 		 	return 0; }      受教了，感谢

user: user-1
content: #include <stdio.h> int main(int argc, char *argv[]) { 	int arr[15] = {1}; 	for(int i=0; i<sizeof arr/sizeof *arr; ++i) 	{ 		for(int j=i; j>0; --j) 		{ 			arr[j]+=arr[j-1]; 		} 		for(int j=0; j<i; ++j) 		{ 			printf("%5d", arr[j]); 		} 		puts("    1"); 	} 		 	return 0; }

user: user-2
content: [code=c][ int main() { 	int pnum[10]{ 1,1,1,1,1,1,1,1,1,1 }; 	int anum[10]; 	for (int i = 0; i < 10; i++) 	{ 		for (int j = 0; j <= i; j++) 		{ 			anum[j] = pnum[j]; 				if (j > 0 && j < i) 					anum[j] = pnum[j - 1] + pnum[j]; 			std::cout << anum[j]<<" "; 		} 		for (int k = 0; k <= i; k++) 			pnum[k] = anum[k]; 		std::cout << std::endl; 	} 	return 0; }/code]
user-0 提问: 大佬们，这个代码错在哪

回复:
user: user-1
content: 不明白你写这个代码的目的是什么，你这个里面的i每执行一次i++，它的值都会发生变化。 你的程序错误在于你的main函数的类型是int型，那你就需要返回一个值，应该加上return 0; 如果你写成void main()的话，因为它是void类型，就不需要返回值了！你可以看看有关函数这篇文章https://blog.csdn.net/weixin_43956598/article/details/90055036

user: user-2
content: 这个在实际开发中，能写成这个样子？

user: user-3
content: int j = (++i) + (++i) + (++i); 这样的在一条语句中试图多次改变、引用同一个变量的行为，俗称未定义行为，也就是说，结果是未定义的，具体结果要看具体的编译器和环境。这都是坛子里的月经提问了，没有意义的。强烈建议「避免」写这样的代码。

user: user-4
content: main标明了返回值为int，但是你没有返回值。
user-0 提问: 新人小白，求大神帮忙，用基础函数编码

回复:
user: user-0
content: 引用 1 楼 user-2的回复:看标题jio得你可能不是伸手党  #include<stdio.h> void reverse(int arr[], int len) { 	int tmp; 	for (int i = 0; i < len / 2; i++) {		//折半，首尾元素交换 		tmp = arr[i]; 		arr[i] = arr[len - i - 1]; 		arr[len - i - 1] = tmp; 	} } int main(){	 	int arr[5] = { 8,6,5,4,1 }; 	int len = 5; 	reverse(arr, len); 	for (int i = 0; i < len; i++) 		printf("%d ", arr[i]); 	return 0; }  嗯，谢谢，但我们就学了for，whil，if等基础函数，像你写的arr，reverse那些都还没

user: user-1
content: 引用 3 楼 ｀木兮木。 的回复：[quote=引用 2 楼 袁君元的回复:]我之前写了好几个经典的排序算法，你可以先学学，然后再自己编写，这些文章通俗易懂 sort函数排序 https://blog.csdn.net/weixin_43956598/article/details/90241551 冒泡排序 https://blog.csdn.net/weixin_43956598/article/details/90176251 选择排序 https://blog.csdn.net/weixin_43956598/article/details/90178197 插入排序 https://blog.csdn.net/weixin_43956598/article/details/90181567 快速排序 https://blog.csdn.net/weixin_43956598/article/details/90215135 希尔排序 https://blog.csdn.net/weixin_43956598/article/details/90234480 有什么不懂可以问哦！ 嗯嗯，谢谢哈，我也想早点入门。[/quote]非常欢迎真心想学习的道友

user: user-0
content: 引用 2 楼 袁君元的回复:我之前写了好几个经典的排序算法，你可以先学学，然后再自己编写，这些文章通俗易懂 sort函数排序 https://blog.csdn.net/weixin_43956598/article/details/90241551 冒泡排序 https://blog.csdn.net/weixin_43956598/article/details/90176251 选择排序 https://blog.csdn.net/weixin_43956598/article/details/90178197 插入排序 https://blog.csdn.net/weixin_43956598/article/details/90181567 快速排序 https://blog.csdn.net/weixin_43956598/article/details/90215135 希尔排序 https://blog.csdn.net/weixin_43956598/article/details/90234480 有什么不懂可以问哦！ 嗯嗯，谢谢哈，我也想早点入门。

user: user-1
content: 我之前写了好几个经典的排序算法，你可以先学学，然后再自己编写，这些文章通俗易懂 sort函数排序 https://blog.csdn.net/weixin_43956598/article/details/90241551 冒泡排序 https://blog.csdn.net/weixin_43956598/article/details/90176251 选择排序 https://blog.csdn.net/weixin_43956598/article/details/90178197 插入排序 https://blog.csdn.net/weixin_43956598/article/details/90181567 快速排序 https://blog.csdn.net/weixin_43956598/article/details/90215135 希尔排序 https://blog.csdn.net/weixin_43956598/article/details/90234480 有什么不懂可以问哦！

user: user-2
content: 看标题jio得你可能不是伸手党  #include<stdio.h> void reverse(int arr[], int len) { 	int tmp; 	for (int i = 0; i < len / 2; i++) {		//折半，首尾元素交换 		tmp = arr[i]; 		arr[i] = arr[len - i - 1]; 		arr[len - i - 1] = tmp; 	} } int main(){	 	int arr[5] = { 8,6,5,4,1 }; 	int len = 5; 	reverse(arr, len); 	for (int i = 0; i < len; i++) 		printf("%d ", arr[i]); 	return 0; }
user-0 提问: mktime()函数的奇怪现象

回复:
user: user-0
content: 引用 2 楼 user-1 的回复:估计是两个版本实现不一致吧，可以看看RN有没有提到  RN是什么东东？

user: user-1
content: 估计是两个版本实现不一致吧，可以看看RN有没有提到

user: user-0
content: 刚刚发现这个转换居然还受到系统时间格式的影响，我centos 6.5设置的是24小时显示格式，centos 7.5设置的是12小时显示格式，结果在centos 7.5上转换后总是要比原来多13个小时的时间，重新设置为24小时显示格式后，再使用上面的测试函数测试就显示正确了，不知道怎么回事？哪位大牛能解释一下？
user-0 提问: C语言程序设计，谢谢！

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <math.h>  int prime(int m) {     int i;     for(i=2;i<=sqrt(m);i++)     {         if(m%i==0)             return 0;     }     return 1; }  void sort(int a[],int n) {     int i,j,temp;     for(i=0;i<n;i++)     {         for(j=0;j<i;j++)         {             if(a[j]<a[i])             {                 temp=a[j];                 a[j]=a[i];                 a[i]=temp;             }         }     } }  int main() {     int a[10]={61,31,3,169,91,143,18,37,19,2};     int i,j=0,k=0,p[10],np[10];     for(i=0;i<10;i++)     {         if(prime(a[i]))             p[j++]=a[i];         else np[k++]=a[i];     }     sort(p,j);     sort(np,k);     for(i=0;i<j;i++)         printf("%d ",p[i]);     printf("\n");     for(i=0;i<k;i++)         printf("%d ",np[i]);     return 0; }
user-0 提问: 实验课

回复:
user: user-1
content: 定义排序规则：奇数大于偶数，同奇用偶比较值大小

user: user-2
content: 直接百度吧，有原题

user: user-3
content: Java: 遍历数组， Arrays.sort(), 反向遍历, Arrays.toString()等等， 编不出来了
user-0 提问: 新人请教，请救救我

回复:
user: user-1
content: ～ 定义语句中的 * 是表明变量 s 是一个字符指针，它指向一个字符。 ～ 后面单独对指针 s 使用 * （取值运算符，获取指针指向的值）的话，获得的是字符指针 s  指向的字符 'h'  。 ～ printf("%s\n",s);   中， 使用 %s  格式符 输出字符串的时候， 是根据 后面对应位置的参数所表示的 「地址值」 去输出字符串的，而 s 的值  就正是字符串 "hello" 的首地址。

user: user-2
content: printf中的*s是指s指向的内存里的值，不是地址。%s是值输出以某个地址开始的字符串，所以它是遇到'\0'停止输出。

user: user-3
content: %s对应的应是要输出字符串的首地址，即char*类型，*s就是取字符串的第一个字符，是char类型，所以输出*s要用%c

user: user-4
content: s是char *类型，*s是char类型，char类型输出是%c，且只能输出一个字符
user-0 提问: 利用指针将字符串中的大写字母转换成相应的小写字母，同时将小写字母转换成大写字母，其余字符不变。例如：“Abc ** Def###”将被转换为 “aBC ** d

回复:
user: user-0
content: 引用 7 楼 拥抱Linux的回复:[quote=引用 5 楼 weixin_45072608 的回复:] ，就是那个花括号 真正的问题是多了一句 p++; ， 但是直接按俺在2楼说的那样加花括号的话，会因为遇到了不是字母的字符而 p不++ 就进入了死循环。 俺当时忽略了存在非字母字符的情况，想到了单纯转换字母的问题。 所以，还是得把    p++;   放到 所有的 if 的外面，确保只要执行一次循环，就 p++ 一次才行。 ～[/quote] 我发现了，已经改正了

user: user-1
content: 一个p++就好了，并且放到最后，循环的最后

user: user-2
content: 引用 5 楼 weixin_45072608 的回复:，就是那个花括号 真正的问题是多了一句 p++; ， 但是直接按俺在2楼说的那样加花括号的话，会因为遇到了不是字母的字符而 p不++ 就进入了死循环。 俺当时忽略了存在非字母字符的情况，想到了单纯转换字母的问题。 所以，还是得把    p++;   放到 所有的 if 的外面，确保只要执行一次循环，就 p++ 一次才行。 ～

user: user-3
content: 你这个while循环中怎么有两个p++呢？当是大写字母时，你转化为小写后，你就p++，会跳过大写字母后的字符，这样就有可能会漏掉该字符的转化。你的程序逻辑应该是对于每一个字符检测是否为大小写字母，如果是就转化，转化后移动到下一个字符。所以只保留最后的那个p++即可！可以看看有关逻辑的文章，https://blog.csdn.net/weixin_43956598/article/details/90049508

user: user-0
content: 引用 4 楼 拥抱Linux的回复:[quote=引用 2 楼 拥抱Linux 的回复:] 每次循环， p++;  这句语句都执行了 2 次，所以 会 跳过一些字母。 建议养成把 代码块 用花括号 括起来的习惯， 即使只有一句语句 也 括起来，避免意外的错误。比如这里的：  if(){     *p += 32;     p++; }  :-) 不好意思，说错了，忘了还有其它字符，想成全是字母去了。 应该是把循环体里面的两个 if 合并成 一对 if - else if ，然后 最后 保留 一个 p++ ; 就可以了。 ～[/quote] ，就是那个花括号

user: user-2
content: 引用 2 楼 拥抱Linux 的回复:每次循环， p++;  这句语句都执行了 2 次，所以 会 跳过一些字母。 建议养成把 代码块 用花括号 括起来的习惯， 即使只有一句语句 也 括起来，避免意外的错误。比如这里的：  if(){     *p += 32;     p++; }  :-) 不好意思，说错了，忘了还有其它字符，想成全是字母去了。 应该是把循环体里面的两个 if 合并成 一对 if - else if ，然后 最后 保留 一个 p++ ; 就可以了。 ～

user: user-4
content: 另外多一句，你可能是把python的缩进规则带到C++里面来了

user: user-2
content: 每次循环， p++;  这句语句都执行了 2 次，所以 会 跳过一些字母。 建议养成把 代码块 用花括号 括起来的习惯， 即使只有一句语句 也 括起来，避免意外的错误。比如这里的：  if(){     *p += 32;     p++; }  :-)

user: user-4
content: 15行的p++是多余的，或者你在后面添一个continue也行
user-0 提问: 为什么c语言的循环跳不出去

回复:
user: user-1
content: 越界访问。肯定乱了。

user: user-2
content: 很有可能是修改了i的值。我也支持这种观点

user: user-2
content: 数组越界，可能修改了len的值？你在循环里打印一下len的值，看看是不是还是10；

user: user-3
content: ～ ～   1  楼 说得对！ ～

user: user-4
content: 你这个代码涉及对内存地址的操作，稍不注意就会导致内存问题，如果你是湘创建一个指定长度为len的数组话，你可以用malloc或者new动态申请内存空间，但是new容易造成内存泄露，所以最好还是用malloc: (1)假如申请长度为10的整型数组a,可以写成：int *a=(int*)malloc(sizeof(int)*10); (2)假如申请3行4列的二维整型数组b，可以写成： int **b=(int **)malloc(sizeof(int*)*M);//先申请M行的空间  for(i=0; i<=M-1; i++) //对于每一行动态申请 b[i]=(int*)malloc(sizeof(int)*N);

user: user-5
content: 这代码各种内存越界，有什么意义？ 死循环的原因是arr[1]的地址实质和i是一样的，也就是arr[1]=0执行后i会重置为0，导致死循环。 不同编译器运行结果不一定完全一致
user-0 提问: 【算法讨论】关于循环中多个i+1的优化

回复:
user: user-1
content: 没必要，这种层面编译器自己会做优化，而且你的优化效果有限

user: user-2
content: 多余的 这点东西不用你来考虑

user: user-0
content: 问题已经解决了，一位大佬告诉我这些细节优化编译器可以完成一部分，经过我的测试，确实如此，gcc编译器可以接受的优化参数: -O1,-O2,-O3,-Os 经过编译器优化后的代码速度甚至比“我那个方法”还快，那我的“优化”反而是在减慢程序，所以完全没必要这么做，保持代码高可读性应该是首要标准。

user: user-0
content: 引用 7 楼 真相重于对错的回复:o(4n)=o(n) 实际上无论怎么写，运行时间都没有差异，毕竟C语言太快了，可我就是不想让程序有冗余的计算，一步都不想，不知道这是不是病。。。。。。

user: user-3
content: o(4n)=o(n)

user: user-0
content: 我觉得我的例子误导大家了，现在重新写一个: for(int i=0;i<n;i++){     a[i]=x[i+1]-x[i];     b[i]=y[i+1]-y[i];     c[i]=z[i+1]-z[i];     d[i]=t[i+1]-t[i]; } 程序一个会计算4*n次i+1的计算。 被我“优化”后: int i=0;i1=1; while(i<n){     a[i]=x[i1]-x[i];     b[i]=y[i1]-y[i];     c[i]=z[i1]-z[i];     d[i]=t[i1]-t[i];     i=i1++; } 现在只有0次i+1的加法计算，但是多了n次复值操作，就是i=i1那里。  也就是说我把4*n次加法缩减为n次复值了，代价是多一个变量。

user: user-0
content: 引用 3 楼 陌上_桑的回复:你少了i++，不是引入了i1++吗？有什么优化？我是没看出来 程序有多个i+1(省略号处)，引入i1后可减少很多i+1的加法计算，转而只计算一次，那就是i1++

user: user-0
content: 引用 1 楼 user-6的回复:单就这个程序 (f(i+1)-f(i))+(f((i+1)+1)-f(i+1))=f(i+2)-f(i) 最后就剩下一头一尾了 用不上循环啊  然后其他的话，你可以把i相同的项放在一次循环里，然后多出来的头和尾在循环结束后计算。 并不是这样的，是我例子不恰当，改成a[i],b[i],c[i]或许能更好的表达我的意思。(但实际上我不用a[i]，因为a[i]等价于*(a+i)，我会直接用指针自加，像a++，*a=...这种，这样可以少算一次加法)

user: user-4
content: 你少了i++，不是引入了i1++吗？有什么优化？我是没看出来

user: user-5
content: 同意楼上，比如你算a=f(2)-f(1)，下一次循环就是算a=f(3)-f(2)，这样就重复算了f(2)，可以像楼上所述，进行优化，你那样做，并不能算是算法优化

user: user-6
content: 单就这个程序 (f(i+1)-f(i))+(f((i+1)+1)-f(i+1))=f(i+2)-f(i) 最后就剩下一头一尾了 用不上循环啊  然后其他的话，你可以把i相同的项放在一次循环里，然后多出来的头和尾在循环结束后计算。
user-0 提问: linux用Freetds连接sqlserver并插入数据偶尔报错

回复:
user: user-1
content: 数据库系统同时连接数设置的太小？

user: user-0
content: 引用 3 楼 轻箬笠 的回复:是不是数据库锁的问题啊？  没有对数据库表进行任何加锁操作

user: user-2
content: 是不是数据库锁的问题啊？

user: user-0
content: 引用 1 楼 赵4老师 的回复:远程连接不稳定很正常呀。  同时还有几个服务器是往同一个数据库插入数据的，都正常。而且插入失败报错后，会一直报错，无法恢复正常，需要关掉服务器重新打开才能恢复正常。请问赵老师您知道是什么问题吗？

user: user-1
content: 远程连接不稳定很正常呀。
user-0 提问: C语言函数参数问题

回复:
user: user-1
content: C++实现一个简单的打印，代码如下，不一定要用lambda  #include<iostream> using namespace std; const int MAX = 100; struct sqList { 	int arr[MAX]{ 1,2,3,4,5 }; 	int len = 5; }l; void visit(const int &a) { 	cout << a << endl; } template<class fun> void ListTraverse(sqList& l, fun f) { 	for (int i = 0; i < l.len; i++) 		f(l.arr[i]); } int main(){ 	ListTraverse(l, visit); 	return 0; }

user: user-1
content: C语言我不清楚，但知道C++可以通过泛型+lambda实现你所说的操作

user: user-2
content: 不是大佬，斗胆说一句。可以用函数指针作为参数传进去，然后就可以调用函数了。
user-0 提问: 第一次玩C。。请教如何将char *指针字符串的保存为bin文件？请大师赐教

回复:
user: user-1
content: fwrite

user: user-0
content: 引用 1 楼 user-1 的回复：fwrite这个我知道，用wb模式。请问具体如何实现呢？主要是如何将char *指针变成二进制代码写进文件呢？
user-0 提问: 关于typedef的用法问题

回复:
user: user-1
content: 引用 3 楼 天涯望月羊 的回复:谢谢，懂了 很高兴能帮到你。麻烦及时结帖、给分吧，这样大家都更高兴！：- ） ～

user: user-0
content: 引用 2 楼 拥抱Linux 的回复：是的。 （1）关键字 「 typedef 」 是给类型起新的名字，一般形式是 「 typedef  old_name new_name; 」，比如，  typedef int INTEGER; // 定义一个新的类型，名字是 INTEGER ，它和 int 等价  （2）「 typedef 」还可以给 数组、 结构体类型、指针类型 等起新的名字，比如，  typedef char T_stuno[9]; // 这是你提问的语句   要看清楚新的类型名字 「T_stuno」到底等价于什么类型的话，就把上面的语句中的这个新名字「T_stuno」给拿掉，剩下的就是它所代表的类型了，也就是说，从   typedef char T_stuno[9];  里把 T_stuno 拿掉后， 剩下的是  typedef char [9]; ， 那么，T_stuno 代表的就是 char [9] ，也就是 长度为9的char类型数组 。 因此，T_stuno seatno[9][9];的意思就是，定义一个 seatno[9][9]的二维数组，它的基本元素是 T_stuno 类型的，而 T_stuno 又是 char [9] 类型的，所以综合起来， seatno 就是一个 char [9][9][9] 数组了。 （3）如有帮助，烦请及时结帖、给分！：- ） ～谢谢，懂了

user: user-1
content: 是的。 （1）关键字 「 typedef 」 是给类型起新的名字，一般形式是 「 typedef  old_name new_name; 」，比如，  typedef int INTEGER; // 定义一个新的类型，名字是 INTEGER ，它和 int 等价  （2）「 typedef 」还可以给 数组、 结构体类型、指针类型 等起新的名字，比如，  typedef char T_stuno[9]; // 这是你提问的语句   要看清楚新的类型名字 「T_stuno」到底等价于什么类型的话，就把上面的语句中的这个新名字「T_stuno」给拿掉，剩下的就是它所代表的类型了，也就是说，从   typedef char T_stuno[9];  里把 T_stuno 拿掉后， 剩下的是  typedef char [9]; ， 那么，T_stuno 代表的就是 char [9] ，也就是 长度为9的char类型数组 。 因此，T_stuno seatno[9][9];的意思就是，定义一个 seatno[9][9]的二维数组，它的基本元素是 T_stuno 类型的，而 T_stuno 又是 char [9] 类型的，所以综合起来， seatno 就是一个 char [9][9][9] 数组了。 （3）如有帮助，烦请及时结帖、给分！：- ） ～

user: user-2
content: 是的，对的，没毛病

user: user-3
content: 《C++Primer第五版中文版》中提到了使用typedef定义数组类型别名的原因： 因为数组不能被拷贝，所以函数不能返回数组。不过，函数可以返回数组的指针或引用。最直接的方法是使用类型别名。 typedef int arrT[10];//arrT是一个类型别名，它表示的类型是含有10个整数的数组 arrT* func(int i);//func返回一个指向含有10个整数的数组的指针 其中，arrT是含有10个整数的数组别名。因为我们无法返回数组，所以将返回类型定义为数组的指针。通过typedef来定义数组的指针。 所以，在你的代码中 typedef char T_stuno[9]; T_stuno是含有9个char的数组别名，而 T_stuno seatno[9][9]; 中，seatno是一个二维数组，数组中的每个元素都是含有9个char的数组，即你所说的三位数组。

user: user-4
content: typedef char T_stuno[9]; 代表给字符数组重命名为T_stuno，字符数组的长度为9 即：T_stuno代表的是char[9]的字符数组。 T_stuno seatno[9][9];定义一个 seatno[9][9]的二维数组，它是 T_stuno 类型的，而 T_stuno 又是 char [9] 类型的，因此， seatno 就是一个 char类型的三维数组，即 seatno [9][9][9] 数组。
user-0 提问: 我这样做犯规吗

回复:
user: user-1
content: 输入的虚部没有了

user: user-2
content: 题目要求的是输入完整的复数，还有最后的虚数单位也要输入啊！ 输入的 1-1 是什么？ 不是复数啊！

user: user-3
content: 算是犯贱~~~~，这是C++， 不是C

user: user-0
content: 引用 1 楼 Italink 的回复：不算犯规，但是不是个好习惯，因为输入缓冲区还有字符'i','\n'，建议处理一下哈哈哈哈，好的

user: user-4
content: 符合题意就不是犯规

user: user-5
content: 不算犯规，但是不是个好习惯，因为输入缓冲区还有字符'i','\n'，建议处理一下

user: user-0
content: 引用 6 楼 袁君元 的回复：你这个程序有问题，题目要求的是输出其共轭复数，但是并没有说复数中的虚数里面一定是i吧！不能只是看到样例是i，就认为只有i，这个是编写程序中经常犯错的地方，没有考虑全面！可以看看这篇文章https://blog.csdn.net/weixin_43956598/article/details/90049508，或许对你有帮助 因此，在输入的时候，应该输入的是四个变量：复数的实部，符号，虚部的数字部分，虚部的字母部分；  修改后的代码如下：  #include<stdio.h> int main(){ 	int a,b; 	char i,j; 	scanf("%d%c%d%c",&a,&i,&b,&j); 	switch(i){ 		case '-':printf("%d+%d%c\n",a,b,j);break; 		case '+':printf("%d-%d%c\n",a,b,j);break; 		default:printf("errpr\n");//这里还是规范一下  	} }  好的！感谢大佬指正

user: user-0
content: 好的！感谢大佬指正

user: user-6
content: 复数的实部和虚部都是实数，你不能假定它给出的都是整数~~~

user: user-7
content: 你这个程序有问题，题目要求的是输出其共轭复数，但是并没有说复数中的虚数里面一定是i吧！不能只是看到样例是i，就认为只有i，这个是编写程序中经常犯错的地方，没有考虑全面！可以看看这篇文章https://blog.csdn.net/weixin_43956598/article/details/90049508，或许对你有帮助 因此，在输入的时候，应该输入的是四个变量：复数的实部，符号，虚部的数字部分，虚部的字母部分；  修改后的代码如下：  #include<stdio.h> int main(){ 	int a,b; 	char i,j; 	scanf("%d%c%d%c",&a,&i,&b,&j); 	switch(i){ 		case '-':printf("%d+%d%c\n",a,b,j);break; 		case '+':printf("%d-%d%c\n",a,b,j);break; 		default:printf("errpr\n");//这里还是规范一下  	} }
user-0 提问: C语言 删除数组中的数字

回复:
user: user-0
content: 引用 2 楼 拥抱Linux 的回复：函数 del 里面，删除了 一个 元素之后，按现在你的代码， 进入 下一次 for循环 的时候， 数组的 下标 i 不是 会 执行 i ++  嘛 ？ 那就 在 for 循环  内部 ， 把 后面 的 元素 全部 向前 移动 一个位置之后， 把 此时的 数组下标 i 减一 ， 然后 下一次 for 循环 不就是 又 从 上次 的 数组 下标 开始了吗？ 这样 就 可以 检查 原来的 下一个 元素 了呀。   	for (i = 0; i < 10; i++) { 		if (choose == arr[i]) { 			for (省略) { 			} 			flag++; 			i = i - 1; // 增加这一句 		} 	}  如有帮助，欢迎及时结帖、给分！ ：-） ～懂了懂了谢谢！

user: user-0
content: 引用 1 楼 Italink 的回复：修改del方式  int del(int arr[], int len) { 	int choose = 0, i = 0, length = 0; 	printf("please choose del which number: "); 	scanf("%d", &choose); 	for (i = 0; i < len; i++)  		if (arr[i] != choose) 			arr[length++] == arr[i]; 	return len - length; } 哦哦懂了懂了！谢谢！

user: user-1
content: 函数 del 里面，删除了 一个 元素之后，按现在你的代码， 进入 下一次 for循环 的时候， 数组的 下标 i 不是 会 执行 i ++  嘛 ？ 那就 在 for 循环  内部 ， 把 后面 的 元素 全部 向前 移动 一个位置之后， 把 此时的 数组下标 i 减一 ， 然后 下一次 for 循环 不就是 又 从 上次 的 数组 下标 开始了吗？ 这样 就 可以 检查 原来的 下一个 元素 了呀。   	for (i = 0; i < 10; i++) { 		if (choose == arr[i]) { 			for (省略) { 			} 			flag++; 			i = i - 1; // 增加这一句 		} 	}  如有帮助，欢迎及时结帖、给分！ ：-） ～

user: user-2
content: 修改del方式  int del(int arr[], int len) { 	int choose = 0, i = 0, length = 0; 	printf("please choose del which number: "); 	scanf("%d", &choose); 	for (i = 0; i < len; i++)  		if (arr[i] != choose) 			arr[length++] == arr[i]; 	return len - length; }

user: user-3
content: 你的del函数只适用于被删除的数choose在数组中只有一个的情况，但是当数组中有多个choose的时候，就会出现错误； 假如数组是 1 2 2 3 4 2 5，要删除2，当我们执行i循环的时候，i=1时，找到a[1]为2， 进入 j循环， 把下标为1及之后的数都往前移动一位，此时的数组变为了1 2 3 4 2 5，j循环结束后，进入到下一个i循环的时候，i 执行 i ++  ，此时的i=2了，然后从下标为2开始查找数字2，得到的数组为1 2 3 4 5，就会漏删了下标为1的2； 为了防止这种情况，我们要在内层循环j结束后，执行i- -,回到之前的位置，就不会漏删除！    	for (i = 0; i < 10; i++) { 		if (choose == arr[i]) { 			for (省略) { 			} 			flag++; 			i- - // 回到之前的位置 		} 	}    逻辑思维很重要哦！可以看看这篇文章：https://blog.csdn.net/weixin_43956598/article/details/90049508
user-0 提问: 穷举法 计算最小公倍数

回复:
user: user-1
content: 循环写错了啊

user: user-2
content: 上一层楼的回答发快了，不好意思。 因为，x++ 之后，到下一次 for 循环的循环条件判断时， for 循环 才结束 ，这样 x 最后的值 就比 if 成立 的 x 多了 1 ，所以 需要 x - 1 。 要是用 break; 直接 跳出循环的话 就不用  x - 1 了。

user: user-2
content: 因为，写错了！
user-0 提问: 链表 free 问题

回复:
user: user-1
content: 像你这种写法的话，必须把p→next用一个指针变量temp保存起来，用free(temp)实现就可以了

user: user-2
content: 意思是，想 删除 p 后面的 那个 节点， 是吧？既然不用了，当然应该 free() ，否则就造成 内存泄漏哇！   void DelHeadNode(List *p) { 	if (p->next != NULL) { 		List *temp = p->next; //把要删除的节点暂存起来  		p->next = p->next->next; //链表跨到下一节点，把要删除的节点从链表中断开  		free(temp); // 释放 temp 指向的内存块 		temp = NULL; 	} }

user: user-0
content: 引用 3 楼 user-3 的回复:对哦，失误了=.=  void DelHeadNode(List * p) {     if (p->next != NULL)     {         List *s=p->next;         p->next = p->next->next;   //移动到下一节点         free(s);            }   引用 3 楼 user-3 的回复:对哦，失误了=.=  void DelHeadNode(List * p) {     if (p->next != NULL)     {         List *s=p->next;         p->next = p->next->next;   //移动到下一节点         free(s);     }        }    多谢~ 确实这样才能释放那个结点. 像题目那样写,那个节点的数据并没有被释放掉. 这种情况下,没有释放掉,其它程序是不是也不会再使用这个内存? 你这样写,确实释放了那个内存. 	if (p->next != NULL) 	{ 		DelNode = p->next;  //保存要释放的节点 		printf("%d\t", *DelNode);  //打印节点内的数据   		p->next = p->next->next;   //移动到下一节点 		free(DelNode);  //释放节点 		printf("%d\t", *DelNode);  //打印保存的节点内容. 	} /* 两次打印的数据不相同,第一次打印为结点内的数值.第二次是一个不确定的值. */

user: user-3
content: 对哦，失误了=.=  void DelHeadNode(List * p) {     if (p->next != NULL)     {         List *s=p->next;         p->next = p->next->next;   //移动到下一节点         free(s);     }        }

user: user-0
content: 引用 1 楼 user-3 的回复:只要是动态分配的空间，你不free，它就一直占着，然后要不要free，这就得问你了。  void DelHeadNode(List * p) {     if (p->next != NULL)     {        //应在此处free(p->next)         p->next = p->next->next;   //移动到下一节点     }       }   直接在此处 free 是有问题的. 整个链表被 释放了.

user: user-3
content: 只要是动态分配的空间，你不free，它就一直占着，然后要不要free，这就得问你了。  void DelHeadNode(List * p) {     if (p->next != NULL)     {        //应在此处free(p->next)         p->next = p->next->next;   //移动到下一节点     }       }
user-0 提问: vs 2017版本，怎么区分c 语言/c ++

回复:
user: user-1
content: 默认是通过扩展名区分的，也可以通过命令行开关强制为C++或者C编译， /TP所有文件作为C++编译，/TC所有文件作为C编译 用IDE的话，可以从 项目-> xxx属性->配置属性->C/C++ ->命令行 里面设置

user: user-2
content: 引用 楼主 weixin_45067771 的回复:本来用c 6.0语言编程序，可是用了vs 后感觉c 语言生成不行 在创建项目的时候吧cpp改成c 创建后也可以改 我的是VS2019

user: user-3
content: 文件是.cpp 重命名换成.c就好了

user: user-4
content: c++编译器去写c语言，不出问题才怪

user: user-5
content: 引用 3 楼 weixin_45067771 的回复:[quote=引用 1 楼 user-8的回复:]vs本身就只是c++编译器 当然你可以手动添加.c文件 可是，添加了也没用，这个改文件也不行[/quote]  引用 3 楼 weixin_45067771 的回复:[quote=引用 1 楼 user-8的回复:]vs本身就只是c++编译器 当然你可以手动添加.c文件 可是，添加了也没用，这个改文件也不行[/quote]不对啊，当初我学c的时候就是将.cpp改成.c，有时候懒得改就直接用.cpp貌似也没问题

user: user-6
content: c 6.0语言是什么？？？

user: user-0
content: 引用 1 楼 user-8的回复:vs本身就只是c++编译器 当然你可以手动添加.c文件 可是，添加了也没用，这个改文件也不行

user: user-7
content: 用我的Test项目举例子，右击Test.cpp,可以重命名为.c即可；如果需要多个文件可以右击项目名Test-》添加-》新建项，改下面的的名称。

user: user-8
content: vs本身就只是c++编译器 当然你可以手动添加.c文件