Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: python pdfminer读取pdf文件时出现WARNING:root错误

回复:
user: user-1
content: 把PDF另存一下能解决部分问题...

user: user-0
content: 嗯嗯 谢谢回答 但是加了r之后还是显示相同的错误，现在的运行的路径为： read_from_pdf(r'G:\대학원\MD&A\年报\东方航空：2017年年度报告.PDF') 依然出现如图所示的错误，请问还有什么解决方法吗 谢谢指导。具体的错误代码我在网上也没有到，也不知道是什么问题

user: user-2
content: 路径前面加一个r
user-0 提问: python pdfminer读取pdf文件时出现WARNING:root错误

回复:
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 提问: 函数中return这个函数

回复:
user: user-1
content: 当编译器检测到一个函数调用是尾递归的时候，它就覆盖当前的活动记录而不是在栈中去创建一个新的。编译器可以做到这点，因为递归调用是当前活跃期内最后一条待执行的语句，于是当这个调用返回时栈帧中并没有其他事情可做，因此也就没有保存栈帧的必要了。通过覆盖当前的栈帧而不是在其之上重新添加一个，这样所使用的栈空间就大大缩减了，这使得实际的运行效率会变得更高。 ----百度百科

user: user-2
content: 引用 楼主 九月qkq92 的回复:谁能帮忙解释一下 下面这段代码的逻辑。谢谢  #include <stdio.h>  int fun(int n, int m) {     if (n == 0 || m == 0)     // 递归出口         return 1;     else         return fun(n - 1, m) + fun(n, m - 1);  // 两次调用递归函数fun } 上面的程序有点像是“阿克曼函数”的递归实现，但还是有区别的。不知道原题的是什么。 阿克曼函数是二元函数，其定义式为： （１）ACK(0, N)＝1＋Ｎ （２）ACK(M,0)＝ ACK(M-1, 1)（Ｍ>０） （３）ACK(M, N) ＝ ACK(M-1，ACK(M, N-1)) （Ｍ>0, Ｎ>０）

user: user-3
content: 还是个尾递归，避免堆栈上溢

user: user-4
content: 如果n等于0或m等于0，那么返回1；否则递归调用自己

user: user-5
content: 百度一下递归
user-0 提问: 求大佬指点错误，文件输出空白

