Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 输入一个数字 从右往左打印对应的生成的二进制数 大神帮忙看看错在哪里

回复:
user: user-0
content: 恩  还没有学到do...while   循环  不过谢谢您  已经看懂了

user: user-1
content: 我自己会这么写 int num; scanf("%d", &num); 之后  do {     printf("%d", num%2);     num >>=1; } while ( num>0 ); printf("\n");

user: user-0
content: #include<stdio.h> int main() { 	unsigned int num=0; 	printf("请输入一个0-127之间的整数："); 	scanf("%d",&num); 	char ch=0x01; 	int tmp=1,num1=8; 	for(num;num>0;num>>=1) 	{ 		//int tmp=1,num1=8; 		for(tmp=1;tmp<=num1;tmp++) 		{ 			printf(" "); 		} 		num1--; 		if(num1==4) 		{ 			num1--; 		} 		printf("%d\r",(num&ch)!=0); 	} 	printf("0"); 	printf("\n"); 	return 0; } 这个貌似也可以实现， 就要在最左边补个0才可以  不知道这样操作会不会有bug

user: user-0
content: #include<stdio.h> int main() { 	int num=0; 	int num1=8; 	int tmp=0,tmp1=1; 	unsigned char ch=0x01; 	printf("请输入一个0-127之间的整数："); 	scanf("%d",&num); 	for(tmp=0;tmp<=7;tmp++) 	{ 		for(tmp1=1;tmp1<=num1;tmp1++) 		{ 			printf(" "); 		} 		num1--; 		if(num1==4) 		{ 			num1--;	 		} 		printf("%d\r",(num&ch)!=0);         	num>>=1; 	} 	printf("\n"); 	return 0; }   谢谢 我用这个代码实现了  我再试试你的代码

user: user-1
content: #include<stdio.h> int main() { unsigned int num=0; printf("请输入一个0-127之间的整数："); scanf("%d",&num); char ch=0x01; for(num;num>=0;num>>=1) // num>=0 这个条件永远成立。 应该改为 num>0 { printf("%d",(num&ch)!=0); } printf("\n"); return 0; }  此外，你还应该增加一个 输入的数就是0的判断，如果是0，直接输出结果并返回就好了，不是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: scanf 和 printf 是从键盘读， 屏幕写 fscanf 和 fprintf 是磁盘文件读写 没有多大的差异  随便百度一下，有很多实例 http://c.biancheng.net/view/2073.html
user-0 提问: typedef给结构体取别名可以和结构体名字一样吗？

回复:
user: user-0
content: 引用 1 楼 寻开心 的回复:    谢谢！

user: user-1
content: 可以啊  也没有冲突 这样   Books book1； struct Books book2； 都可以同时使用
user-0 提问: 新手求教如何用VS编程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: https://blog.csdn.net/liups/article/details/102512769

user: user-0
content: 引用 1 楼 寻开心的回复:你这个是vscode， 不是visual studio vscode只是一个编辑器，没有vs这种编译功能， 要配置  下visual studio，或者安装dev c++什么的编译器才行 好的  谢谢大佬     感谢

user: user-3
content: 你这个是vscode， 不是visual studio vscode只是一个编辑器，没有vs这种编译功能， 要配置  下visual studio，或者安装dev c++什么的编译器才行
user-0 提问: 为啥3/2=1.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: 懂了懂了谢谢谢谢，，，

user: user-2
content: 引用 2 楼 qq_45912242 的回复:[quote=引用 1 楼 @矛盾综合体的回复:]数字常量，默认int型 double类型怎么是int类型[/quote] 我是说3,2这两个常量，如果你是x=，y=，然后y=x/y肯定不一样

user: user-0
content: 引用 1 楼 @矛盾综合体的回复:数字常量，默认int型 double类型怎么是int类型

user: user-2
content: 数字常量，默认int型
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: LIST_HEAD1( b, 3, 1.2f);就等价于 struct student b = { 3， 1.2f， &b， &b}；

user: user-2
content: 图上显示了啊 那是两种不同的定义方法 第一种，也就是第一张图，很清晰的定义了 第二种，用宏定义来实现的 他们是两种东西不想干  用宏定义也可以做出第一种的类型 #define LIST_HEAD1( varname, n, f ) struct student varname = LIST_HEAD_INIT1(varname, n, f) #define LIST_HEAD_INIT1(varname, n,f)  {n, f, &varname, &varname }  LIST_HEAD1( b, 1, 1.2f);就等价于 struct student b = { 3， 1.2f， &b， &b}；

user: user-0
content: 引用 1 楼 寻开心的回复:按照上面的定义，如果输入： LIST_HEAD(a); 就等价于 struct list_head a = {&a, &a}; 这样就形成了， 图上的那个效果， a.prev = a.next = &a;  只是用宏定义完成了一个变量的定义和初始化的过程 第一张图里那两个指针是指的哪里哇？创建链表按最后一张图就可以了吗？

user: user-2
content: 按照上面的定义，如果输入： LIST_HEAD(a); 就等价于 struct list_head a = {&a, &a}; 这样就形成了， 图上的那个效果， a.prev = a.next = &a;  只是用宏定义完成了一个变量的定义和初始化的过程
user-0 提问: 结果为什么是how

回复:
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: 谢谢你们的帮助，我懂了哈哈哈

user: user-2
content: 字符数组sting2[]，第4个元素是'\0'，你是以数组名的方式输出字符串，字符串输出时，遇到'\0'自动结束，不再输出后续元素。

user: user-3
content: %s指定的是输出字符串，而字符串是遇到'\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: #include<stdio.h> int main() { 	int ix,iy; 	scanf("%d",&ix); 	if(ix>=0) 	{ 		if(ix>5) 		{ 			iy=ix+3; 		} 		else 		{ 			iy=0; 		} 	} 	else 	{ 		iy=2*ix+30; 	} 	printf("%d\n",iy); 	return 0; }

user: user-3
user-0 提问: 给结构体typedef ，为什么c语言官方不简化这种操作？

回复:
user: user-1
content: 语法定义是什么就是什么， 标准如此，抱怨也没用 也不是坏事，时刻提醒你，那是结构体

user: user-2
content: 这个是慢慢加的，所有没有简化，防止混乱，也是为了兼容性，所有在c++上面就简化了这个
user-0 提问: 要想用一个结构体，必须在每个.c文件中都声明一次吗？

回复:
user: user-1
content: 是的。 必须要重写或者#include 头文件

user: user-0
content: [quote=引用 2 楼 寻开心 的回复:] /quote] 谢谢！  在不同的文件中分别定义，a.c中 定义    struct people people1 ；                                             b.c中 定义   struct people people2 ；                                          c.c中 定义    struct people people3；  a.c中本来已经写明了结构体的形式了：  struct people {      int age; }  等于我在b.c中想定义people2 时，还是要重新写一遍（无论是直接写结构体的形式，还是头文件中写了再include），我都需要在b.c中包含 struct people {      int age; } 吗？

user: user-1
content: 你的例子当中 a，b，c里面的各自的变量，都是在.c范围内有效的， 并不能跨越文件生效 结构体的定义是放到头文件里面都， 各自的变量还是在.c文件里面定义的  如果你要a里面定义的变量，在c里面能用，比如： a.c当中定义了的people1，想要在b.c当中使用， 就要在b.c里面加上 extern struct people people1； 这样的一个声明

user: user-1
content: 放入头文件，然后#include它是正解， 头文件存在的目的也就是这个 这样只需要在头文件当中定义一次， 修改也只修改这一个地方， 这比多文件当中重复定义有利多了  头文件里面的是定义，也可以叫做声明， 它都不是实现体  结构体你给的这个形式也都是声明， 你并没有给他定义其类型的变量出来，就不算是实现体。 结构体类型的变量，和其他类型的变量也没有特殊的地方      在某个c/cpp文件当中，定义这个变量      然后在头文件里面用extern struct S a； 来声明，告诉其他的文件有这个变量存在，并可以使用
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: 啊啊啊啊啊我蠢了我太蠢了 我的问题=-= 我刚刚又仔仔细细看了看我周围的代码 发现果然是小白错误 花括号数量不对！！！！！我还记得我上次的错误是for函数后面打了个分号，这次是花括号.... 啊~我死了~~~

user: user-0
content: 我的结构体： struct Mumber { 	char name[10]; 	long tel; 	int points; }; 我在main函数里定义了一个： struct Mumber m[N];

user: user-2
content: 引用 2 楼 贝壳nia 的回复:[quote=引用 1 楼 不闻窗外事的回复:]你至少应该把你报错的那几行代码发出来吧，看起来是你少写了一个分号，可能是定义结构体的时候没有在最后加分号，或者其他的语句没有加分号，你发的这个代码和你的报错行一点都不一样啊 我发的代码就是报错的地方，它报错的是那两个调用函数[/quote] 那应该是你的函数参数，那个结构体的问题，你看看你的结构体定义是不是没有加分号

user: user-0
content: 引用 1 楼 不闻窗外事的回复:你至少应该把你报错的那几行代码发出来吧，看起来是你少写了一个分号，可能是定义结构体的时候没有在最后加分号，或者其他的语句没有加分号，你发的这个代码和你的报错行一点都不一样啊 我发的代码就是报错的地方，它报错的是那两个调用函数

user: user-2
content: 你至少应该把你报错的那几行代码发出来吧，看起来是你少写了一个分号，可能是定义结构体的时候没有在最后加分号，或者其他的语句没有加分号，你发的这个代码和你的报错行一点都不一样啊