回复:
user: user-1
content: void Read_File(list_single * head_Node,char * File_Name) {     FILE *fp;     struct student data;      //错误在这儿，File_Name加了双引号    // fp = fopen("File_Name","r");      fp = fopen(File_Name,"r");     if(fp ==  NULL)     {         printf("error:打开文件失败");         exit(0);     }     while(fscanf(fp,"%s\t%s\t%s\t%f\n",&data.num,&data.name,&data.sex,&data.math) != EOF)     {         insert_Node_by_Head(head_Node,data);//结点插入链表     }     fclose(fp); }

user: user-2
content: 读写文件参考这个 我用#CSDN#这个app发现了有技术含量的博客，小伙伴们求同去《C语言文件读写（1）-文本文件读操作》, 一起来围观吧 https://blog.csdn.net/zhanghaiyang9999/article/details/107032563?utm_source=app
user-0 提问: 求助一道oj题目

回复:
user: user-0
content: 已经解决了

user: user-1
content: 没有OJ地址吗？

user: user-2
content: 我反复阅读上面的文字，总感觉是自己语文水平不行，搞不太清楚题目到底是什么意思，特别是那个 Q。
user-0 提问: 一道C语言的数组题

回复:
user: user-1
content: 你是用int类型的n来储存的二进制数。你相当于干了这么一件事。int n=1000亿；这早就超过了int所能储存的数据大小。当然会出错了。你这数据太大一定出错，不然我就是活久见了，哈哈。上然仁兄说的对，建议你把二进制数当作字符串处理，统计出字符串长度，就很好做了。

user: user-2
content: 将输入当做整数，应该当成字符串进行处理，可以将其读入一个字符数组中存储。

user: user-3
content: 上面是非递归解，下面是递归解 #include <stdio.h> int btod(int d) { 	if(d<2) 		return d; 	else 		return btod(d/10)*2+d%10; } int main() { 	int sum,n; 	scanf("%d",&n); 	sum=btod(n); 	printf("%d",sum); 	return 0; }

user: user-3
content: #include <stdio.h> int main() { 	int i,sum,a[16]={0}; 	long n; 	scanf("%ld",&n); 	i=0; 	while(n!=0) 	{ 		a[i]=n%10; 		n=n/10; 		i++; 	} 	sum=0; 	for(;i>=0;--i) 		sum=sum*2+a[i]; 	printf("%d",sum); 	return 0; }

user: user-4
content: 输入一个二进制数串，当作字符串处理，而不是整数
user-0 提问: 新人求助帖

回复:
user: user-1
content: 在你的代码上做了些修改，供参考  #include <stdio.h> #include <string.h>  int main() {     char ch[8] = {0};      printf("Input your age\n");     scanf("%s",ch);     int i = 0;     while (ch[i] != '\0')     {         if (ch[i] >= '0' && ch[i] <= '9')         {             i++;         }         else         {             printf("error\n");             printf("Please input your age again\n");             return 0;         }     }      printf("correct\n");     printf("your age is %s",ch);      return 0; }

user: user-2
content: while循环

user: user-2
content: 可用ascii表判断是否为数字，再将字符转为数字

user: user-3
content: 不能用char，这只能接收一个字符，用int来接收，然后一个循环就好
user-0 提问: Linux服务器C语言SMTP发送邮件，邮件内容缺失

回复:
user: user-0
content: 如果服务端设置了sotimeout那就要看你手速了，哈哈哈

user: user-1
content: 以前我还cmd控制台telnet 发过邮件。按照smtp协议手工输入代码。
user-0 提问: C语言，简单成绩管理系统 帮帮忙看看我哪里错了

回复:
user: user-1
content: float ave( float a[N], int num) { int i; float sum,aver; for(i=0;i<num;i++) sum+=a[i]; aver=sum/num; return aver; }  这里sum要初始化，float sum = 0;

user: user-1
content: 报错信息是啥？
user-0 提问: 句柄怎么增加的?

回复:
user: user-1
content: 多线程当然要用锁

user: user-0
content: 引用 1 楼 user-1 的回复:句柄4被释放后，马上就会放到空闲队列首部，下次使用一般就会用到了。 句柄是一个long型 嗯  在多线程中句柄 应该是不安全的,一个线程持有  一个线程释放,持有的句柄 理论上是个无效句柄,但是也有可能是下次申请到的

user: user-1
content: 句柄4被释放后，马上就会放到空闲队列首部，下次使用一般就会用到了。 句柄是一个long型
user-0 提问: 求大佬指导哪里报错了 C语言  

回复:
user: user-0
content: 引用 3 楼 Clancey P.M.R.S. Yu 的回复：你定义yi的位置不对，把char yi;搁在最前边（do之前）应该就行了谢谢已经解决了

user: user-1
content: 你定义yi的位置不对，把char yi;搁在最前边（do之前）应该就行了

user: user-2
content: while循环中yi没有定义啊，把yi的定义放到do前面

user: user-0
content: --------------------Configuration: 1 - Win32 Debug-------------------- Compiling... 1.cpp E:\C语言\89 一元二次方程\1.cpp(42) : error C2065: 'yi' : undeclared identifier 执行 cl.exe 时出错.  1.exe - 1 error(s), 0 warning(s)     这是报错原因
user-0 提问: 求助，输入数字并过滤其中的符号和字母

回复:
user: user-1
content: 一个一个检查，如果不是数字和小数点就忽略

user: user-0
content: 感谢各位，我试一下，不会回复楼层

user: user-2
content: #include <stdio.h> #include <ctype.h> #include <string.h>  #define MAX_INPUT_SIZE  128  char *del_char(char *str);  int main(void) {      char input[MAX_INPUT_SIZE];     float num;      fgets(input, MAX_INPUT_SIZE, stdin);      del_char(input);     puts(input);     sscanf(input, "%f", &num);       printf("%f\n", num);     return 0; }  char *del_char(char *str) {     char *tmp, *back_str;      tmp = back_str = str;     while (*str) {         if (isdigit(*str) || *str == '.')             *tmp++ = *str;         str++;     }     *tmp = 0;      return back_str; } 供参考～  一个一个输入，多个可以考虑加循环

user: user-3
content: 没有配套的代码,但可以给你一个类似的参考代码,只需要在此基础上做些修改就可以了. 如果你还想了解其他的一些常见类型题,可以查看一下这篇文章https://blog.csdn.net/HYNN12/article/details/102610626,希望对你有所帮助.   #include <stdio.h> int main(int argc, const char * argv[]) {     int num_digital = 0;     int num_char = 0;     int num_space = 0;     int i;     char c[100] = "faj f afhka123";     //gets(c);     for (i=0; i<100; i++) {         if (c[i] == ' ') {             num_space ++;         }         if ((c[i] >= 'A' && c[i] <= 'Z')|| (c[i] >= 'a' && c[i] <= 'z')) {             num_char ++;         }         if (c[i] >= '0' && c[i] <= '9') {             num_digital ++;         }     }     printf("数字个数是%d\n字母个数是%d\n空格个数是%d\n",num_digital,num_char,num_space); return 0; } ———————————————— 版权声明：本文为CSDN博主「知之、行之、思之」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。 原文链接：https://blog.csdn.net/HYNN12/article/details/102610626
user-0 提问: 无法运行

回复:
user: user-1
content: 去cmd，找到对应位置，然后输入windeployqt UDPMutiCommTool.exe（处理exe文件包的丢失），双击就可以运行了

user: user-0
content: 引用 4 楼 张子又的回复:去cmd，找到对应位置，然后输入windeployqt UDPMutiCommTool.exe（处理exe文件包的丢失），双击就可以运行了 应该是杀毒软件的问题，关掉杀毒软件后可以正常运行（结果对错另说）

user: user-0
content: 引用 1 楼 自信男孩的回复:你的代码呢？谁知道你运行的是什么？ 我再把帖子改改

user: user-2
content: 你的代码呢？谁知道你运行的是什么？
user-0 提问: for循环中i的作用范围

回复:
user: user-0
content: 引用 3 楼 Fighting_Boom 的回复:1、for 循环中的 printf 打印中的“i + 1”是输出到“%d”中去的，“i + 1”只是对 i 的读操作，使用完毕之后，不会改变 i 本身的值；但是在循环体中的是“i++”，此时就是先使用 i 的值，然后使 i = i + 1；这个时候才有对 i 的写操作，也就是会改变 i 的值。 2、要判断作用域的话，需要看变量是在哪里声明的。如果是在函数内部，则对整个函数内部有效；如果是在代码块内部（以大括号区分），则只对此代码块有效，出了此范围后就不能使用了。举个例子，如果 for 循环的循环体是这样写的，for(int i = 0; i < num; i++)，此时 i 的作用域只在此 for 循环内的代码块有效，在出了此范围后，就无效（可以自己编译一下试试看）。 3、希望对你有帮助！ 就是这个意思，我忘记printf的i+1不改变i的值了，非常感谢

user: user-1
content: i的作用域是从定义的位置开始，如果i定义在代码块里，那么作用域就是代码块里。比如在for循环定义一个temp变量；那么循环体外是不能使用temp的。  从楼主的代码来看，i的作用域是整个main函数。

user: user-2
content: for循环体中并没有声明i，main中只有一个i变量。

user: user-3
content: 1、for 循环中的 printf 打印中的“i + 1”是输出到“%d”中去的，“i + 1”只是对 i 的读操作，使用完毕之后，不会改变 i 本身的值；但是在循环体中的是“i++”，此时就是先使用 i 的值，然后使 i = i + 1；这个时候才有对 i 的写操作，也就是会改变 i 的值。 2、要判断作用域的话，需要看变量是在哪里声明的。如果是在函数内部，则对整个函数内部有效；如果是在代码块内部（以大括号区分），则只对此代码块有效，出了此范围后就不能使用了。举个例子，如果 for 循环的循环体是这样写的，for(int i = 0; i < num; i++)，此时 i 的作用域只在此 for 循环内的代码块有效，在出了此范围后，就无效（可以自己编译一下试试看）。 3、希望对你有帮助！

user: user-4
content: 为什么要增加2?有没有那个地方要让他增加2

user: user-0
user-0 提问: 局部变量定义问题

回复:
user: user-1
content: 局部变量分为定义在函数内，定义在程序块内，函数的形式参数。

user: user-2
content: 2楼说的很对，不过我开发过程中会避免重名问题，因为这个会增加人为失误的概率

user: user-3
content: 第二个程序两个都是局部变量呢。没有全局变量，只是if外的x作用域比内部的x更大。但是内部的x会屏蔽外部的x. 所有楼主的问题是作用域大小的问题，不是全局变量和局部变量的问题。两个都是局部变量～  注意内部的x会屏蔽外部的x。

user: user-4
content: 作用域不一样，两个x是不同
user-0 提问: 关于LeetCode第一题两数之和的问题

回复:
user: user-1
content: 返回的是指针，指向一个一维数组，则需要指明数组的大小。

user: user-2
content: 引用 2 楼 weixin_45906870 的回复:可是returnSize除了被赋值也没有其他操作了啊， 对，那也只是在==target的时候被赋值了。这样可以通过returnSize来确定是否找到==target的。  对于return res;的返回值不能直接使用，因为res在没有找到==target的时候，里面存的是随机值。

user: user-0
content: 可是returnSize除了被赋值也没有其他操作了啊，

user: user-2
content: 上面已经返回res是因为==target了。如果没有等于target就不返回了吗?可以把后面的return作为异常情况。 另外，returnSize的值也可以作为是否找到了==target的两个判断依据。  为什么这么写要看写的人的思路了。
user-0 提问: 通过结构体的方式查找文件中的一组数据，并且比较出good.xiaoshou值最大的五组数据

回复:
user: user-0
content: 引用 3 楼 自信男孩 的回复:[quote=引用 2 楼 yuan_tian_yu 的回复:]目前这个程序无法实现文件的查找功能和统计功能，想问一下如何修改之后可以实现 文件查找最终还是要将文件内容读取到内存，然后执行查找。  [/quote]哦哦……劳烦您能说的更详细一些吗。我这学期刚刚开始学习c语言，对于文件操作这块掌握的不是很扎实。希望您能够说的更具体一些

user: user-1
content: 引用 2 楼 yuan_tian_yu 的回复:目前这个程序无法实现文件的查找功能和统计功能，想问一下如何修改之后可以实现 文件查找最终还是要将文件内容读取到内存，然后执行查找。

user: user-0
content: 目前这个程序无法实现文件的查找功能和统计功能，想问一下如何修改之后可以实现

user: user-2
content: 问题是什么呢？编译不过去？还是结果错误？

user: user-1
content: 引用 4 楼 yuan_tian_yu 的回复:[quote=引用 3 楼 自信男孩 的回复:][quote=引用 2 楼 yuan_tian_yu 的回复:]目前这个程序无法实现文件的查找功能和统计功能，想问一下如何修改之后可以实现 文件查找最终还是要将文件内容读取到内存，然后执行查找。  [/quote]哦哦……劳烦您能说的更详细一些吗。我这学期刚刚开始学习c语言，对于文件操作这块掌握的不是很扎实。希望您能够说的更具体一些[/quote] 读一个记录比较一下，如此循环读和比较
user-0 提问: 求助，掷骰子游戏

回复:
user: user-1
content: 自己建立一个头文件

user: user-0
content: 引用 1 楼 qq_38674319的回复:你在头文件这里右键转到文档就会发现vs2019中并没有diceroll.h这个头文件 我知道啊，我只想知道怎么办

user: user-1
content: 你在头文件这里右键转到文档就会发现vs2019中并没有diceroll.h这个头文件

user: user-2
content: 引用 2 楼 weixin_49233519 的回复:[quote=引用 1 楼 qq_38674319的回复:]你在头文件这里右键转到文档就会发现vs2019中并没有diceroll.h这个头文件 我知道啊，我只想知道怎么办[/quote] 你肯定没看过C的基础知识的。。
user-0 提问: c语言设计计算器

回复:
user: user-1
content: 你这是要开发新型的计算器嘛？计算器上哪有取余运算。如果你不要百分比非要换成取余那就自己约定呗。输入全部用浮点，然后如果是％号就先把浮点转换成整数再算，不就同时兼并了

user: user-0
content: scanf("%d%c%d",&a,&d,&b); switch(d) { }	 printf("%d%c%d=%.2f\n",a,d,b,c); 我用switch控制运算符，但是这样写的只能运算输入整型的，我改成输入浮点型的又不能运算%。怎么能同时兼并这两个

user: user-2
content: 你输入/ 和%之前已经输入数字了？如何限制？只能根据/和%自动转换float未整形，否则只能在使用前选择整形和浮点按键。

user: user-0
content: 这个我知道，但是如果写float就不能运算%，我想知道怎么又能输入整型又能输入浮点型，例如第一次是4+1，第二次也可以4.5+1。

user: user-3
content: float scanf("%f 或者 double scanf("%lf
user-0 提问: F5问题求助

回复:
user: user-0
content: 引用 1 楼 user-1的回复:有什么问题，内存地址是变化的，每次运行都可能不一样 谢谢大佬，我蠢透了。

user: user-1
content: 有什么问题，内存地址是变化的，每次运行都可能不一样
user-0 提问: 进程已退出，返回值为0

回复:
user: user-1
content: 调试状态执行一下，崩溃的时候就可以发现问题，如果还不行，可以参考如何在调试状态下发现问题 https://edu.51cto.com/course/23263.html

user: user-2
content: ...还把前面盖掉
user-0 提问: CENTOS下   C语言程序  编译时，提示找不到include中的.h文件，请帮忙看一下，如何编译

回复:
user: user-1
content: #include "../include/inc.h"  或者直接添加包含路径

user: user-2
content: 在main.c同级目录下执行 gcc main.c -I../tbjson -I../include -I../eleclib  推荐做好写一个makefile。
user-0 提问: pat有关的东西，救救我

回复:
user: user-1
content: for(i=0;i<n;i++)     {         for(j=1;j<=m;j++)         {             scanf("(%d %[^)]) ",&t,tempc);             if(t!=ques[j].right) {                 ques[j].wrong++;             } else {                 if(strcmp(ques[j].answer,tempc)!=0)                     ques[j].wrong++;                 else                     ren[i]+=ques[j].good;             }         }             if(max<ques[j].wrong)                 max=ques[j].wrong;     } 需要加上大括号，用于区分else和那个if匹配。  另外，scanf是不是应该放在第二层循环外，第一层循环里呢？

user: user-0
content: 有反映了，要乱打个字母才有输出唉，怎么回事

user: user-0
content: 引用 1 楼 自信男孩 的回复:for(i=0;i<n;i++)     {         for(j=1;j<=m;j++)         {             scanf("(%d %[^)]) ",&t,tempc);             if(t!=ques[j].right) {                 ques[j].wrong++;             } else {                 if(strcmp(ques[j].answer,tempc)!=0)                     ques[j].wrong++;                 else                     ren[i]+=ques[j].good;             }         }             if(max<ques[j].wrong)                 max=ques[j].wrong;     } 需要加上大括号，用于区分else和那个if匹配。  另外，scanf是不是应该放在第二层循环外，第一层循环里呢？ if else不是一条语句吗不用加括号吧，scanf是输入一个人的一道题的答案应该是第二层循环， if(max<ques[j].wrong)    max=ques[j].wrong;这个也在第二层循环内吧，不然j>m了；
user-0 提问: 求助，写一个C语言程序

回复:
user: user-1
content: 输入支持多条的话，可以在一个循环里面输入 如果记录条数有限制的话，那就用数组保存就可以了，如果不受限制，可以用链表 查找，排序都比较简单一一点，就是在数组或者链表中查找，排序可以参考 https://blog.csdn.net/zhanghaiyang9999/article/details/107102728 最后将结果保存到文件中，启动的时候读取进来。文件读写可以参考 https://blog.csdn.net/zhanghaiyang9999/article/details/107032563

user: user-2
content: 你是找人代写工具吗？
user-0 提问: C语言问题

回复:
user: user-0
content: 真是谢谢！指针学的蒙了，懂了懂了，谢谢！

user: user-0
content: 引用 2 楼 coo135 的回复:冒泡法排序有误，指针的使用有误，请自行比对，改正后如下：  #include <stdio.h> #include <string.h>  void change(const char **p1, int n);  int main() { 	const char *arry[6] = {"赵XX", "赵XX", "钱XX", "孙XX", "李XX", "周XX"}; 	const char **p1; 	int i;  	printf("排序前的数组: \n");  	for(i=0; i < 6; i++) { 		p1 = &arry[i];  		printf("%s\n", *p1); 	}  	change(arry, i); } void change(const char **p1, int n) { 	const char *temp; 	int i,j;  	for(i=0; i < n; i++) { 		for(j=0; j<n-i-1; j++) 			if(strcmp(*(p1+ j), *(p1 + j + 1))>0) { 				temp = *(p1 + j); 				*(p1 + j) = *(p1 + j + 1); 				*(p1 + j + 1) = temp; 			} 	}  	printf("排序后的数组: \n");  	for(i=0; i < n; i++) { 		printf("%s\n", *(p1 + i)); 	} }   确实我才看出来，谢谢。

user: user-0
content: 引用 1 楼 user-2 的回复:把错误截图。   其他的错误搞清楚了，但就是这个搞不清楚，我想知道它能不能以这种方式赋值，如果是我的语句导致了失败，就当我没说吧。   麻烦您了！

user: user-1
content: 冒泡法排序有误，指针的使用有误，请自行比对，改正后如下：  #include <stdio.h> #include <string.h>  void change(const char **p1, int n);  int main() { 	const char *arry[6] = {"赵XX", "赵XX", "钱XX", "孙XX", "李XX", "周XX"}; 	const char **p1; 	int i;  	printf("排序前的数组: \n");  	for(i=0; i < 6; i++) { 		p1 = &arry[i];  		printf("%s\n", *p1); 	}  	change(arry, i); } void change(const char **p1, int n) { 	const char *temp; 	int i,j;  	for(i=0; i < n; i++) { 		for(j=0; j<n-i-1; j++) 			if(strcmp(*(p1+ j), *(p1 + j + 1))>0) { 				temp = *(p1 + j); 				*(p1 + j) = *(p1 + j + 1); 				*(p1 + j + 1) = temp; 			} 	}  	printf("排序后的数组: \n");  	for(i=0; i < n; i++) { 		printf("%s\n", *(p1 + i)); 	} }

user: user-2
content: 把错误截图。
user-0 提问: 关于结构体

回复:
user: user-1
content: 函数内的结构体声明错误

user: user-2
content: 1.struct 你写成stuct了， 另外，struct student是否在上面有定义。 2. 你定义了一个指针数组 stu，可是你函数体用的是s，s并没有定义。

user: user-3
content: 哈哈，这样的错误大家或多少都出现过

user: user-4
content: 单词拼写错误，编译器已经给指出来，怎么还看不出来呢，英语也需要学好呀

user: user-0
content: 引用 1 楼 棉猴的回复:看一下append()函数的声明，是不是返回值不是void？ 谢谢 已经找到错因啦

user: user-0
content: 引用 2 楼 5250的回复:struct写错了 谢谢 重新写了struct就好了

user: user-5
content: struct写错了

user: user-6
content: 看一下append()函数的声明，是不是返回值不是void？

user: user-7
content: stuct ;mian;inculde
user-0 提问: c语言显示时换行

回复:
user: user-1
content: 根据你的这个表达式，有没有括号没区别。

user: user-2
content: 单个变量没区别，如果是ｉ的式子有区别，可能这样写是把ｉ当式子用的

user: user-3
content: i如果是一个宏可能需要考虑括号，单个变量没有意义，反而 （i % 4）括号比（i）要有意义一些。

user: user-4
content: 没啥区别，括号有无都可以

user: user-5
content: 没区别吧，括号纯属多余

user: user-6
content: 没区别，括号只是优先运算
user-0 提问: 网络编程的时候客户端和服务器怎么知道已经read完该读的内容，需要写了

回复:
user: user-1
content: 加个变量保存状态就是了。while（1）｛if（状态）｛read；！状态｝else｛write；！状态｝｝

user: user-2
content: 引用 楼主 walkany 的回复:网络编程的时候客户端和服务器怎么知道已经read完该读的内容，需要写了？   通常是  read()->write()->read()->write()这样的，怎么知道已经读完了这次，该发送数据了呢？ 通过接收返回状态。ｒｅａｄ读到缓存区没有内容为止，这时候没有了应该有一个状态，判断一下就行了应该
user-0 提问: C语言，学生管理系统求助

回复:
user: user-1
content: 排序可以声明一个临时的student变量，然后冒泡排序时交换结构体

user: user-2
content: 连续输入，用循环就可以了。 排序也很简单，冒泡排序就行了。 冒泡排序可以参考  https://blog.csdn.net/zhanghaiyang9999/article/details/107102728

user: user-0
content: 引用 1 楼 user-2的回复:什么功能无法实现 划线的那几个

user: user-2
content: 什么功能无法实现
user-0 提问: C单链表数据输入，打印

回复:
user: user-1
content: #include<stdio.h> #include<stdlib.h>  typedef struct lnode{     int data;     struct lnode *next; }lnode,*linklist;   int main(void) {     linklist l, last;     l=NULL;     int number;     for(int i=0;i<5;i++)     {         //scanf("input a number:%d",&number);         printf("input a number:");         scanf("%d",&number);         linklist s=(lnode*)malloc(sizeof(lnode));         s->data=number;         s->next=NULL;          if (!l)             l = s;         else             last->next = s;         last = s;         /*         linklist last=l;         if(last)         {             while(last->next)             {                 last=last->next;             }             last->next=s;         }         else l=s;         */     }     linklist p=l;     //while(p->next!=NULL)     while(p) {         printf("%d\n",p->data);         p = p->next;     }      return 0; } 供参考～

user: user-2
content: 把你的输入和输出改了一下

user: user-2
content: #include<stdio.h> #include<stdlib.h> typedef struct lnode{     int data;     struct lnode *next; }lnode , *linklist; int main(void) {     linklist l;     l = NULL;     int number;     for(int i = 0 ; i < 5 ; i ++)     {         printf("input a number:");         scanf("%d",&number);         linklist s = (lnode*)malloc(sizeof(lnode));         s -> data = number;         s -> next = NULL;         linklist last = l;         if(last)         {             while(last -> next) last = last -> next;             last -> next = s;         }         else l = s;     }     linklist p = l;     while(p)     {         printf("%d\n",p -> data);         p = p -> next;     }     return 0; }
user-0 提问: 急求帮忙，KMP模式匹配算法，编译无错误，运行出问题

回复:
user: user-1
content: KMP算法是数据结构的内容，在C语言这里提问，估计没有人愿意回答。

user: user-2
content: 你的next数组的计数错误的 因为你这么写是从0开始计数，但实际上你应该从1开始计数
user-0 提问: 大佬们，能不能帮忙看一下我这个代码接下来该怎么写

回复:
user: user-1
content: while (Bh<1 || Bh>6)         {             printf("请输入正确的功能编号（1-6）：");             scanf("%d", &Bh);         }         switch (Bh)         {         case 1:             cjyl();                        getchar();             break; 这个可以优化，写这种代码多的能合在一起就合在一起，就不用占用别的资源了，这里用while判断不如直接在switc里default，这个就是除了上面ｃｓａｅ之外的其他情况。 if(fp==NULL)     {         printf("打开文件失败,请重试！\n");         fclose(fp);  //关闭文件          exit(0) ;     }      printf("学号\t姓名\t班级\t高数\t外语\t物理\t程序\t思修\t中传\n");      while(!feof(fp))// 这里你是要重试嘛？重试应该是函数退出返回到上一界面，你这里直接把程序退出是没有重试了的，ｉｆ判断了不存在ｒｅｔｕｒｎ回去下面写存在是可以的，但是规范一点应该把存在用ｅｌｓｅ｛括起来 while(!feof(fp))             fscanf(fp,"%s %s %s %d %d %d %d %d %d",stu[i].ID,stu[i].Name,stu[i].banji,stu[i].gs,stu[i].wy,stu[i].wl,stu[i].cx,stu[i].sx,stu[i].zz);             printf("学号：%d\t", stu[i].ID);             printf("姓名：%s\t", stu[i].Name);             printf("班级：%s\t", stu[i].banji);             printf("高数：%d\t", stu[i].gs);             printf("外语：%d\t", stu[i].wy);             printf("物理：%d\t", stu[i].wl);             printf("程序：%d\t", stu[i].cx);             printf("思修：%d\t", stu[i].sx);             printf("中传：%d\t\n", stu[i].zz);             getchar();         读文件这里你是判断存不存在然后去读这一个信息吧？那只要读那一次就可以了，还有你这里都用了getchar，这个在文件操作中用不到吧，按照格式写再按照格式读就好了，除非你写的时候写完了又写了一个符号进去。写的时候看你一个个传还要制表，有这个必要嘛？如果文件不会单独打开的话尽量直接传结构体，一个结构体传进去，一个结构体读出来，这样不会出错，读和写是要求保持一致的 你的删除本来想讲的，但是看到你的ｎｕｍ觉得也行，但是往上翻了一下，你的添加成绩ｎｕｍ没有做改变啊。细节一定要注意，不然你这个怎么运行都不行那岂不是难受？

user: user-0
content: 谢谢大家的回答

user: user-2
content: 先按照自己的想法写写，不明白的再问吧

user: user-3
content: 有什么问题吗？是编译不通过吗？
user-0 提问: 求助

回复:
user: user-1
content: 把fscanf中的\n去掉

user: user-0
content: 引用 2 楼 user-2的回复:p=(struct room *)malloc(sizeof(struct room));     head=(struct room *)malloc(sizeof(struct room));  while(!feof(fp))     {         count++;         p=(struct room *)malloc(sizeof(struct room));  p两次分配内存是不是多余了 这个无伤大雅，我复制时出了问题，改完后 一样的问题 只能读一行，同时菜单6功能结束后随便再调用其他函数功能，程序直接非正常结束了

user: user-2
content: p=(struct room *)malloc(sizeof(struct room));     head=(struct room *)malloc(sizeof(struct room));  while(!feof(fp))     {         count++;         p=(struct room *)malloc(sizeof(struct room));  p两次分配内存是不是多余了

user: user-1
content: 读写文件参考一下这个 https://blog.csdn.net/zhanghaiyang9999/article/details/107032563
user-0 提问: 急求一个可视化随机数生成程序

回复:
user: user-1
content: 这个之前用cocos2dx-lua做过。要做出很好的效果是不容的。需要作三段帧动画，一个是启滚的动画，然后是快速滚动的动画，最后是慢滚定位数字的动画。三段动画要无缝切换，而且定位到具体数字的算法还要动点脑筋

user: user-2
content: 楼主是把自己当哪位大人了

user: user-3
content: up视频抽奖吧
user-0 提问: while循环里面包含switch语句，陷入死循环

回复:
user: user-0
content: 引用 2 楼 user-1的回复:且 n 的值最好在每次都赋值一个默认值(default) , 这样,同样的记录也不会再增加一次. 我解决了，因为性别那我定义的是char，但是输的是汉字，所以出错，改完就没问题了。可以不用加那个函数。

user: user-1
content: 且 n 的值最好在每次都赋值一个默认值(default) , 这样,同样的记录也不会再增加一次.

user: user-1
content: 输入语句后增加一句:  	fflush(stdin); 清空缓冲区!~~
user-0 提问: 帮我看看这个时间复杂度和空间复杂度，我不是很会看....

回复:
user: user-1
content: 引用 4 楼 自信男孩 的回复:[quote=引用 3 楼 5250 的回复:][quote=引用 2 楼 自信男孩 的回复:][quote=引用 1 楼 5250 的回复:]时间复杂度是O(n*m) 空间复杂度O(n) 那么输入不算了吗？输入也是一个循环呢。 所以O（n*m + n)呢。 （m+1) * n[/quote]  当m和n变得更大时候（m+1) * n 趋向于m*n  1可以忽略不计。你可以去看看复杂度的定义[/quote] 对，当m和n趋于无穷大的时候1可以忽略不计，但是你看到的1是乘于n的，你也说了n也变得很大呀，那么这个很大乘于1就变成很小了？[/quote]  当趋向变大的时候  n和n*m不在一个数量级了

user: user-2
content: 引用 3 楼 5250 的回复:[quote=引用 2 楼 自信男孩 的回复:][quote=引用 1 楼 5250 的回复:]时间复杂度是O(n*m) 空间复杂度O(n) 那么输入不算了吗？输入也是一个循环呢。 所以O（n*m + n)呢。 （m+1) * n[/quote]  当m和n变得更大时候（m+1) * n 趋向于m*n  1可以忽略不计。你可以去看看复杂度的定义[/quote] 对，当m和n趋于无穷大的时候1可以忽略不计，但是你看到的1是乘于n的，你也说了n也变得很大呀，那么这个很大乘于1就变成很小了？

user: user-1
content: 引用 2 楼 自信男孩 的回复:[quote=引用 1 楼 5250 的回复:]时间复杂度是O(n*m) 空间复杂度O(n) 那么输入不算了吗？输入也是一个循环呢。 所以O（n*m + n)呢。 （m+1) * n[/quote]  当m和n变得更大时候（m+1) * n 趋向于m*n  1可以忽略不计。你可以去看看复杂度的定义

user: user-2
content: 引用 1 楼 5250 的回复:时间复杂度是O(n*m) 空间复杂度O(n) 那么输入不算了吗？输入也是一个循环呢。 所以O（n*m + n)呢。 （m+1) * n

user: user-1
content: 时间复杂度是O(n*m) 空间复杂度O(n)

user: user-2
content: 引用 5 楼 5250 的回复:[quote=引用 4 楼 自信男孩 的回复:][quote=引用 3 楼 5250 的回复:][quote=引用 2 楼 自信男孩 的回复:][quote=引用 1 楼 5250 的回复:]时间复杂度是O(n*m) 空间复杂度O(n) 那么输入不算了吗？输入也是一个循环呢。 所以O（n*m + n)呢。 （m+1) * n[/quote]  当m和n变得更大时候（m+1) * n 趋向于m*n  1可以忽略不计。你可以去看看复杂度的定义[/quote] 对，当m和n趋于无穷大的时候1可以忽略不计，但是你看到的1是乘于n的，你也说了n也变得很大呀，那么这个很大乘于1就变成很小了？[/quote]  当趋向变大的时候  n和n*m不在一个数量级了[/quote] 恩，有道理  在各种不同算法中，若算法中语句执行次数为一个常数，则时间复杂度为O(1),另外，在时间频度不相同时，时间复杂度有可能相同，如T(n)=n2+3n+4与T(n)=4n2+2n+1它们的频度不同，但时间复杂度相同，都为O(n2)。
user-0 提问: C语言scanf函数相关，求大佬指教