user: user-3
content: 写代码的习惯，要注意缩进格式啊， 做好对齐关系，这种问题就都一目了然 现在的编译器IDE基本都有自动缩进/代码格式化 的功能吧
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 提问: viual studio 调试结果一直为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: printf的第二个参数呢， printf（“%lf”， s）这样的啊
user-0 提问: C语言大佬请进来，新手在

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

user: user-2
content: 编译分若干步， 预处理， 展开头文件/宏替换/去掉注释/条件编译                      （test.i main .i） 编译，    检查语法，生成汇编                                                      （ test.s  main .s） 汇编，   汇编代码转换机器码                                                         (test.o main.o) 链接     链接到一起生成可执行程序                                              a.out  可以了解一下～  https://blog.csdn.net/weixin_41143631/article/details/81221777

user: user-0
content: 引用 1 楼 寻开心的回复:对的啊  一般来说，头文件是属于一些结构，类型，甚至包括常量等的声明和定义， 编译的时候都要用到的。  何况文件扩展名也不是必须是h和c的， h文件里面我放main函数， 不用c文件也照样可以编译运行 文件扩展名随便起什么操作系统认的就可以，加入到工程文件里面照样编译。 谢谢！！了解

user: user-3
content: 对的啊  一般来说，头文件是属于一些结构，类型，甚至包括常量等的声明和定义， 编译的时候都要用到的。  何况文件扩展名也不是必须是h和c的， h文件里面我放main函数， 不用c文件也照样可以编译运行 文件扩展名随便起什么操作系统认的就可以，加入到工程文件里面照样编译。
user-0 提问: c语言，麻烦大神看一下

回复:
user: user-1
content: 讨论这些没有意义的，逗号表达式入参顺序决定了最后的结果，就这个来说相当于 (x--,y--,x+y) 逗号表达式是按顺序计算，返回最后一个表达式的结果 表达式取结果 x+y =11 z++入参时是8那不就等于19了

user: user-2
content: z++， 先先返回了8，然后z自增为9，这个参数实际传入的是8 x--，y--，x+y 这个逗号表达式x是5，y是6，x+y是11， 传入的是11 结果就是19咯  你在func函数里面，输出一下参数a和b就能看到，a是11， b是8
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: 种感觉有毛病，不如把guess放进循环吧
user-0 提问: 求个大神指点一下Python

回复:
user: user-0
content: 引用 1 楼 @矛盾综合体的回复:额，如果是c++或者数据库可能还好，毕竟和c有点关系，尽管说是一通则万法，不过个人还是建议你去Python的论坛发一个帖子，这边了解的应该比较少 找到了  不好意思呀

user: user-0
content: 引用 1 楼 @矛盾综合体的回复:额，如果是c++或者数据库可能还好，毕竟和c有点关系，尽管说是一通则万法，不过个人还是建议你去Python的论坛发一个帖子，这边了解的应该比较少 我找不到Python的论坛……

user: user-1
content: 额，如果是c++或者数据库可能还好，毕竟和c有点关系，尽管说是一通则万法，不过个人还是建议你去Python的论坛发一个帖子，这边了解的应该比较少
user-0 提问: c语言，麻烦大神看一下这个题选什么

回复:
user: user-1
content: 没有对的， "hello" 和 "world" 都是 6个字符长  D 最接近正确， 但是 chara[2][6] 才行。 定义二维数组， 第二个[]里面必须有明确的值；所以AC都是错的 B错误在 char *p[5] = a;上， 左边依然是数组，右边不是，右边是指针了，这不能完成初始化。
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: k = k * (b - c ) / c;

user: user-2
content: #include <stdio.h> #include <stdlib.h> int main() {     int k, a, b, c;     scanf("%d", &a);       printf("1\n");              for (b = 2; b <= a;  b++)    {         k = 1；         printf("1 ");                          // 第一个 1         for (c = 1; c <= b - 2; c++)  // 列位置 j 绕过第一个直接开始循环             printf("%d ", (k = (b - c) * k / c));         printf("1\n");               // 最后一个 1，换行     }     getchar();        return 0; }
user-0 提问: C语言– 求一批整数中出现最多的个位数字

回复:
user: user-1
content: #include<stdio.h> int main() { 	int n,i,num;int a[10]={0}; 	int max=0; 	scanf("%d",&n); 	for(i=0;i<n;i++) 	{ 		scanf("%d",&num);         if(num==0)             a[0]++; 		while(num>0) 		{ 			a[num%10]++; 			num=num/10; 		} 	} 	for(i=0;i<10;i++) 	{ 		if(max<a[i]) 			max=a[i]; 	} 	printf("%d:",max); 	for(i=0;i<10;i++) 		if(max==a[i]) 			printf(" %d",i);	 } 小错误，这样可以了。

user: user-2
content: 你的测试结果已经告诉你了， 如果输入的数据是0，你的答案就不对了  输入数据后，要先判断n是不是0， 如果是把0的计数加一； 然后再while（n>0）的循环

user: user-3
content: #include<stdio.h>  int main(void) {     int n, x, i;     int a[10] = { 0 }, max = -1;      scanf("%d", &x);     for (i = 0;i < x;i++) {         scanf("%d", &n);         if (n == 0) {             a[n]++;             continue;         }         while (n > 0) {             a[n % 10]++;             n /= 10;         }     }      //int max = 0;     for (i = 0;i < 10;i++) {         if (a[i] > max) {             max = a[i];         }     }     printf("%d:", max);     for (i = 0;i < 10;i++) {         if (a[i] == max) {             printf(" %d", i);         }     }     return 0; } 供参考～  如果输入3，并且输入3个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-0
content: 引用 1 楼 寻开心的回复:这个出栈的代码：   p没有必要分配内存. p = (linstack) malloc(sizeof(stack)) 这句是多余的。      if (s->top == NULL ) return 0;     *x = s->top->data;     p= s->top;     s->top = s->top->top;    free(p);     return *x;  不过这个错误和你的问题没有关系， 退出不会是因为pop这个函数造成的 应该是你的代码控制逻辑上的问题，判断输入是a还是b，然后进行不同函数调用的部分 那我再看看怎么弄一下，谢谢了。

user: user-2
content: 这个出栈的代码：   p没有必要分配内存. p = (linstack) malloc(sizeof(stack)) 这句是多余的。      if (s->top == NULL ) return 0;     *x = s->top->data;     p= s->top;     s->top = s->top->top;    free(p);     return *x;  不过这个错误和你的问题没有关系， 退出不会是因为pop这个函数造成的 应该是你的代码控制逻辑上的问题，判断输入是a还是b，然后进行不同函数调用的部分
user-0 提问: 请教一个字符指针的问题

回复:
user: user-1
content: char * a = "11111"; 这种定义下  “11111” 是字符串常量， 不能被更改 char a[] = "1111" 这种是数组，  内容可以被更改  其次 a和b当中，如果把b 拷贝到 a里面去， a的长度要比b长， 否则就会越界溢出

user: user-2
content: 字符数组可以赋值，但是字符串不能被赋值；就是说字符串是常量，不能修改
user-0 提问: 求各位大佬帮忙看看，这是哪里有错

回复:
user: user-1
content: if 语句后面  如果没有大括号 默认后面的一条语句  属于判断条件范围内的 其他的不属于条件范围内，不管条件满不满足都执行  如果紧跟着大括号 大括号内的语句都属于条件范围内，满足条件才执行  另外 函数再用之前要main之前声明 ，如果想不声明，就在main之前实现它的代码

user: user-2
content: 注意加大括号，否则就没有判断的意义了～

user: user-0
content: 引用 6 楼 棉猴的回复:[quote=引用 5 楼 user-4 的回复:] [quote=引用 4 楼 棉猴 的回复:]  void sort(int* a, int* b) { 	int t; 	if (*a < *b) 	{ 		t = *a; 		*a = *b; 		*b = t; 	} }  这样改会不会跟他的思路或是逻辑不一致？看他是sort排序的话，应该是分从小到大还是从大到小的[/quote] 抛砖引玉，抛砖引玉[/quote] 谢谢😜，我明白了，我是新手，嘿嘿，万分感谢

user: user-0
content: 谢谢😜，明白了，万分感谢，我是新手，哈哈

user: user-0
content: 谢谢，懂了，对了，函数声明到main里面是我们课本上写的呀?

user: user-3
content: 引用 5 楼 user-4 的回复:[quote=引用 4 楼 棉猴 的回复:]  void sort(int* a, int* b) { 	int t; 	if (*a < *b) 	{ 		t = *a; 		*a = *b; 		*b = t; 	} }  这样改会不会跟他的思路或是逻辑不一致？看他是sort排序的话，应该是分从小到大还是从大到小的[/quote] 抛砖引玉，抛砖引玉

user: user-4
content: 引用 4 楼 棉猴 的回复: void sort(int* a, int* b) { 	int t; 	if (*a < *b) 	{ 		t = *a; 		*a = *b; 		*b = t; 	} }  这样改会不会跟他的思路或是逻辑不一致？看他是sort排序的话，应该是分从小到大还是从大到小的

user: user-3
content: void sort(int* a, int* b) { 	int t; 	if (*a < *b) 	{ 		t = *a; 		*a = *b; 		*b = t; 	} }

user: user-3
content: 代码没问题啊，sort()函数中， if (*a > *b) 只有a指向的内容大于b指向内容时，才会交换。但是a[0]是4，a[1]是6， sort(&a[0], &a[1]); 此时不会触发if语句，所以输出仍然是4,6 如果想触发，要把sort()函数中的if条件改为 if (*a < *b) 此时，VS2015 C++环境调试结果