回复:
user: user-1
content: 据我所知，你的scanf应该放在while程序的外面呀

user: user-2
content: 所以这不是一个输入嘛？没输完为什么要回车？

user: user-3
content: 仅供参考：#include <stdio.h> char s[]="123 ab 4"; char *p; int v,n,k; void main() {     p=s;     while (1) {         k=sscanf(p,"%d%n",&v,&n);         printf("k,v,n=%d,%d,%d\n",k,v,n);         if (1==k) {             p+=n;         } else if (0==k) {             printf("skip char[%c]\n",p[0]);             p++;         } else {//EOF==k             break;         }     }     printf("End.\n"); } //k,v,n=1,123,3 //k,v,n=0,123,3 //skip char[ ] //k,v,n=0,123,3 //skip char[a] //k,v,n=0,123,3 //skip char[b] //k,v,n=1,4,2 //k,v,n=-1,4,2 //End.

user: user-4
content: while ((res1 != b || res2 != aa[a]) && res1 != 999) 这条语句前面的语句呢？ 没有前面的语句怎么知道这个res1和res2是什么呀？初始值是多少？还有aa[a]是多少？怎么知道？

user: user-5
content: res1和res2的初值是多少
user-0 提问: 为什么C语言网络编程接收read()函数读取的数据不全？

回复:
user: user-0
content: 小弟来反馈了，目前问题已经解决。 在接收数据的时候，的确应该判定read()的返回值。但是上面的代码给定的HEADLEN和bufferlen足以存储接收的数据字段，并不影响数据的接收。 出问题的原因是因为strcat()的问题，其次查看数据使用printf()也会造成数据的缺失。 根本原因就是字符串数组中的"\0"元素，首先是printf()无法打印所有char 数组中的元素，遇到\0就自动停止打印。 其次是"\0"的存在，导致了strcat()函数的 不可靠。  char *strcat(char *dest, const char *src); 1. src所指字符串会添加到dest结尾处，会覆盖dest结尾处的'\0'。 2. strcat 执行后会自动在dest后面添加'\0'。  如果dest和src中都存在"\0"字符，且不是最后一个字符，那么： src不会添加到dest的末尾，而是添加到dest的\0后，同时src添加的字符串仅到\0停止。 例：dest   "1"   "2"  "\0"  "3"   "\0"        src     "4"    "\0"    "5"    "\0" strcat(dest,src) 后，  dest为：   "1"  "2"   "4"   "\0"      为了应对这一问题，改使用memcpy()函数，以解决问题。

user: user-1
content: read和write都一样，要判断返回值，如果没有发送或者接收完所需字节数，要循环read或write

user: user-2
content: 请仔细阅读recv函数官方说明

user: user-0
content: 转发部分代码：      char buffer[BUFSIZ];          fd_set SocketSet;     FD_ZERO(&FdSet);  //初始化        FD_SET( ClientSocket, &SocketSet);     FD_SET( ServerSocket, &SocketSet);      if (ClientSocket > OracleSocket)         maxfd = ClientSocket;     else maxfd = OracleSocket;      while (1)     {         int ret = select(maxfd + 1, &SocketSet, NULL, NULL, NULL);         if (ret < 0)             break;         if (FD_ISSET(ServerSocket, &SocketSet)) {             GetBuffer(ServerSocket,buffer);             SendBuffer(ClientSocket, buffer);             memset(buffer, 0 , sizeof(buffer));         }         if (FD_ISSET(ClientSocket, &SocketSet)) {             GetBuffer(ClientSocket,buffer);             SendBuffer(OracleSocket, buffer);             memset(buffer, 0 , sizeof(buffer));         }         FD_ZERO(&SocketSet);         FD_SET(ClientSocket, &SocketSet);         FD_SET(ServerSocket, &SocketSet);     }    然后获取socket read()读取数据包的代码是：  int GetBuffer(int socket, char Out[]) {     int ReadCount;     char header[HEADLEN];  // 数据包包头 占 8 byte      read(socket, header, HEADLEN);     int bufferLen;  //数据包包长度（包头前两位）      if (strlen( header) >= 2)         bufferLen =( header[0] )* 256 + (header[1]) - HEADLEN; //16进制 -->10 进制转换     else         bufferLen = 0;      if ( bufferLen > 0 )     {         char buff[bufferLen];         read(socket, buff, bufferLen);         strcat(header, buff);     }     strcat(Out,header);      return 1; }    大佬们抽空指正指正 谢谢

user: user-1
content: 没有代码，没有真相

user: user-1
content: 别print，因为收到的都是二进制数据 你在内存里面看一下具体的值，还有返回的长度

user: user-0
content: 这个是Debug中收到的数据。
user-0 提问: 麻烦各位前辈帮我瞅瞅这是啥问题呀，这个老编译器我不会用

回复:
user: user-1
content: 贴源码吧，图片不清晰也不够完整～

user: user-2
content: 为啥你这个分号，像是中文的...    ；;；;

user: user-3
content: 说->和.的左边有毛病，所以得看左边是怎么创建的，你贴的这代码不够说明问题

user: user-4
content: 不知道可不可行(代码给全点) 1. 改后缀名为.c 2. 这里是不是少了free

user: user-5
content: 贴代码吧，就这几张图片还不全

user: user-6
content: p1在哪里定义的 源代码文件后缀是.c还是.cpp
user-0 提问: C语言VC下的文件

回复:
user: user-1
content: fp=fopen("D:\\cj.txt","w"); 要用二进制读，这里得用二进制写 fp=fopen("D:\\cj.txt","wb");

user: user-0
content: 引用 1 楼 user-3 的回复:这个不是乱码，你是按照二进制方式写的文件，如果按照文本文件方式读写文件，可以参考  https://blog.csdn.net/zhanghaiyang9999/article/details/107032563 具体怎么改可以稍微写一下吗，不是特别懂，谢谢

user: user-0
content: 引用 1 楼 user-3 的回复:这个不是乱码，你是按照二进制方式写的文件，如果按照文本文件方式读写文件，可以参考  https://blog.csdn.net/zhanghaiyang9999/article/details/107032563 具体要怎么改呢，不是特别懂

user: user-2
content: 如果不想“乱码”，建议用fscanf/fprintf读写文件。  注释掉的部分s未定义，n输入若为0，那这个是有问题的。

user: user-3
content: 这个不是乱码，你是按照二进制方式写的文件，如果按照文本文件方式读写文件，可以参考  https://blog.csdn.net/zhanghaiyang9999/article/details/107032563
user-0 提问: fork( )创建两个子进程，父进程显示字符A，子进程分别显示字符 B和字符C。为什么A和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: 引用 2 楼 风继续吹Z 的回复:解决了 问题原因：虚拟机是单核 增加核数量之后就正常了如何增加核数量

user: user-2
content: 怎么增加核数量

user: user-0
content: 解决了 问题原因：虚拟机是单核 增加核数量之后就正常了

user: user-3
content: 因为A和C不是一起输出，他们两个输出在不同的进程里，相互是独立的。 A， B， C先输出那个也是随机的～
user-0 提问: 救命!!!

回复:
user: user-1
content: https://blog.csdn.net/zhanghaiyang9999/article/details/107032563  详细介绍了怎么读文件，希望对你有帮助

user: user-0
content: 引用 2 楼 自信男孩的回复:    for (i = 0; i < Diaoyon; i++)         printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort[30], std[i].book[20], std[i].writer[20], std[i].press[30], std[i].number, std[i].price);          这样的问题在另一个帖子里已经给你修复了，这个帖子你还是这样发出来，这没法救～  命是自己的，救与不救还是靠自己。 辜负您了!我确实瞎(Ｔ▽Ｔ)

user: user-2
content: for (i = 0; i < Diaoyon; i++)         printf("%d %s %s %s %s %d %0.2f", std[i].opus, std[i].sort[30], std[i].book[20], std[i].writer[20], std[i].press[30], std[i].number, std[i].price);          这样的问题在另一个帖子里已经给你修复了，这个帖子你还是这样发出来，这没法救～  命是自己的，救与不救还是靠自己。
user-0 提问: scanf输入字符，打印出来的却是空格

回复:
user: user-1
content: #include "game.h" #include "menu.h"  int startgame() {     int i=0,j;     int link[15][15];     char c,ch;     int a,b,e;     printf("  A B C D E F G H I J K L M N O \n");     for (i=0;i<15;i++)     {         printf("%2d",i);         for (j=0;j<15;j++)         {             link[i][j]=0;             printf("十");         }         printf("\n");     }     while(i<300)     {         if(i%2==0)         {             printf("black:\n");             printf("please enter column:");             scanf("%c",&ch);             printf("please enter line:");             scanf("%d",&a);             getchar();    //for '\n'         }         else         {             printf("white:\n");             printf("please enter column:");             scanf("%c",&ch);             //getchar();             printf("column %c",ch);              printf("\nplease enter line:");             scanf("%d",&a);             getchar();    //for '\n'             printf("%d",a);         }         printf("%c %d\n",ch,a);         while(ch<'A'||ch>'O'||a>15||a<0)         {             printf("enter error! please reenter!");             //scanf("%c%d",ch,&a);             scanf("%c%d", &ch,&a);   //少个&             getchar();    //for '\n'         }          if(ch>='A'&&ch<='I')         {             c=ch-17;             b=atoi(c);         }         else         {             c=ch-25;             b=atoi(c)+10;         }          if(i%2==0)             link[b][a]=1;         else             link[b][a]=2;         system("CLS");         drawlink(link);         e=gameover(link);         if(e==1||e==2)             break;         i++;     }     printf("start game\n");     return e; } 供参考～  试一下这个版本～

user: user-0
content: #include "game.h" #include "menu.h"  int startgame() { 	int i=0,j; 	int link[15][15]; 	char c,ch; 	int a,b,e; 	printf("  A B C D E F G H I J K L M N O \n"); 	for (i=0;i<15;i++) 	{ 		printf("%2d",i); 		for (j=0;j<15;j++) 		{ 		    link[i][j]=0; 		    printf("十"); 	    } 	    printf("\n"); 	} 	while(i<300) 	{ 		if(i%2==0) 		{ 			printf("black:\n"); 			printf("please enter column:"); 			scanf("%c",&ch); 			printf("please enter line:"); 			scanf("%d",&a); 		} 		else 		{ 			printf("white:\n"); 			printf("please enter column:"); 			scanf("%c",&ch); 			getchar();             printf("column %c",ch); 			 			printf("\nplease enter line:"); 			scanf("%d",&a); 			printf("%d",a); 		} 		printf("%c %d\n",ch,a); 		while(ch<'A'||ch>'O'||a>15||a<0) 	    { 		    printf("enter error! please reenter!"); 		    scanf("%c%d",ch,&a); 	    } 	     	    if(ch>='A'&&ch<='I')      	{ 		    c=ch-17; 		    b=atoi(c);      	} 	    else  	    { 		    c=ch-25; 		    b=atoi(c)+10; 	    } 	     	    if(i%2==0) 		link[b][a]=1; 		else 		link[b][a]=2; 		system("CLS"); 		drawlink(link); 		e=gameover(link); 		if(e==1||e==2) 		break; 		i++; 	} 	printf("start game\n"); 	return e; } 就是31到41行这点