user: user-4
content: 打错了，是课本

user: user-4
content: 害，你们是现在刻本编的有问题？函数声明不要写main函数里，虽然不会错，代码规范，还有就是不论你的执行语句是一句还是几句，都要加大括号！！！你这个执行起来是if(*a>*b){t=*a} *a=*b; *b=t; 你后面两句就不在if语句里，所以你a[0]的值是a[1]的，a【1】的值是t的
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: user-3
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-0
content: 引用 2 楼 weixin_46055651 的回复：引用 1 楼 寻开心 的回复：你不给题目要求，谁知道你要做什么啊 噢噢噢，不好意思那我重发一个

user: user-0
content: 引用 1 楼 寻开心 的回复：你不给题目要求，谁知道你要做什么啊 噢噢噢，不好意思

user: user-2
content: 你不给题目要求，谁知道你要做什么啊

user: user-2
content: if  ( a[I] >= 'A' && a[o]<='Z' ) {       a[I]  = 'Z' - ( a[I] - 'A');     // 距离’Z'的距离的距离，是变换前距离‘A'的距离： z-newA = oldA-a   -->  newA = z - (oldA-a) } else if ( a[I] >= 'a' && a[I] <= 'z' ) {      a[I] = 'z' - (a[I] - 'a' ); }
user-0 提问: 两个问题

回复:
user: user-1
content: 没发现会报错呢～都可以正常输出。  加上const后更能标识x是一个字符串常量

user: user-2
content: 你所说的去掉const会报错，应该是 c++11标准的问题 “123” 本身就是一个 const char*类型， 把它赋值给 char *类型是类型不匹配， 你加一个强制转换就可以了 char * c = （char *） “123”；  这点在不同的编译器和编译设置上会有不同的表现， dev c++可能根本就不报错， VS高版本就会报错， XCode 就是一个警告

user: user-2
content: 你要看printf函数的原型啊 printf的函数原型，第一个参数就是 char *， 本来需要的就是“”p printf的第一参数用const char * 会不会报错，是编译器的事儿，检查严格不严格了。  char * c = “123”；  这只是表示 c这个指针的值可以被改变； 你可以回头就让 c = &ch； 这样的再次赋值 const char * c  = “123”； 表示c不可以再更改了
user-0 提问: 期末c语言实验报告求助

回复:
user: user-1
content: #include <iostream> int main() {     using namespace std;     //节省输入时间     freopen("unhappy_in.txt","r",stdin);     //0、1列分别存放学校和妈妈安排的时间     //2列存放不高兴的程度     int a[7][3];     //max存放当前最不高兴的那天的下标     int max=-1;            //周一到周日     for (int i=0;i<7;++i)       {         //输入         cin>>a[i][0]>>a[i][1];         //当天不高兴         if (a[i][0]+a[i][1]>8)           {             //当天不高兴程度             a[i][2]=a[i][0]+a[i][1]-8;             //修改最不高兴的下标             if (max==-1)               max=i;             else               //为什么是大于，因为程度相等只要输出               //前面那天，所以相等时不修改               if (a[i][2]>a[max][2])                 max=i;           }         else            a[i][2]=0;       }     cout<<max+1;     return 0; }  从以上代码可以看出，程序不需要其他修改。另外，虽然这里使用的是C++的方式，其实C语言的方式也是可以的

user: user-2
content: 引用 3 楼 user-2 的回复:FILE *fp = fopen("result.txt","w");         if(fp==NULL){                 perror("fail to read");                 exit(1);         } int i=0;         while(i<10){               fread(&stu[i],sizeof(struct student),1,fp);               i++；         } fclose(fp); 试一下 不过这样写的话读就只能读这个格式写入的文件了 写错了，fread是读，fwrite是写

user: user-2
content: FILE *fp = fopen("result.txt","w");         if(fp==NULL){                 perror("fail to read");                 exit(1);         } int i=0;         while(i<10){               fread(&stu[i],sizeof(struct student),1,fp);               i++；         } fclose(fp); 试一下 不过这样写的话读就只能读这个格式写入的文件了

user: user-0
content: 引用 1 楼 liups的回复:freopen("xxx.out","w",stdout) 了解一下 有没有完整代码参考一下，谢谢

user: user-1
content: freopen("xxx.out","w",stdout) 了解一下
user-0 提问: c程序设计题目，求助

回复:
user: user-1
content: 引用 1 楼 自信男孩 的回复:代码不建议截图，另外，把你的问题描述清楚，而不是让别人给你找问题～ 同意。还想让别人自问自答，那是闲得蛋疼。

user: user-2
content: 代码不建议截图，另外，把你的问题描述清楚，而不是让别人给你找问题～
user-0 提问: 三维基本勾股数组

回复:
user: user-1
content: 还真是不全， 这个公式确实有问题 那就穷举吧 假定三个数 a b c  且a < b < c  以b为主循环      第二重循环 a 从 1小于b           a*a +b*b 是否能构成一个平方数 c*c

user: user-2
content: 引用 1 楼 寻开心 的回复:3 ，4 ， 5 5 ，12 ，13 7 ，24 ， 25 9 ，40 ，41 …… 规律是： 2n+1，2n²+2n ，2n²+2n+1  看一组数是否为勾股数，首先除去最大公约数，再看较大的两个数是否相差1，且较大的两数之和是最小数的平方。  例如： 6 8 10 是要先变成3 4 5的然后就满足了前面的规则 显然不全，8，15，17

user: user-1
content: 3 ，4 ， 5 5 ，12 ，13 7 ，24 ， 25 9 ，40 ，41 …… 规律是： 2n+1，2n²+2n ，2n²+2n+1  看一组数是否为勾股数，首先除去最大公约数，再看较大的两个数是否相差1，且较大的两数之和是最小数的平方。  例如： 6 8 10 是要先变成3 4 5的然后就满足了前面的规则
user-0 提问: c++

回复:
user: user-1
content: 公式直接出答案  写代码吧， 自己写，这个就是锻炼基础的能力的啊  错了贴出来 改就是了

user: user-2
content: int while_Func() { 	unsigned int i = 1; 	unsigned int sum1 = 0, sum2 = 0, sum3 = 0; 	while (i<98) 	{ 		sum1 += i; 		sum2 += i + 1; 		sum3 += i + 2; 		i += 3; 	} 	printf("1 + 4 + 7 + 10 + 13 + ……的和:%u\n", sum1); 	printf("2 + 5 + 8 + 11 + 14 + ……的和:%u\n", sum2); 	printf("3 + 6 + 9 + 12 + 15 + ……的和:%u\n", sum3); 	return 0; }  int for_Func() { 	unsigned int sum1 = 0, sum2 = 0, sum3 = 0; 	for (unsigned int i = 1; i < 98; i += 3) 	{ 		sum1 += i; 		sum2 += i+1; 		sum3 += i+2; 	} 	printf("1 + 4 + 7 + 10 + 13 + ……的和:%u\n", sum1); 	printf("2 + 5 + 8 + 11 + 14 + ……的和:%u\n", sum2); 	printf("3 + 6 + 9 + 12 + 15 + ……的和:%u\n", sum3); 	return 0; }
user-0 提问: 怎么把goto语句换掉？

回复:
user: user-0
content: 引用 4 楼 自信男孩的回复:#include <stdio.h>   void f5() {     double r,s;     int a[100],i,j,k,q,w;      printf("\n\n一位、二位的平方数：");     for(i=0;i<=9;i++)     {         a[i]=i*i;printf("%4d",a[i]);     }     printf("\n\n金蝉平方数：");     for(i=sqrt(100);i<=sqrt(9876543210);i++)     {         r=s=i*i;         if(chongfu(s)!=1) continue;         w=log10(s)+1;         while(w>2)         {             r=fmod(r,pow(10,w-1));  //求余             r=(long)(r/10);             q=sqrt(r);             if(r!=q*q)                 break;//goto h;             w=w-2;         }         if (w > 2)             continue;         for(j=0;j<=9;j++)             if(r==a[j])                 printf("%6.0lf",s); //h:;     } } 供参考～  你的h:后要做什么？  如果什么都不做，上面这样改是可以的。 应该是什么都不做，谢谢了

user: user-1
content: #include <stdio.h>   void f5() {     double r,s;     int a[100],i,j,k,q,w;      printf("\n\n一位、二位的平方数：");     for(i=0;i<=9;i++)     {         a[i]=i*i;printf("%4d",a[i]);     }     printf("\n\n金蝉平方数：");     for(i=sqrt(100);i<=sqrt(9876543210);i++)     {         r=s=i*i;         if(chongfu(s)!=1) continue;         w=log10(s)+1;         while(w>2)         {             r=fmod(r,pow(10,w-1));  //求余             r=(long)(r/10);             q=sqrt(r);             if(r!=q*q)                 break;//goto h;             w=w-2;         }         if (w > 2)             continue;         for(j=0;j<=9;j++)             if(r==a[j])                 printf("%6.0lf",s); //h:;     } } 供参考～  你的h:后要做什么？  如果什么都不做，上面这样改是可以的。

user: user-2
content: 非要改 考虑改成函数内部return  注意 传入参数 还需要注意函数调用完成之后 要有特定方法 用于跳过后面的循环

user: user-3
content: 把流程图画清楚，就知道怎么改了。

user: user-2
content: goto 就挺简单的 改到是没什么必要改
user-0 提问: 求大佬解这道C语言的题

回复:
user: user-0
content: 引用 1 楼 寻开心的回复:很有意思的一个题目 temp=a， a=b， b=temp；  这个没有什么问题， 交换了a和b这两个指针的值， 需要主要的是此时temp和b这两个指针相同的  后面就是有趣 地方了 *temp = *b; // b 和 temp是同一个指针， 这个操作，什么也没有改变啊  *b = *c;  // 因为指针交换， *b此时是主函数里面都a变量，被赋值为c变量。此时主函数的abc就是373了 *c = *temp // 注意temp和b是同一个指针，b指针就是原来的a变量， 此时a变量已经被上句改成了3. *c=3； 结果还是373  回想一下， 用指针交换数据的代码是什么 int t； t = *b； *b = *c; *c = t;  用了中间变量t 而func这个函数当中中间变量是什么？ *temp，  *temp就是b本身，所以操作就是 b=c  c=b 这样两句， 结果就是b和c是同一个数值了 懂了懂了，一语道破谢谢！

user: user-1
content: 很有意思的一个题目 temp=a， a=b， b=temp；  这个没有什么问题， 交换了a和b这两个指针的值， 需要主要的是此时temp和b这两个指针相同的  后面就是有趣 地方了 *temp = *b; // b 和 temp是同一个指针， 这个操作，什么也没有改变啊  *b = *c;  // 因为指针交换， *b此时是主函数里面都a变量，被赋值为c变量。此时主函数的abc就是373了 *c = *temp // 注意temp和b是同一个指针，b指针就是原来的a变量， 此时a变量已经被上句改成了3. *c=3； 结果还是373  回想一下， 用指针交换数据的代码是什么 int t； t = *b； *b = *c; *c = t;  用了中间变量t 而func这个函数当中中间变量是什么？ *temp，  *temp就是b本身，所以操作就是 b=c  c=b 这样两句， 结果就是b和c是同一个数值了
user-0 提问: 询问编写C语言程序

回复:
user: user-1
content: 引用 4 楼 qq_46114714 的回复:[quote=引用 3 楼 user-3的回复:][quote=引用 2 楼 qq_46114714 的回复:] [quote=引用 1 楼 qq_1457346882的回复:]fopen打开文件，读十个数据到字符数组，然后一个字符串数组接收输入的城市，循环比较（strcmp）文件读出来的数组变量和你输入的 请问，能帮我设计出这个程序吗？谢谢！[/quote]可以 要钱[/quote] 那你要多少钱帮我设计这个程序[/quote]   #include <stdio.h> #include <string.h> int main() { 	char city[10][30],tmp[30]; 	FILE* fp; 	int i; 	//打开文件并读入至数组city  	fp=fopen("a.txt","r"); 	for( i=0; i<10; i++) 		fscanf(fp,"%s",city[i]); 		 	printf("请输入一个城市名称："); 	scanf("%s",tmp); 	//查找 	for(i=0; i<10; i++)  		if(strcmp(tmp,city[i])==0) 			break; //如找到就跳出循环  	if (i<10) 		printf("查到\n"); 	else 		printf("找不到\n"); 	fclose(fp); 	return 0;  }

user: user-2
content: 引用 2 楼 qq_46114714 的回复:[quote=引用 1 楼 qq_1457346882的回复:]fopen打开文件，读十个数据到字符数组，然后一个字符串数组接收输入的城市，循环比较（strcmp）文件读出来的数组变量和你输入的 请问，能帮我设计出这个程序吗？谢谢！[/quote] #include<stdio.h> #include<stdlib.h> #include<string.h> int main(){         FILE *fp = fopen("test.txt","r");         if(fp==NULL){                 perror("fail to read");                 exit(1);         }         char str[10][40];         int i=0,j=0;         while(i<10){                 for(;;){                         fscanf(fp,"%c",&str[i][j]);                         if(str[i][j]=='\n'){                                 str[i][j]='\0';                                 j=0;                                 i++;                                 break;                         }                         j++;                 }         }         for(i=0;i<10;i++){                 printf("%s\n",str[i]);         }         char dest[40]={};         scanf("%s",dest);         int flog=0;         for(i=0;i<10;i++){                 if(strcmp(&str[i][0],dest)==0){                         printf("ok\n");                         flog=1;                         break;                 }         }         if(flog==0){                 printf("no\n");         }         return 0; } 这个文件是当前路径的，如果想换路径那打开的时候要有路径，这次就算了，下次你要先去试试怎么写再问，我们热于给你改代码指错，但是个人排斥直接给代码。你直接看不写，对成长没有帮助，所以我就不给你加注释了，你自己去查下fopen的用法和fscanf的用法吧。自己动手了才会记住

user: user-0
content: 引用 3 楼 user-3的回复:[quote=引用 2 楼 qq_46114714 的回复:] [quote=引用 1 楼 qq_1457346882的回复:]fopen打开文件，读十个数据到字符数组，然后一个字符串数组接收输入的城市，循环比较（strcmp）文件读出来的数组变量和你输入的 请问，能帮我设计出这个程序吗？谢谢！[/quote]可以 要钱[/quote] 那你要多少钱帮我设计这个程序

user: user-3
content: 引用 2 楼 qq_46114714 的回复:[quote=引用 1 楼 qq_1457346882的回复:]fopen打开文件，读十个数据到字符数组，然后一个字符串数组接收输入的城市，循环比较（strcmp）文件读出来的数组变量和你输入的 请问，能帮我设计出这个程序吗？谢谢！[/quote]可以 要钱

user: user-0
content: 引用 1 楼 qq_1457346882的回复:fopen打开文件，读十个数据到字符数组，然后一个字符串数组接收输入的城市，循环比较（strcmp）文件读出来的数组变量和你输入的 请问，能帮我设计出这个程序吗？谢谢！

user: user-2
content: fopen打开文件，读十个数据到字符数组，然后一个字符串数组接收输入的城市，循环比较（strcmp）文件读出来的数组变量和你输入的
user-0 提问: Git上有个项目要用autotool，在windows下怎么办？

回复:
user: user-0
content: 找到了一个分支，别人编译好的dll，有gcc和vs编译的

user: user-0
content: 引用liquid-dsp is a free and open-source digital signal processing (DSP) library designed specifically for software-defined radios on embedded platforms. The aim is to provide a lightweight DSP library that does not rely on a myriad of external dependencies or proprietary and otherwise cumbersome frameworks. All signal processing elements are designed to be flexible, scalable, and dynamic, including filters, filter design, oscillators, modems, synchronizers, complex mathematical operations, and much more. 就是说无法用于windows平台？？

user: user-0
content: 引用 6 楼 akari10032 的回复:确定这个项目跨平台吗，作者没说能在win系统用啊 啊，这玩意还限制平台吗？他在什么平台开发就在什么上用啊

user: user-1
content: 确定这个项目跨平台吗，作者没说能在win系统用啊

user: user-0

user: user-2
content: liquid-dsp only relies on libc and libm。下下来用呗

user: user-0
content: 都没人看吗。。。

user: user-2
content: 着我就不知道了，没有用过欸。

user: user-0
content: 引用 2 楼 千梦一生 的回复:liquid-dsp only relies on libc and libm。下下来用呗 怎么编译呢，直接拷到项目中使用？不用编译成dll ?
user-0 提问: 这两个结果为什么会不一样

回复:
user: user-1
content: %f的输出，是带有进位的特性的。 3.3333325*3 = 9.9999975 = 10 而后面那个是9.99999905没有进位  %f输出，输出10不代表那个数就真的是10， 它依然是9.9999975，只是四舍五入显示成10了而已

user: user-0
content: 引用 2 楼 寻开心的回复:精度问题,c那里你多放一个小数点后的3就对了 float a,b,c,d; a = 10.0 /3 ; printf("%.8f\n", a); d = 3.333333; printf("%.8f\n", d); printf("%8f    %.8f\n", a*3, d*3);  输出结果： 3.33333325    // 这个是10/3 3.33333302    // 这个是3.33333  10.000000    9.99999905 就是10/3.0*3输出为什么是10.000000而不是9.999999

user: user-0
content: 引用 楼主 RogerRro的回复: 就是10/3.0*3输出为什么是10.000000而不是9.999999

user: user-1
content: 要知道小数点后的数字的二进制表示法 小数点后的各个数位分别表示 0.5 0.25 0.125 0.0625 0.03125 0.015625 ...... 是拿这些小数求和得到具体到数值的， 显然这些数不能精确的表示3.33333333这样的，那么就是最接近这个数字的数了 浮点数独精度是6~7位， 说的就是近似能保证小数点后6或者7位的数值是准确的

user: user-1
content: 精度问题,c那里你多放一个小数点后的3就对了 float a,b,c,d; a = 10.0 /3 ; printf("%.8f\n", a); d = 3.333333; printf("%.8f\n", d); printf("%8f    %.8f\n", a*3, d*3);  输出结果： 3.33333325    // 这个是10/3 3.33333302    // 这个是3.33333  10.000000    9.99999905

user: user-2
content: float浮点数的有效位是6位，不是说总共只有6位小数。
user-0 提问: 之:宏定义#define

回复:
user: user-1
content: #define就是直接替换代码的 你无妨这样想象，  程序在执行真正的编译之前，先做了一遍预处理过程 遇到SQ（y）这样的代码，比如你的例子当中 SQ（a+1），它就自动的给你替换成（y）*（有），也就是等于你手工输入的代码 （a+1）*（a+1） 一样 完成这个替换后， 程序才继续编译

user: user-0
content: 我自学，有点看不懂这个过程，能通俗店么？

user: user-2
content: 需要注意的宏定义等价替换不是在程序执行时，而是预编译阶段。总得来说，宏定义替换是在形成可执行程序前就发生了。
user-0 提问: 输入字符串China,分析程序改动后显示结果变化的原因是什么？

回复:
user: user-1
content: 其他人的讨论基本解答你的疑问了  我说点和你的疑问没关系的事情 你的数组才5个元素 %s输入China 加上字符串结尾的0 是6个字节  越界操作 很危险 注意改正

user: user-2
content: char 数组 一个元素占一个字节 int 数组一个元素占4个字节 所以 char[5]是：【0】  【1】   【2】  【3】 【4】        字节：   0       1          2          3        4 int[5]是：【0】        【1】        【2】           【3】              【4】      字节：  0 1 2 3      4 5 6 7     8 9  10  11   12 13 14 15    16 17 18 19  输入%s是字符串，每个字符占一个字节 China分别对应：0 C， 1 h， 2 i， 3  n， 4 a  所以会出现你说的现象

user: user-3
content: int在楼主这里应该是占4个字节， "China"，%s格式输入，前四个字节存"Chin"，第五个字节存'a' c[0]占四个字节，%c是输出一个字节，因此是'C'，c[2]是第二个4字节，也是输出一个字节，因此是'a'  个人见解，建议把c[0]的四个字节分别输出验证一下上面的推断。

user: user-4
content: 原因就是整数是： int    是四个字节 char 是一个字节 scanf进去后， 第一个整数占据了4个字符，第二个占据了一个字符 输出的时候，指定是字符，传递的是整数，但是也只输出了最后第一个字符（对应整数的最低字节）  你可以做一个联合体 union T {     int n     char  ch[4]; } t; t.n = c[i]; 然后你看看 t.ch【0】 -- t.ch【3】 都是什么东西
user-0 提问: vs2019  c语言 char 与char *不兼容怎么解决呀

回复:
user: user-1
content: char b="wwe"; 这样定义是有问题的。应该char *b ...  另外if (ar2[i] == b) 这样比较也是有问题，建议用strcmp/strncmp，对比vs2019软件里对应的字符串比较函数。  所以，并不是不兼容的问题，而是你的用法没有按照合法的使用～

user: user-2
content: char b="wwe"; 应该是 char *b="wwe";   if (ar2[i] == b) 应该是 if (0 == strcmp(ar2[i],b))

user: user-3
content: 字符串比较只能用strcmp不能用 ==，   ==判断的是两个指针是否相同， 并不是指针指向的内容是否相同

user: user-2
content: C的字符串比较用 strcmp函数，C++能直接用==号比较是因为重载了这个操作符
user-0 提问: 新手求助

回复:
user: user-0
content: 引用 3 楼 南尘.的回复:我看到你报错的原因是：Id returned 1 exit status. 可能有如下原因： 1、库函数拼写错误。如：printf，scanf等。 2、定义的函数名在调用时，函数名拼写错误。 3、在执行函数时可能函数体本身的问题。 4、检查一下任务栏，一般都是上一次“运行”的小黑窗还没关，然后执行“编译”，由于该文件正在被使用，程序没法执行编译，所以就报了这样的错误。 解决方法：把刚才运行的cmd窗口关闭。 不好意思，最近期末考试，没看 这个我就开了一个窗口呀…

user: user-1
content: 我看到你报错的原因是：Id returned 1 exit status. 可能有如下原因： 1、库函数拼写错误。如：printf，scanf等。 2、定义的函数名在调用时，函数名拼写错误。 3、在执行函数时可能函数体本身的问题。 4、检查一下任务栏，一般都是上一次“运行”的小黑窗还没关，然后执行“编译”，由于该文件正在被使用，程序没法执行编译，所以就报了这样的错误。 解决方法：把刚才运行的cmd窗口关闭。

user: user-0
content: 引用 1 楼 寻开心的回复:#include <mmsystem.h>  #pragma comment(lib, "winmm.lib")   这里是英文吗，看图片感觉是中文或者有空格在winmm.lib这个字符串里面了 没有…我这个就这样……

user: user-2
content: #include <mmsystem.h>  #pragma comment(lib, "winmm.lib")   这里是英文吗，看图片感觉是中文或者有空格在winmm.lib这个字符串里面了
user-0 提问: 步进电机控制程序

回复:
user: user-0
content: 引用 2 楼 柒贰伍玖的回复:没有原理图吗 没有，什么都没有，只有这个

user: user-1
content: 没有原理图吗

user: user-0
content: 怎么写呀，求大神帮忙
user-0 提问: 我想知道我这段c语言代码错在哪？

回复:
user: user-1
content: 首先一个很大的问题，你的指针还是野指针，都没有赋初值，你的u跟*u地址也是一样的，target++中的这个变量也没有地址，你怎么执行加加操作？指针的用法不比其他，不严谨稍微一点偏差都有可能报错，让程序崩溃。有指针出错了可以加printf（“%p”）去看地址，看值，来找错调试，这里的输出语句我是中文，不能直接用，你自己填了补充

user: user-2
content: int main() {     int source[three][5] =     {         {1, 2, 3, 4, 5},         {6, 7, 8, 9, 10},         {11, 12, 13, 14, 15}     };   int t[three][5];  // 定义一个目标数组      int (*target)[5];     int (*u)[5],*v;     printf("target= ");      for (u=source,target=t; u<source+three; u++,target++)     {         int * t = *target;   // 定义一个中间变量， *target不能自增， 因为它不是一个变量         for(v=*u; v<*u+5; v++, t++)         {             *t = *v;             printf("%d  ",*t);         }     }      printf("\n");     int i, j;     for (i=0; I<three; i++ ) for (j=0; j<5; j++) printf("%d ", t[i][j]);      return 0; }

user: user-3
content: int (*s)[5],*v, (*d)[5], *z;  20            19     for (s = source, d = target; s < source + n; s++, d++) {  18         for (v = *s, z = *d; v < *s + 5; v++, z++)  17             *z = *v;  16     }

user: user-1
content: 引用 2 楼 weixin_45906870 的回复:那应该怎么改呢？ 说实话不是很懂你要干嘛，指针的本质是地址，也就是说你操作了，定义了三四个指针，要做的是把当然地址的值赋给当前地址再输出？ 你后来赋初值的代码我一句一句看了，发现问题在于*target++这里，这里你加出来的地址不是二维数组的地址了,这里加加操作不能加到数组的列上的地址，除非你跟u和v一样，重新定义一个等于你target行的地址，再加加，要么就target【】++，但是你这里也用不了【】，因为你前面不是这么用的，【】里面没办法放值.这是你自己练习想的吧？

user: user-3
content: #include <stdio.h> #define three 3  int main()  {      int source[three][5] =      {          {1, 2, 3, 4, 5},          {6, 7, 8, 9, 10},          {11, 12, 13, 14, 15}      };      int (*target)[5];      int (*u)[5],*v;      printf("target= ");      for (u=source,target=source; u<source+three; u++,target++)      {          for(v=*u; v<*u+5;v++)//,*target++)          {              //**target = *v;              printf("%d  ",*v);          }          putchar(10);      }        return 0;  } 供参考～  target和u是一样，为什么要用**target = *v;呢？

user: user-0
content: 引用 3 楼 自信男孩 的回复：[quote=引用 2 楼 weixin_45906870 的回复:] 那应该怎么改呢？ 直接贴代码，可以帮你调试一下～[/quote]已贴

user: user-0
content: #include <stdio.h> #define three 3  int main()  {      int source[three][5] =      {          {1, 2, 3, 4, 5},          {6, 7, 8, 9, 10},          {11, 12, 13, 14, 15}      };      int (*target)[5];      int (*u)[5],*v;      printf("target= ");      for (u=source,target=source; u<source+three; u++,target++)      {          for(v=*u; v<*u+5;v++,*target++)          {              **target = *v;              printf("%d  ",**target);          }      }        return 0;  } 这是我的代码

user: user-3
content: 引用 2 楼 weixin_45906870 的回复:那应该怎么改呢？ 直接贴代码，可以帮你调试一下～

user: user-0
content: 那应该怎么改呢？
user-0 提问: 图书管理系统的删除图书的问题

回复:
user: user-1
content: 删除是根据覆盖，那么你只是讲要删除的用其后面的覆盖，那么用于覆盖的图书信息是不是要用它后面的图书信息覆盖。所以只覆盖一次是不行的。而是用要删除的后面的信息依次向前覆盖。另外注意让统计图书信息个数的变量自减1，即总数减少一个。

user: user-2
content: 你的删除操作呢？还有如果书是你这个数组的最后一个呢？那么k+1取的值是什么，能不能取
user-0 提问: 问题有点繁琐，大神请进！马踏棋盘问题：为何我的思路总也跑不出结果？

回复:
user: user-0
content: 刚才有位朋友指出我的代码有错误，我仔细查找了下问题，我的这个帖子是从其它网站编辑后粘过来的，原贴地址：https://fishc.com.cn/forum.php?mod=viewthread&tid=153097&page=1&extra=#pid4253248 我发现原贴显示有问题，实际我抄代码也没有错，但发出来后就是不显示，给我漏掉了，如果再有类似的问题欢迎指出，不过还是希望大家能从逻辑实现的角度多多指教，谢谢。

user: user-0
content: 引用 1 楼 遇见女神 的回复:代码错误太多。先挑一段代码来说。           for(i = 0; i< count; i++)         {                 printf("第%d种行走方案：",i);                 for(j = 0;j< 64;j++)                 {                         printf("%d  ",result[i][j]);                 }                 printf("\n");         }  代码输出如下： result[0] result[1] ... result[63] result[0] result[1] ... result[63] ... result[0] result[1] ... result[63] 64个数字，重复count次打印？姑且假设找到2种以上的方案，这样的打印，把方案打印出来了吗？  代码写在虚拟机上的，抄写时漏了，你说的这不是根本问题所在

user: user-1
content: 代码错误太多。先挑一段代码来说。           for(i = 0; i< count; i++)         {                 printf("第%d种行走方案：",i);                 for(j = 0;j< 64;j++)                 {                         printf("%d  ",result[j]);                 }                 printf("\n");         }  代码输出如下： result[0] result[1] ... result[63] result[0] result[1] ... result[63] ... result[0] result[1] ... result[63] 64个数字，重复count次打印？姑且假设找到2种以上的方案，这样的打印，把方案打印出来了吗？
user-0 提问: c语言水仙花数

回复:
user: user-1
content: #include<stdio.h> int main(){      int i,j, m,n, a, b;      int flag=0;      printf("输入第一个正整数：");      scanf("%d",&a);      printf("输入第二个正整数：");      scanf("%d",&b);      if((a>99&&b>99)&&(a<1000&&b<1000))      {      if(a<b){   for(n=a;n<=b;n++)   {          i=n/100;          j=n/10-i*10;          m=n%10;          if(n==i*i*i+j*j*j+m*m*m)       {          printf("这两个之间数的水仙花数为:%d\n",n);          flag=1;        }     } }  else     { for(n=b;n<=a;n--){          i=n/100;          j=n/10-i*10;          m=n%10;          if(n==i*i*i+j*j*j+m*m*m)       {          printf("这两个之间数的水仙花数为:%d\n",n);          flag=1;        } }         if(flag==0)        printf("两个数之间没有水仙花数");    } }      else  printf("你输入的两个数无效！\n");           return 0;  } 养成良好的代码规范，格式对对齐，{}不要省略，哪怕就一句执行语句。不然错了找都不好找

user: user-2
content: 貌似丢了括号 比如for(n=b;n<=a;n--)这里
user-0 提问: 求助

回复:
user: user-0
content: 引用 1 楼 寻开心的回复:它提示你了， 当空或者只有1个元素的时候，你的结果有问题  完整的把代码贴文字出来，不要图，否则无妨帮助调试 #include <stdio.h>  #include<stdlib.h> typedef struct number{ int a; struct number *next; }NUM; int main()  {  int n,i=0; scanf("%d",&n); NUM *head,*p,*q; head=(NUM*)malloc(sizeof(NUM)); head->next=NULL; while(i<n) { p=(NUM*)malloc(sizeof(NUM)); scanf("%d",&p->a); if(i==0) q=head=p; else q->next=p; p->next=NULL; q=p; i++; } i=1; p=head; while(i<=n) { if(i!=n) printf("%d ",p->a); else printf("%d",p->a); i++; p=p->next; } free(p); free(q); free(head); return 0; }

user: user-1
content: 它提示你了， 当空或者只有1个元素的时候，你的结果有问题  完整的把代码贴文字出来，不要图，否则无妨帮助调试

user: user-1
content: 你的问题在 最后的free（p）  free（q）和 free（head）上 你可以把这三行删掉估计能过（不free，在某些测评系统上不算错）  free（NULL）不会执行任何操作不会产生错误 但是p，q，head这三个家伙要是有相等的，就会造成一个地址被free多次， 这是致命错误，你的问题很可能出在这里  算法上，你需要构造一个循环，从头开始摘下节点并释放，然后处理后续的节点，直到全部释放完
user-0 提问: C语题目

回复:
user: user-1
content: 写出这个代码的人，有公司会收留么

user: user-2
content: 我觉得是11吧。

user: user-2
content: 自己可以写一个程序试一下，不就知道了。你也可以看看各个符号的优先级，就知道该怎么算了。括号是优先级在这里面是最高的，之后是+号，然后才是等号。

user: user-3
content: 引用 2 楼 weixin_45846558的回复:[quote=引用 1 楼 fighting2022的回复:]我觉得是11吧。 真的有那么简单吗？。。。。。。。。[/quote] 是这么简单，先算括号里面的，将6赋值给c，然后c与5的和赋值给a。

user: user-0
content: 引用 1 楼 fighting2022的回复:我觉得是11吧。 真的有那么简单吗？。。。。。。。。
user-0 提问: 函数中有scanf，在键盘上输入后却没有办法显示。希望大佬指正（程序是用链表反向输出的）

回复:
user: user-0
content: #include "stdio.h" #include "stdlib.h" struct node {     int number;     struct node *next; }; int main() {struct node *makelist();  void printlist (struct node *listhtead);  printf("输入正数，用输入负数结束。\n");  printf("输入正数序列：\n");  printlist(makelist());  return 0; } struct node *makelist() {struct node *ptr,*oldptr,*nalloc();  int newnum;  ptr=NULL;  scanf("%d",&newnum);  while(newnum>=0)  {oldptr=ptr;   ptr=nalloc();   ptr->number=newnum;   ptr->next=oldptr;   scanf("%d",&newnum);  }  return (ptr); } struct node *nalloc() {  return((struct node*)malloc(sizeof(struct node))); }  void printlist(struct node *listhead)      {//struct node *listhead;  while(listhead!=NULL)  {  printf("%d",listhead->number);  listhead=listhead->next;  }  }    我自己解决了，确实是函数参数的问题，谢谢你的回答了，上面的代码是可以正常运行的。

user: user-1
content: 代码有问题呀，实参形参搞乱了。  #include "stdio.h" #include "stdlib.h" struct node //建立一个结构体 { 	int number; 	struct node *next; }; int main() { 	  node *makelist(); //声明数据指针型函数makelist 		void printlist(  node* listhead); //函数声明 		printf("输入正数，用输入负数结束。\n"); 	printf("输入正数序列：\n"); 	printlist(makelist()); 	return 0; }   node *makelist() { 	  node *ptr, *oldptr, *nalloc(); 	int newnum; 	ptr = NULL; 	scanf("%d", &newnum); 	while (newnum >= 0)   //直到输入负数时停止 	{  		oldptr = ptr; 		ptr = nalloc(); 		ptr->number = newnum; 		ptr->next = oldptr; 		scanf("%d", &newnum); 	} 	return (ptr); }   node *nalloc() { 	return((  node*)malloc(sizeof( node)));  //分配一个结构体大小的空间 } void printlist(  node* listhead) { 	//struct node *listhead; 	while (listhead != NULL) 	{ 		printf("%d", listhead->number); 		listhead = listhead->next;   //反向输出 	} }
user-0 提问: 怎么修改divide error的错误

回复:
user: user-0
content: 具体思路是 举个例子：该节点数是34658，number是46 那我就想判断58==46？ 不行就判断65==46？ 46==46？ 是就下一个节点

user: user-0
content: head是链表的头指针，number是指定数字
user-0 提问: c基础问题

回复:
user: user-1
content: 循环找到数字存入数组，fopen以写的权限打开文件，把数组的值写进文件，fclose关闭文件。不难，先自己尝试一下，不要直接要代码，对成长没帮助，写入文件可以用。文件操作的函数百度都有用法的
user-0 提问: 为什么这题用gets不行必须要用scanf？

回复:
user: user-1
content: gets是遇到换行符返回，没看出gets有什么问题。倒是scanf使用上，需要去掉a前面的&。

user: user-2
content: gets好像会读取最后的换行符，你检测一下去掉换行符试试
user-0 提问: 纠结

回复:
user: user-1
content: 指针是地址，指针名是指向一个地址的变量名，数组的大小初始化就是固定的，不过有根据你后面初始化的值来形成大小的方式比如a[][3]={ {1,2,3},{1,2,3],{1,2,3}};这个数组就是a[3][3],如果里面再多一组{}就是a[4][3]

user: user-2
content: 1、指针名不是地址，指针变量存放的内容就是地址 2、数组大小是固定的，一旦分配了空间就确定了，但可以通过重新分配空间来更改数组
user-0 提问: 关于指针的优点

回复:
user: user-1
content: 引用 2 楼 ForgetTomorrow 的回复:老师要检查作业，通常情况下每个学生都得做一份。 指针的好处就是只用做一份，老师检查谁的就把这份做业（地址）改成谁的。很糟糕的例子

user: user-2
content: 老师要检查作业，通常情况下每个学生都得做一份。 指针的好处就是只用做一份，老师检查谁的就把这份做业（地址）改成谁的。

user: user-3
content: 例如，函数传递参数时，会产生一个参数的拷贝，如果是一个复杂的结构体占用n个字节，拷贝它需要n的时间 指针占四个字节，指针的拷贝只需要4的时间 n越大这个时间优势越明显， 内存占用指针只需要多出4个字节，而不用指针则需要多出n个字节

user: user-1
content: 引用 8 楼 千梦一生的回复:[quote=引用 7 楼 lin5161678 的回复:] [quote=引用 4 楼 千梦一生 的回复:] [quote=引用 3 楼 lin5161678 的回复:] [quote=引用 2 楼 ForgetTomorrow 的回复:] 老师要检查作业，通常情况下每个学生都得做一份。 指针的好处就是只用做一份，老师检查谁的就把这份做业（地址）改成谁的。很糟糕的例子 [/quote] 容易搞成内存泄漏  我也来个比喻。 老师给班上拿来一本英语辞海。然后每个同学都来抄一本走，这样大家都可以查找资料了。 指针的好处就是，放柜子里，然后告诉大家这里有本辞海，想翻阅的都来翻阅。 （这里主要是读，写的话就不建议了，毕竟词典这种东西，一般而言还是只读为好）[/quote]再说读写的问题 读是使用指针一个重要操作 写也是 没什么不安全 也没什么不建议  包括库函数在内 写操作是使用指针的原因的之一[/quote] 词典你让学生们随意写吗？[/quote] 指针又不是不能写 词典不能写所以不合适呗

user: user-4
content: 引用 7 楼 lin5161678 的回复:[quote=引用 4 楼 千梦一生 的回复:] [quote=引用 3 楼 lin5161678 的回复:] [quote=引用 2 楼 ForgetTomorrow 的回复:] 老师要检查作业，通常情况下每个学生都得做一份。 指针的好处就是只用做一份，老师检查谁的就把这份做业（地址）改成谁的。很糟糕的例子 [/quote] 容易搞成内存泄漏  我也来个比喻。 老师给班上拿来一本英语辞海。然后每个同学都来抄一本走，这样大家都可以查找资料了。 指针的好处就是，放柜子里，然后告诉大家这里有本辞海，想翻阅的都来翻阅。 （这里主要是读，写的话就不建议了，毕竟词典这种东西，一般而言还是只读为好）[/quote]再说读写的问题 读是使用指针一个重要操作 写也是 没什么不安全 也没什么不建议  包括库函数在内 写操作是使用指针的原因的之一[/quote] 词典你让学生们随意写吗？

user: user-1
content: 引用 4 楼 千梦一生 的回复:[quote=引用 3 楼 lin5161678 的回复:] [quote=引用 2 楼 ForgetTomorrow 的回复:] 老师要检查作业，通常情况下每个学生都得做一份。 指针的好处就是只用做一份，老师检查谁的就把这份做业（地址）改成谁的。很糟糕的例子 [/quote] 容易搞成内存泄漏  我也来个比喻。 老师给班上拿来一本英语辞海。然后每个同学都来抄一本走，这样大家都可以查找资料了。 指针的好处就是，放柜子里，然后告诉大家这里有本辞海，想翻阅的都来翻阅。 （这里主要是读，写的话就不建议了，毕竟词典这种东西，一般而言还是只读为好）[/quote]再说读写的问题 读是使用指针一个重要操作 写也是 没什么不安全 也没什么不建议  包括库函数在内 写操作是使用指针的原因的之一

user: user-1
content: 引用 4 楼 千梦一生 的回复:[quote=引用 3 楼 lin5161678 的回复:] [quote=引用 2 楼 ForgetTomorrow 的回复:] 老师要检查作业，通常情况下每个学生都得做一份。 指针的好处就是只用做一份，老师检查谁的就把这份做业（地址）改成谁的。很糟糕的例子 [/quote] 容易搞成内存泄漏  我也来个比喻。 老师给班上拿来一本英语辞海。然后每个同学都来抄一本走，这样大家都可以查找资料了。 指针的好处就是，放柜子里，然后告诉大家这里有本辞海，想翻阅的都来翻阅。 （这里主要是读，写的话就不建议了，毕竟词典这种东西，一般而言还是只读为好）[/quote]都是糟糕的例子  糟糕之处在于 这两个例子都只能做到 给懂指针的介绍指针 这种没意义的事情  没学会指针 看了这两个例子 该懵还是懵 学会指针 看不看这两个例子 没区别 也没提升 要介绍指针 要把指针的核心内容体现出来  类型知识 / 地址知识 / 指针算术 这些东西才有价值 半文不白的例子自嗨而已 用处不大

user: user-5
content: 1楼对的，但是就是不知道楼主能否理解了. 4楼也行吧.

user: user-4
content: 引用 3 楼 lin5161678 的回复:[quote=引用 2 楼 ForgetTomorrow 的回复:] 老师要检查作业，通常情况下每个学生都得做一份。 指针的好处就是只用做一份，老师检查谁的就把这份做业（地址）改成谁的。很糟糕的例子 [/quote] 容易搞成内存泄漏  我也来个比喻。 老师给班上拿来一本英语辞海。然后每个同学都来抄一本走，这样大家都可以查找资料了。 指针的好处就是，放柜子里，然后告诉大家这里有本辞海，想翻阅的都来翻阅。 （这里主要是读，写的话就不建议了，毕竟词典这种东西，一般而言还是只读为好）
user-0 提问: vs2017没有头文件和源文件

回复:
user: user-1
content: 项目建错了，选择创建项目：文件-》新建-》项目-》Visual C++ -》空项目

user: user-0
content: 引用 1 楼 不闻窗外事 的回复：项目建错了，选择创建项目：文件-》新建-》项目-》Visual C++ -》空项目谢谢

user: user-0
content: 引用 2 楼 user-2 的回复：学c/c++得建个c++的工程 创建了一个c#的工程肯定不行哦 因为c#里面没有include 类的关键字 肯定编译不过谢谢

user: user-0
content: 引用 1 楼 不闻窗外事 的回复：项目建错了，选择创建项目：文件-》新建-》项目-》Visual C++ -》空项目可是不是应该建控制台应用吗

user: user-2
content: 学c/c++得建个c++的工程 创建了一个c#的工程肯定不行哦 因为c#里面没有include 类的关键字 肯定编译不过
user-0 提问: C语言，文件问题出现乱码

回复:
user: user-1
content: 你用二进制的方式读取文件 但是文件本身并不是用二进制模式存储的， 而是文本格式， 不匹配，结果就是乱码啦。  不能用rb模式打开，它是 rt； 也不能用fread， 而是要用fscanf这样的函数读取  二进制模式下， 严格按照每个数据的大小读写内容，比如char name【10】它就会读入10字节， 并不会中间遇到空格或者回车符号而停止
user-0 提问: 弱鸡求助

回复:
user: user-0
content: 引用 1 楼 user-2的回复:应该是D吧~~~ 我也觉得是D，谢谢老铁

user: user-1
content: 这道题A、B、C、D都不对，不能一次赋值就能做到，置 0 需要 & 操作，置 1 需要 | 操作才能确保设置到且不改变其他位 GPIOF_MODE &= 0xF7;    //bit3  0 GPIOF_MODE |= 0x04;      //bit2 1

user: user-2
content: 应该是D吧~~~
user-0 提问: 求大佬解一下这两道C语言的题

回复:
user: user-1
content: int (*p)[5]； 声明p作为指向由5个整数组成的数组的指针。 如果取消引用p会发生什么？ 你会得到5个整数组成的数组。 即相当于int arr[5]=p[0]。

user: user-2
content: 首先第一个，这是一个数组指针，嗯，指向一个int [5]类型的数组，ps=s，等价于ps=&s[0]，也就是s的首地址，不过一个步长是int [5] ps+1=&s[0]+1=&s[1],是地址不是内容。 *(ps+3)=*(&s[0]+3)=*(&s[3])=s[3]=&s[3][0],是地址不是内容。 ps[0][2]，首先来看一下，ps=s，等价于ps=&s[0],ps[0]=&s[0][0],ps[0][2]=s[0][2] *(ps+1)+3=*(&s[0]+1)+3=*(&s[1])+3=s[1]+3=&s[1][0]+3=&s[1][3],是地址不是内容。 下面的一样
user-0 提问: 问个小问题：数组初始化问题

回复:
user: user-0
content: 谢谢各位高手的解答~

user: user-1
content: 定义初始化，a[2] = {1, 2};这样操作，一个问题是数组越界，因为数组a长度是2. 另一个问题，就是类型不匹配，后面是数组，即int *类型，前面是int类型。  只能a[0] = 1; a[1] = 2;这样初始化了（若先定义了）。  这是C的基础知识，建议了解并掌握了～

user: user-2
content: 你是没有完全理解数组的概念。 定义数组int a[2]时，表示整型数组a有两个元素。 看了你第二张图写的赋值，我觉得你是认为a[2]代表整个数组,其实不然，你定义数组a后写的a[2]代表的是并不代表整个数组，而是整型数组a的第三个元素（显然这是错误的，因为数组a只有两个元素），你的这种赋值写法只适合初始化（即定义的时候同时赋值）。  如果你不想初始化，可以通过循环来赋值。 另外你写的是中文分号，这也会报错。（仔细看第二张图片第一个分号与第二个分号的区别）

user: user-3
content: 注意，数组名的本质是地址，在你定义的时候初始化，此时的a[n]是从a0地址开始，到a0+类型*n地址位依次赋值后面的初始化的值。 但是你定义结束后的a【n】就是这一个地址而非定义时的连续地址，因此再一起赋值是不正确的，这个时候需要逐一赋值，例如你的数组，初始化之后的赋值应该是：a[0]=0;a[1]=1;定义时的n是只多少个数组空间，从1开始加，而赋值是通过地址，从0开始加，所以数组的第一位是a[0],最后一位是a[n-1];不要再用n，会越界

user: user-4
content: 定义时赋值那叫初始化，定义和赋值分开那叫赋值，赋值只能一个一个元素的赋 可以用memset 把数组所有元素设定成某一个值，但是里面实现也是一个个赋的

user: user-5
content: 数组越界和全角字符的错误

user: user-6
content: 第二个报错的原因，是“；”号吧？

user: user-7
content: 数组下标越界！超过数组最大值！

user: user-8
content: 这和你先定义先初始化没有关系，是你自己把初始化写错了，定义时初始化可以那样写，但定义后，a[2]表示的是数组第3位，只能赋一个值，另外你定义的是a[2]，那么最多只有a[1]，a[2]无论怎样都是错误
user-0 提问: 简易移动爱心

回复:
user: user-0
content: 引用 楼主 user-0的回复://chenwenlong 2019 12 27  #include <windows.h> #include <stdlib.h> #include <math.h> #include <stdio.h> #include <conio.h> void photo(int l,int u) { 	system("cls"); 	float f,x,y,m; 			while(u>=0) 		{ 			printf("\n"); 			u--; 		} 	for(y=1.6;y>=-1.6;y-=0.15) 	{ 		m=l; 		while(m>=0) 		{ 			printf(" "); 			m--; 		} 		for(x=-1.1;x<=1.1;x+=0.05) 		{ 			f=x*x+pow(y-pow(x*x,1.0/3),2)-1; 			putchar(f<=1e-5?'*':' '); 		} 		putchar('\n'); 	} } int main() { 	srand((NULL)); 	char ss[]="color f0"; 	char x; 	int u=0,l=0; 	printf("点击键盘可以移动");     while (1)     {     	x=rand()%16;     	ss[7]=x<10?(x+48):(x+87);         switch(getch() )         {         case 32:         	break;         case 0xE0:         	system(ss);             switch (getch())             {                 case 72://上                     u--;                     photo(l,u);                     break;                  case 80://下 				    u++;                     photo(l,u);                     break;                 case 75://左 。。。。。。。。。。。。。。
user-0 提问: 一道题急急急

回复:
user: user-1
content: x[3][4]才是你说的答案，因为strcpy越界了的。这题目出的不好，你跑一遍就知道了。

user: user-0
content: 引用 1 楼 user-1的回复:第一个循环： x[0]="abc" x[1]="abc" x[2]="abc" //此处strcpy(x[2],ch) 越界了~~  第二个循环输出： 1、从x[0][0]处一直输出到末尾，即：abcabcabc 2、从x[1][1]处一直输出到末尾，即：bcabc 3、从x[2][2]处一直输出到末尾，即：c  所以答案是：abcabcabcbcabcc 等等，我同学刚查了百度 答案是abcbcc

user: user-0
content: 哇好厉害谢谢o(^o^)o

user: user-1
content: 第一个循环： x[0]="abc" x[1]="abc" x[2]="abc" //此处strcpy(x[2],ch) 越界了~~  第二个循环输出： 1、从x[0][0]处一直输出到末尾，即：abcabcabc 2、从x[1][1]处一直输出到末尾，即：bcabc 3、从x[2][2]处一直输出到末尾，即：c  所以答案是：abcabcabcbcabcc
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: fgets函数，不过这个要一行固定大小，如果不想这么读，可以用两层循环，一层判断文件是否读完，一层逐一读取字符，读到换行把换行去掉跳出

user: user-0
content: 引用 1 楼 user-2的回复:自己尝试写过嘛？给你个思路的，定义两个字符串分别获取两个文件，循环，每次读一行，读完strcmp比较一下，返回u值不是0就打印这两个字符串再退出循环。先自己尝试去写，直接拿看没有提升的，下次遇到还是不会 怎么才能只读取一行啊？

user: user-2
content: 自己尝试写过嘛？给你个思路的，定义两个字符串分别获取两个文件，循环，每次读一行，读完strcmp比较一下，返回u值不是0就打印这两个字符串再退出循环。先自己尝试去写，直接拿看没有提升的，下次遇到还是不会
user-0 提问: 结构体声明时也是没有分配内存的？

回复:
user: user-1
content: 你这是结构体类型的定义，不是结构体变量的定义，类型的定义你觉得会分配空间吗

user: user-2
content: 是的，声明的时候是没有真正分配内存的，只有当你实例化一个变量的时候才会分配内存，如果你在声明的时候就实例化了结构体变量那也会分配内存 struct student{   // 结构体声明    char name[20]    char sex[20] } stu[2]；这样 还有结构体的；是不能少的 struct student{   // 结构体声明     char name[20]    char sex[20]  } ； 这样才是
user-0 提问: 跪求大佬指导怎么学C的编译过程和反汇编

回复:
user: user-0
content: 引用 1 楼 user-1 的回复:静态IDA，动态调试器OD，WINDBG，自己先写代码，调试看汇编代码，写点简单的汇编，看的多了就会了   谢谢大佬

user: user-1
content: 静态IDA，动态调试器OD，WINDBG，自己先写代码，调试看汇编代码，写点简单的汇编，看的多了就会了
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: scanf("%d %s %c %c");, 都加空格
user-0 提问: C语言链表 编译没有问题运行错误，求指导

回复:
user: user-1
content: do循环体里面的 while(last->next) 这个判断有问题，因为第一次运行的时候你的head 是null，last = head后 last也变为null，它没有一个实体对象也就没有next这个属性，这时候去引用它的next属性会导致程序崩掉

user: user-2
content: 20行：Node *last=head，而head此时是NULL，然后你就拿来用了，如：last->next，所以就出现了不可预知的行为。
user-0 提问: 快速排序遇到的问题

回复:
user: user-1
content: 你的算法在大数据量的情况下，栈很可能会爆掉的。

user: user-1
content: 你这快速排序算法没写对……

user: user-2
content: 不知道是不是因为字符太多，导致递归层数太多，所以堆栈使用超过了使用界限呢？？猜的，你要不可以试试在性能和内存更优秀的服务器上运行下呢
user-0 提问: csv文件写入问题

回复:
user: user-1
content: 这是C语言啊，%s是读到回车为止的，所以你这条 scanf("%s,%s,%d,%f,%f,%f",&a[i].major,&a[i].classroom,&a[i].num,&a[i].score[0],&a[i].score[1],&a[i].score[2]);，其实只读入了a[i].major，后面的都是空的，不信的话你逐个printf输出看看。可以改成比如：          printf("请输入专业：");         scanf("%s",&a[i].major);         printf("请输入班级：");         scanf("%s",&a[i].classroom);         printf("请分别输入学号及三科成绩（以空格分隔）：\n");         scanf("%d%f%f%f",&a[i].num,&a[i].score[0],&a[i].score[1],&a[i].score[2]);
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: 你的这个：printf("列="); scanf("%d",&l); while(l>9||l<0) { printf("输入的列无效，请重新输入！\n"); printf("行="); scanf("%d",&h); printf("列="); scanf("%d",&l); } } printf("列="); scanf("%d",&l); 其实功能也实现了，虽然while的很别扭，你只是多打了一组printf("列=");scanf("%d",&l); 所以while出来以后还要再给你显示输入

user: user-2
content: 数组a为：  123	34	46	34	6	7	5	67	34	6	 2	3	4	5	6	7	8	9	10	11	 1	2	3	4	5	0	0	0	0	0	 行=3 输入的行无效，请重新输入！ 行=1 列=99 输入的列无效，请重新输入！ 列=9 a[1,9]=11 这是显示结果

user: user-2
content: 前面输出二维数组不变 printf("行="); scanf("%d",&h); while(h>2||h<0) { printf("输入的行无效，请重新输入！\n"); printf("行="); scanf("%d",&h);  printf("列="); scanf("%d",&l); while(l>9||l<0) { printf("输入的列无效，请重新输入！\n"); printf("行="); scanf("%d",&h); printf("列="); scanf("%d",&l); } } printf("列="); scanf("%d",&l); 改为： while(1){                 printf("行=");                 scanf("%d",&h);                 if(h>2||h<0){                         printf("输入的行无效，请重新输入！\n");                 }                 else{                         while(1){                                 printf("列=");                                 scanf("%d",&l);                                 if(l>9||l<0){                                         printf("输入的列无效，请重新输入！\n");                                 }                                 else{                                         break;                                 }                         }                         break;                 }         } 就可以了

user: user-0
content: 像我们登录网站一样，密码输错账户名还留着，不至于账户名密码都得重新输入

user: user-0
content: while语句需要怎么改
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: 非常感谢

user: user-2
content: #include <stdio.h> void bx(int a, int b) { 	if (a>b) 	{ 		for (;a>1&&b>1;) 		{ 			a++; 			b--; 			printf("%d>%d\n", a, b); 		}  	} 	else if (a<b) 	{ 		for (;a>1&&b>1;) 		{ 			a++; 			b--; 			printf("%d>%d\n", a, b); 		} 	} 	else 	{ 		return; 	} }  int main() { 	int a; 	int b; 	printf("输入两个数:"); 	scanf("%d %d", &a, &b);  	printf("输出为bx(a,b)\n"); 	bx(a, b);  	return 0; }

user: user-3
content: for（单次表达式;条件表达式;末尾循环体） { 中间循环体； } 括号内部是两个；号，三个语句
user-0 提问: c语言

回复:
user: user-1
content: 定义一个指针char *a，只定义了a的类型，并没有实例化，即a是一个随机的指针，因此不能用*a='\0'。

user: user-2
content: 引用 2 楼 林涅槃 的回复:[quote=引用 1 楼 棉猴的回复:]编译器遇到‘\0’时才会认为字符串结束  定义一个char指针可以初始化char*a='\0';吗？[/quote] 可以啊，没问题

user: user-3
content: 应该是*p2 = '\0'; 或者*p2 = 0;  p2是指针，用p = '\0';等价于p = NULL;当然用'\0'赋值给p也注意类型不匹配

user: user-0
content: 引用 1 楼 棉猴的回复:编译器遇到‘\0’时才会认为字符串结束  定义一个char指针可以初始化char*a='\0';吗？

user: user-2
content: 编译器遇到‘\0’时才会认为字符串结束