user: user-1
content: 建议楼主把所有代码贴出来吧。对于scanf的%c输入，需要看上下文的。

user: user-2
content: 因为%c只接收一个字符，A前面有个空格，所以ch接收到的是空格
user-0 提问: 求问前辈

回复:
user: user-0
content: 引用 2 楼 bug10086 的回复:只能找个文件存储上次使用产生的数据，再取读使用 嗯嗯，谢谢

user: user-0
content: 引用 1 楼 user-2 的回复:关闭程序前保存到文件，打开程序先读取文件，如果文件为空然后再输入 好的，感谢

user: user-1
content: 只能找个文件存储上次使用产生的数据，再取读使用

user: user-2
content: 关闭程序前保存到文件，打开程序先读取文件，如果文件为空然后再输入
user-0 提问: 明天考试，望大神解答一下。

回复:
user: user-1
content: 引用 4 楼 北斗斗姗 的回复:还有就是删除函数里面的 q=p; p=q->next;  不太能理解。 这个说起来不容易说清楚，自己画个图就能明白了

user: user-2
content: 引用 4 楼 北斗斗姗 的回复:还有就是删除函数里面的 q=p; p=q->next;  不太能理解。 你这是删除的else就是当当前节点不是你要删除的数据时，借用个ｑ等于ｐ节点，然后ｐ再指向ｑ的下一个节点，这里两个的作用是等同于p=p->next，但是这样是有问题的，就借用ｑ来转一下

user: user-0
content: 还有就是删除函数里面的 q=p; p=q->next;  不太能理解。

user: user-0
content: 好的，有点理解了。很感谢。

user: user-1
content: p->next=NULL; q->next=p; q=p;   这几句的意思是把新的结点p接到链表q的尾部，因为单链表的尾必须指向空，所以新加入的结点的next必须指向NULL。

user: user-3
content: 这三行就是添加到链表里面
user-0 提问: 前置后置表达式的输出结果

回复:
user: user-1
content: 引用 楼主 檀车 侠影的回复: #include<stdio.h> int main() {     int i=0;     printf("%d %d %d %d",i,i++,i,++i);     // 2 1 2 2     printf("%d %d %d %d",i,i++,i,++i);     // 2 2 2 0     return 0; }  能帮忙解释一下 这个前置后置输出结果为什么会这样吗？  下面的注释是输出结果 而且这里还有警告  warming: operation on 'i' may be undefined [-W sequence-point] 你是遇到假的编译器了吗？第二次的printf输出那样?

user: user-2
content: 不要在一行代码对同一个变量‘写操作’数次。  不符合规范不说。 另外也很重要的一点也不方便阅读。 而且最最重要的一点是。程序员不能预测答案。【换个意思就是，如果卷子上写这样的题，那么这道题是没有正确答案的】
user-0 提问: 找出最小值 

回复:
user: user-1
content: #include <stdio.h> int main() {     int n, i, k, min;     scanf("%d", &n);     for(i = 0; i < n; i++)     {         scanf("%d", &k);         if (i == 0) {             min = k;             continue;         }         if( k < min )             min = k;     }     printf("min = %d", min);      return 0; } 供参考～  漏洞就是min没有初始化呀～

user: user-2
content: 给min赋值一下，当i==0的时候，min赋值为k
user-0 提问: 将电脑时间写入字符型或整形。

回复:
user: user-1
content: time_t t; 	time(&t); 	struct tm tm = *localtime(&t); 	char* strtm = asctime(&tm);

user: user-2
content: 可以把需求尝试着说更清楚和明白些～
user-0 提问: C语言

回复:
user: user-1
content: 2.printf("%d%d\n",e1=0,e2=0); 赋值放打印中不合适。 建议把C语言基础打牢一点再看这些。

user: user-1
content: 1.scanf("%d %d %d %d%d\n",&a1,&a2,&a3,&s1) 参数和可变数量不匹配

user: user-2
content: #include<stdio.h>  //void main() int main() {     int a1,a2,a3,s1,s,x;     int e1,e2;     //scanf("%d %d %d %d%d\n",&a1,&a2,&a3,&s1);     //scanf("%d %d\n",&s,&x);     //remove \n     scanf("%d %d %d %d",&a1,&a2,&a3,&s1);     scanf("%d %d",&s,&x);     if(s>s1)         printf("%d%d\n",e1=0,e2=0);     else if(x>-a1&&x<a1)         e1=0,e2=0;     else if(x<a1)         e1=0,e2=0;     else if(x==a1)         e1=0,e2=1;     else if(x<=a2)         e1=1,e2=0;     else if(x>0&&x>a2)         e1=0,e2=0;     else if(x<a3)         e1=0,e2=0;     else if(x>a3)         e1=1,e2=0;     printf("%d%d\n",e1,e2); }  供参考～  去掉'\n'即可～
user-0 提问: 请大神们看看，这段代码运行时为何会出现hard fault？

回复:
user: user-1
content: 可能是因为涉及到浮点运算，然后你的32板子跑不过来。

user: user-0
content: 引用 5 楼 自信男孩 的回复:#include <stdio.h>  typedef struct {     float a;     float b;     float c; } test_t;  int fun_test(void *pdata) {     test_t *temp = (test_t *)pdata;     printf("a = %f, b = %f, c = %f\n", temp->a, temp->b, temp->c);     if(!((temp->a < temp->b) && (temp->b < temp->c))) {         return -1;     }     return 0; }  int main(void) {     unsigned char buf[20] = { 0 };     if(fun_test(buf + 2) < 0) {         printf("Failed.\n");     }     return 0; } 代码没什么问题，输出failed。 其实要看楼主的编译器是32位还是64位，如果是64位，那么 test_t *temp = (test_t *)pdata; 这句是越界了。因为8  x 3 = 24 > 18  谢谢！ 编译器是32位的

user: user-0
content: 引用 4 楼 zgl7903 的回复:猜测： 这个大概率是越界问题，看 sizeof(test_t) 是多少 如果按 结构体字节对齐是8，至少24字节 谢谢！ 是32位的，现在看不是越界的问题，因为单个成员访问的时候没有出现问题

user: user-2
content: Buf 也是 char 型的.

user: user-2
content: 调试了一下,    if(!((temp->a < temp->b) && (temp->b < temp->c))) {         return -1;  buf[2], buf[3],buf[4],  =0 a,b,c, 全为 0,   当然返回 -1 .

user: user-3
content: #include <stdio.h>  typedef struct {     float a;     float b;     float c; } test_t;  int fun_test(void *pdata) {     test_t *temp = (test_t *)pdata;     printf("a = %f, b = %f, c = %f\n", temp->a, temp->b, temp->c);     if(!((temp->a < temp->b) && (temp->b < temp->c))) {         return -1;     }     return 0; }  int main(void) {     unsigned char buf[20] = { 0 };     if(fun_test(buf + 2) < 0) {         printf("Failed.\n");     }     return 0; } 代码没什么问题，输出failed。 其实要看楼主的编译器是32位还是64位，如果是64位，那么 test_t *temp = (test_t *)pdata; 这句是越界了。因为8  x 3 = 24 > 18

user: user-4
content: 猜测： 这个大概率是越界问题，看 sizeof(test_t) 是多少 如果按 结构体字节对齐是8，至少24字节

user: user-0
content: 引用 2 楼 user-5 的回复:复制你的代码运行只出现 Failed.  我使用keil编译，运行在cortex m3上，如果我在fun_test（）函数里面定义变量，将buf里的内容拷贝过来，也不会出现故障，比如这样： int func(void *pdata) {     float temp1 = ((test_t *)pdata)->a;     float temp2 = ((test_t *)pdata)->b;     float temp3 = ((test_t *)pdata)->c;      if(!((temp1 < temp2) && (temp2 < temp3))) {         return -1;         }      return 0; }

user: user-5
content: 复制你的代码运行只出现 Failed.

user: user-0
content: 出现故障语句为if(!((temp->a < temp->b) && (temp->b < temp->c)))，如果单独使用if(temp->a < 0)则不会出现问题。
user-0 提问: 大佬再看看我

回复:
user: user-1
content: 运行不了，或者出错，就设置断点，调试一下，看看哪里出问题

user: user-0
content: 改了，但是运行不了

user: user-1
content: student大小写注意一下，有的地方大写了

user: user-0
content: 的左侧部分指定未定义的结构/联合“Student”，谢谢大佬

user: user-1
content: 你得先说你的问题是什么

user: user-0
content: 大佬看看我呀
user-0 提问: 先对程序进行编译，修改语法错误。再用设置断点的方法，查找并修改程序中的语义错误，使其完成计算。

回复:
user: user-0
content: 发错题目了

user: user-1
content: 楼上说的对哦，fac里得 int f=1; main里得 int add=0;初始化一下，不然f,add就是个随机数

user: user-2
content: 两个函数里的f,add没有初始化，所以你得到的数值不对吧

user: user-3
content: 是送分吗？还是？
user-0 提问: 如何用C语言编写一个函数，输入这张有向网，并用邻接矩阵来存储？

回复:
user: user-1
content: 用1,2，3...代表节点a，b，c... 定义一个二维数组d[N][N]，有边的d[i][j]就输入边的权值，没有边的就赋值-1或者0x7f

user: user-2
content: 你先定义一个结构体，结构体包含字段比如距离，节点方向等，再定义一个结构体数组
user-0 提问: 求大佬们看看这10个判断题，最近复习c语言，有好多不太明白的地方

回复:
user: user-1
content: 建议把问题用文字描述清楚～

user: user-2
content: 这一黑板的板书内容都不明白吗

user: user-3
content: 不明白的地方，上机体验一下

user: user-3
content: 哪里不明白？
user-0 提问: 文件的上传与下载

回复:
user: user-0
content: 谢谢大佬意见

user: user-1
content: 不要socket?你想干什么,绕防火墙?(不是驱动是不可能的),绕过socket就必须直接与驱动通信(WIndows系统建议WinPcap驱动,使用挺简单的) 至于多线程下载(是个含糊的观点,多连接下载不一定要多线程,参考IDM),具体可参考https://github.com/aria2/aria2 上传还是先学好多线程下载再说吧

user: user-0
content: 模拟迅雷完成文件的上传与下载  使用多线程进行文件的上传与下载

user: user-2
content: 这么限制，那怎么弄？不用socket，那么间接可以使用吗？ 你是要做什么？wget、ftp，tftp可以试一下～
user-0 提问: 求有代码的线下实体店收银系统

回复:
user: user-1
content: 需要涉及到扫码，前段界面，后端数据库等等，这不是一个小工程～

user: user-0
content: 功能都是大众的，只要有现成的模板，有端口开放程序，有app后台管理，就有用
user-0 提问: 大佬看看我

回复:
user: user-1
content: 引用 楼主 weixin_49032502的回复:请编写一个函数int fun(char *ss,char *s)，该函数的功能是：求出ss字符串中指定字符串s的个数，并返回此值。  例如，若输入ss="1311231232"，s="12"，则输出2。  #include<stdio.h>  #define  M 81  int fun(char*ss, char *s)  {      }  void main()  { char  a[M], s[M];    printf("\nPlease enter a string:");  gets(a);    printf("\nPlease enter a substring:");  gets(s);    printf("\nThe count  is: %d\n", fun(a, s));  }  要求：1）上述程序文件名E4-6.C的文件，存放在E盘根目录下；  2）请勿改动主函数main的任何内容，仅在函数fun的括号中填入你编写的若干语句。 谢谢大佬们，我只会当个字符的计算 多个字符的，只是多一个循环

user: user-1
content: 她这个函数肯定是希望不要用到已有的字符串函数的

user: user-2
content: int fun(char*ss, char *s) {     int num, len, sublen;     char *p, *q;      len = strlen(ss);     sublen = strlen(s);      p = ss;     num = 0;     while (p < ss+len) {         q = strstr(p, s);         if (q)             num++;         else             break;         p = q+sublen;     }      return num; }  供参考～  没测试，建议楼主自己测试一下～有问题可以先自己调试一下～
user-0 提问: 有偿求程序  C语言模拟时钟

回复:
user: user-1
content: [小插曲]VC学习——基于MFC的模拟时钟程序

user: user-2
content: VC6可以用另外的绘图方式，那个TC的

user: user-0
content: 我也不太懂，可以参考这个程序   https://codebus.cn/bestans/a/clock-simulation

user: user-2
content: vc6应该是没有这个头文件的吧
user-0 提问: 求个大佬帮忙！！！急

回复:
user: user-0
content: 引用 1 楼 user-1 的回复：完整的程序主要得自己写，有问题可以帮着看看可以留个微信吗！！！

user: user-1
content: 完整的程序主要得自己写，有问题可以帮着看看
user-0 提问: 求助  大佬们帮忙看下这是什么情况

回复:
user: user-1
content: 楼主的文件内容是通过fwrite写入的吗？如果不是，或者是手动写入的，建议用fscanf/fprintf而不要用fread。

user: user-2
content: 你看一下文件内容

user: user-0
content: /*显示地名信息*/ #include <stdlib.h>  #include <conio.h> #include <stdio.h>  #include"place_data.h" /*  * 函数名称：sort  * 函数功能：显示地名相关信息   * 形式参数：无  * 返 回 值：无   */ void sort() { 	system("cls");  	FILE *fpIn,*fpcnt; 	int i; 	fpIn=fopen("Place_date.dat","rb"); 	fpcnt=fopen("number.dat","rb"); 	struct place m[101]; 	fread(m,sizeof(struct place),100,fpIn); 	fread(&total,sizeof(int),1,fpcnt); 	fseek(fpIn,0,SEEK_SET); 	printf("\t\t1代表省、直辖市\n\t\t2代表地级市\n\t\t3代表县、旗、特区\n\t\t4代表街道、镇、乡\n\t\t----------------\n"); 	for(i=0;i<total;i++){ 	printf("\n\t\t行政划分等级为:%d\n",m[i].grade); 	printf("\t\t地区名为:%s\n",m[i].adr); 	printf("\t\t邮编号为:%d\n",m[i].pcode); 	printf("\n\t\t----------------\n"); 	} 	if(getch()){ 		system("cls"); 	} 	 fclose(fpIn); 	 fclose(fpcnt); 	 }   到底是add 有问题还是 sort 有问题

user: user-0
content: /*增加地名信息*/  #include <stdlib.h>  #include <conio.h> #include <stdio.h>  #include"place_data.h" #include <string.h> /*  * 函数名称：del  * 函数功能：增加地名相关信息   * 形式参数：无  * 返 回 值：无   */ void add(){  	struct place m[100];  	system("cls");  	FILE *fpIn,*fpOut,*fpcnt;  	fpcnt=fopen("number.dat","wb+");//打开记录信息数文件  	fpOut=fopen("Place_date.out","ab") ;//打开临时文件  	fpIn=fopen("Place_date.dat","rb");//打开储存文件   	fread(&total,sizeof(int),1,fpcnt); 	fread(m,sizeof(struct place),100,fpIn);  	if(fpOut!=NULL){ 		printf("\t\t1代表省、直辖市\n\t\t2代表地级市\n\t\t3代表县、旗、特区\n\t\t4代表街道、镇、乡");  		printf("\n\t\t请输入行政划分等级:"); 		fflush(stdin); 		scanf("%1d",&m[total].grade);  		printf("\t\t请输入地区名:");   		fflush(stdin);  		scanf("%s",m[total].adr);  		printf("\t\t请输入邮政编号:");  		fflush(stdin);  		scanf("%6d",&m[total].pcode);  		system("cls"); 		fwrite(&m[total],sizeof(struct place),1,fpOut); 		fflush(stdin); 		total++; 		fwrite(&total,sizeof(int),1,fpcnt); 	 }else { 	 printf("无法打开文件\n");} 	 fclose(fpOut); 	 fclose(fpIn); 	 fclose(fpcnt); 	 remove("Place_date.dat");/*删除原数据文件*/ 	 rename("Place_date.out","Place_date.dat");/*将临时文件更名为数据文件*/  }
user-0 提问: 麻烦注释一下这一段代码，中间的if循环和while循环不太懂~

回复:
user: user-1
content: 这应该是插入排序，while循环是在找要插入的位置。 per[j+1]=per[j];这个操作就是在腾空间，找到要插入的位置。

user: user-2
content: while就是在冒泡  t = per[i];//记录下当前要冒泡的元素  per[j+1]=per[j];//要冒泡的元素满足while的条件（比前一个元素小）时把该元素往前放   j--;//往前循环比较  while((strcmp(t.cName,per[j].cName) < 0 && j >= 0));//将要冒泡的元素和前面的元素比较
user-0 提问: 麻烦大佬解释一下这段代码如何运行的~

回复:
user: user-1
content: 可以想象一下扑克牌，拿到一张牌，然后寻找插入的位置，找到后插入～

user: user-2
content: 类似于一个插入排序。

user: user-3
content: 声明一个结构体变量 t，然后比较cName，交换。
user-0 提问: 有偿求程序 设计程序显示汉字 科海无边 然后通过上下箭头键实现缩放功能

回复:
user: user-1
content: gdi绘图，等比缩放

user: user-2
content: 本来显示16x16的点阵，缩放时可以显示24x24，32x32的点阵，字库都带上。

user: user-2
content: DOS年代科海的书很出名。点阵字体不好缩放。

user: user-2
content: DOS年代科海的书很出名。

user: user-3
content: 在哪里实现？MFC？
user-0 提问: c语言链表

回复:
user: user-0
content: 引用 3 楼 user-2的回复:你期待中创建的链表要写入什么数据？ LinkList* InsertLinkListhead(LinkList* head) { LinkList *newhead; newhead= (LinkList*)malloc(sizeof(LinkList)); printf("请输入你要插入的链表节点的数：\n"); scanf("%d", &(newhead->data)); if (head == NULL) { head = newhead; return head; } else { newhead->next = head; head = newhead;  } return head;  你的链表只在头节点里写入了一个节点个数的正数，然后就没了  void PrintLinkList(LinkList* head) { while (head != NULL) { printf("%d ", head->data);  head = head->next; } puts(""); }  在输出节点时，因为你创建的newhead节点并没有设置newhead->next = NULL.所以你的程序可能就无限循环了。 OK大概懂了谢谢哈

user: user-0
content: 引用 3 楼 user-2的回复:你期待中创建的链表要写入什么数据？ LinkList* InsertLinkListhead(LinkList* head) { LinkList *newhead; newhead= (LinkList*)malloc(sizeof(LinkList)); printf("请输入你要插入的链表节点的数：\n"); scanf("%d", &(newhead->data)); if (head == NULL) { head = newhead; return head; } else { newhead->next = head; head = newhead;  } return head;  你的链表只在头节点里写入了一个节点个数的正数，然后就没了  void PrintLinkList(LinkList* head) { while (head != NULL) { printf("%d ", head->data);  head = head->next; } puts(""); }  在输出节点时，因为你创建的newhead节点并没有设置newhead->next = NULL.所以你的程序可能就无限循环了。 OK大概懂了谢谢哈

user: user-0
content: 引用 3 楼 user-2的回复:你期待中创建的链表要写入什么数据？ LinkList* InsertLinkListhead(LinkList* head) { LinkList *newhead; newhead= (LinkList*)malloc(sizeof(LinkList)); printf("请输入你要插入的链表节点的数：\n"); scanf("%d", &(newhead->data)); if (head == NULL) { head = newhead; return head; } else { newhead->next = head; head = newhead;  } return head;  你的链表只在头节点里写入了一个节点个数的正数，然后就没了  void PrintLinkList(LinkList* head) { while (head != NULL) { printf("%d ", head->data);  head = head->next; } puts(""); }  在输出节点时，因为你创建的newhead节点并没有设置newhead->next = NULL.所以你的程序可能就无限循环了。 OK大概懂了谢谢哈

user: user-1
content: 你在那里加个断点，调试一下就知道了

user: user-2
content: 你期待中创建的链表要写入什么数据？ LinkList* InsertLinkListhead(LinkList* head) { LinkList *newhead; newhead= (LinkList*)malloc(sizeof(LinkList)); printf("请输入你要插入的链表节点的数：\n"); scanf("%d", &(newhead->data)); if (head == NULL) { head = newhead; return head; } else { newhead->next = head; head = newhead;  } return head;  你的链表只在头节点里写入了一个节点个数的正数，然后就没了  void PrintLinkList(LinkList* head) { while (head != NULL) { printf("%d ", head->data);  head = head->next; } puts(""); }  在输出节点时，因为你创建的newhead节点并没有设置newhead->next = NULL.所以你的程序可能就无限循环了。

user: user-1
content: head没有初始化
user-0 提问: 备考专升本，一个简单的题不知道哪错了运行不出来

回复:
user: user-1
content: d在百分号后面 printf("%d年%d月%d日",year, month, day); 对于printf()函数的用法，请参考《C++中printf()函数的用法10-1》

user: user-2
content: printf放到switch外面

user: user-3
content: 错误： 1. return 0；语句放在main()函数末尾，不要放在switch(){}语句中； 2. case 2：语句中的if判断部分，其括号中不应该带""；正确写法 if (year % 4 == 0 || year % 400 == 0) {}   规范： 1. case 2：语句中增加break; 2. switch(){}语句中增加default分支； 3. 打印语句（printf()）放在switch(){}外面比较好；

user: user-4
content: 输入时2018 9 不要加逗号  switch (month) {    ... }  printf(); return 0;

user: user-5
content: 'return 0'后面的'}'要放到printf前面去
user-0 提问: C语言中的链栈问题

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h>   #define OK     1 #define ERROR  0   typedef struct node {     int num;     struct node *next; }LinkStackNode,LinkStack;   //链表的一个个结点   链表   void initStack(LinkStack **top);       //初始化链栈 int push(LinkStack *top, int n);      //链栈进栈操作 void pop(LinkStack *top);             //链栈出栈操作 int getTop(LinkStack *top, int *s);   //读取链栈栈顶元素   int main() {     LinkStack *TOP;     int n;     int *data;       initStack(&TOP);   //初始化链栈       getchar();     getchar();     return 0; }   void initStack(LinkStack **top)     //初始化链栈 {     *top = (LinkStack *)malloc(sizeof(LinkStack));     (*top)->next = NULL;     if (!(*top))     {         printf("分配内存失败！\n");         exit(1);     }     printf("初始化成功！\n"); }  需要用二重指针，一重指针不能把malloc的空间返回。  我想程序在后面使用的时候出现的问题，因为TOP是一个野指针，即使是调用了初始化栈之后还是一个野指针，所以用二重指针，或者在C++编译器里，可以用*&top作为形参，实参可以直接用TOP而不用加&

user: user-2
content: #include <stdio.h> #include <stdlib.h>  #define OK     1 #define ERROR  0  typedef struct node {     int num;     struct node *next; }LinkStackNode,LinkStack;   //链表的一个个结点   链表  void initStack(LinkStack *top);       //初始化链栈 int push(LinkStack *top, int n);      //链栈进栈操作 void pop(LinkStack *top);             //链栈出栈操作 int getTop(LinkStack *top, int *s);   //读取链栈栈顶元素  int main() {     LinkStack *TOP;     int n;     int *data;      initStack(TOP);   //初始化链栈      getchar();     getchar();     return 0; }  void initStack(LinkStack *top)     //初始化链栈 {     top = (LinkStack *)malloc(sizeof(LinkStack));     top->next = NULL;     if (!top)     {         printf("分配内存失败！\n");         exit(1);     }     printf("初始化成功！\n"); }  并没有报错。把你的报错信息截图看一下

user: user-3
content: 但是用法不对，参数可以改成*&或者返回top，这样修改不了top

user: user-3
content: 什么事都没有做，应该不会出错

user: user-0
user-0 提问: 编程实现：从键盘输入20个整数，求其平均值，然后输出平均值以上的所有元素。

回复:
user: user-0
content: 谢谢谢谢！仰望…

user: user-0
content: 我和我最后的倔强。。。::>_<::无奈

user: user-1
content: 手写代码很不错

user: user-2
content: #include <stdio.h> #define N 20 int main() { 	int a[N], i, s;//-------数组a的声明改为a[N]---- 	s = 0; 	float k;//-------平均分k的类型改为float-------- 	printf("请输入%d个数字:", N); 	for (i = 0; i < N; i++)//---------把两个循环改为一个，提高效率--------- 	{ 		scanf("%d", &a[i]); 		s = s + a[i]; 	} 	k = (float)s / N;//--------修改求平均分的方法------- 	printf("平均分为%f\n", k); 	printf("超过平均分的有："); 	for (i = 0; i < N; i++) 	{ 		if (a[i] > k) 		{ 			printf("%d ", a[i]); 		} 	} 	return 0; }  VS2015 C++环境调试（只输入了5个数字）

user: user-0
content: 另一位小伙伴指出了除法是\ 和max可以不用定义😂谢谢你们啦

user: user-0
content: 另一位小伙伴指出了除法是\ 和max可以不用定义😂谢谢你们啦👍

user: user-3
content: 很对的样子。
user-0 提问: 求助：为什么picture1打开不了？

回复:
user: user-0
content: 还是不行，图片是我从网上随便下载的，是不是权限问题？

user: user-1
content: 用如下方式打印一下，可以知道错误原因   if( !(f_file = fopen(file_name,"rb")))     {         printf("cannot open the file %s!",file_name);         printf("%s\n", strerror(errno)):         return;     } 需要注意，每个打开文件都建议加上这句，并且需要引入string.h和errno.h头文件

user: user-2
content: 可能1.jpg不存在
user-0 提问: 求助一个C语言问题

回复:
user: user-1
content: 楼主的代码应该是出现死循环了，因为for循环变量是i，楼主看一下while循环是不是也用到i，并且对i操作了i  = i /10;所以i的变化最后又变成0.

user: user-2
content: #include  <stdio.h> int main() { 	int n, i, temp, sum, count=0;  	scanf("%d", &n); 	for ( i=1; i<=n; i++ ) { 		sum = 0; 		temp = i; 		while ( temp > 0 ) {		//分解每位数组并求和  			sum += temp%10; 			temp /= 10; 		} 		if ( sum%15==0 ) { 			printf("%d:%d\n", ++count, i); 		} 	} 	printf("count = %d\n", count ); 	return 0; }

user: user-0

user: user-0
content: 上面的都是常规代码，就没有贴出来了
user-0 提问: 关于typedef的疑问

回复:
user: user-1
content: 上边说的根本没说到点上。 typedef 的作用确实是别名，至于为什么要写一样的名字，因为在c语言里在一些老的编译器声明结构体变量要加struct关键字（而且标准声明变量的时候就是要加struct的）。struct PTNode node; 加了typedef后声明变量就可以直接用PTNode node; 就可以了。

user: user-2
content: typedef struct PTNode   //为什么这里用了PTNode --》没有为什么，这个名字可以任意取 {     TElemType data;     int parent; } PTNode;                      //这里也用PTNode？？？好好地干嘛用两个一样的名字呢？--》这里也一样，名字可以任意取，如果非要较真，可能写代码的人懒得再换个名字。

user: user-3
content: 从上往下，第一个 PTNode ：是 struct 定义的结构体的名字，此时可以使用此名字构造函数，析构函数等； 第二个 PTNode ：是 typedef 定义的另外一个名字，就像我有一个大名 A ，还有一个小名 B ，你也可以喊我 B 一样。  至于这两个地方的名字一样，此时不建议用一样的名字，不容易区分。真要纠结的话，那就是楼上说的命名不规范了...  希望对你有帮助~

user: user-4
content: 这么写就是不规范