Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: c++关于结构体的题目想问一下怎么做

回复:
user: user-1
content: 第4问自己参照着写吧  #include <stdio.h> #include <stdlib.h>  typedef struct student {     char name[20]; //姓名     float ps;      //平时成绩     float sx;      //实习成绩     float cy;      //测验成绩     float qm;      //期末成绩     float zp;      //总评成绩 }stu;  //输入成绩 void Input(stu *ArrStu, int n) {     int i;     for (i=0; i<n; i++)     {         printf("输入第%d个学生的姓名 平时 实习 测验 期末成绩: \n", i+1);         scanf("%s%f%f%f%f", ArrStu[i].name, &ArrStu[i].ps, &ArrStu[i].sx, &ArrStu[i].cy,               &ArrStu[i].qm);         ArrStu[i].zp = (ArrStu[i].ps * 0.1 + ArrStu[i].sx * 0.2 + ArrStu[i].cy * 0.2 +                         ArrStu[i].qm * 0.5);     } }  void MaxZP(stu *StuArr, int n) {     if (StuArr == NULL)     {         printf("Error!");         exit(1);     }     int i, index;     float max = StuArr[0].zp;     for (i=0; i<n; i++)     {         if (max < StuArr[i].zp)         {             max = StuArr[i].zp;             index = i;         }     }     printf("%d\n", index);     printf("姓名：%s\n平时成绩：%.2f\n实习成绩：%.2f\n测验成绩：%.2f\n期末成绩：%.2f\n总评成绩：%.2f\n",            StuArr[index].name, StuArr[index].ps, StuArr[index].sx, StuArr[index].cy, StuArr[index].qm,            StuArr[index].zp); }  int main() {     stu *StuArr = NULL;     int n = 0, index = -1;      printf("输入学生人数：\n");     scanf("%d", &n);      StuArr = (stu *)malloc(sizeof(stu) * n);      Input(StuArr, n);     MaxZP(StuArr, n);        free(StuArr);     StuArr = NULL;      return 0; }
user-0 提问: C语言 文件操作

回复:
user: user-1
content: 四个字节的整形可以表示几位数？

user: user-0
content: 引用 1 楼 user-1的回复:因为： 第一种情况，写入4，其实只写了一个字节，读的时候要读4个字节，自然没有4个字节，就到了文件尾了。 第三种情况，读的时候要读到空格或者换行才会结束，所以也会读到文件末尾。 第二种情况，写入一个字节，读一个字节，自然不知道是否到文件尾了。 我把第一种情况改成写入一个5位数，feof还是1啊，显然与这里与字节关系不大

user: user-0
content: 我把第一种情况改成写入一个5位数，feof还是1啊，显然与这里与字节关系不大

user: user-1
content: 因为： 第一种情况，写入4，其实只写了一个字节，读的时候要读4个字节，自然没有4个字节，就到了文件尾了。 第三种情况，读的时候要读到空格或者换行才会结束，所以也会读到文件末尾。 第二种情况，写入一个字节，读一个字节，自然不知道是否到文件尾了。
user-0 提问: 错误列表里的错误提示，请求大神帮助

回复:
user: user-1
content: 函数的定义（或实现部分）不能写在main()里吧。

user: user-2
content: #include <stdio.h>  float aver(int b[]) { int i, sum = 0; float average; for(i=0; i< 10; i++)     sum += b[i]; average = sum / 10; return average; }  void main() {     int i;     float average;     int a[10]={90,80,88,78,94,56,50,70,65,89};     average = aver(a);     printf("the average is :%.2f", average); }

user: user-3
content: 你是不是想把aver定义成aver(float *) 在aver里面计算平均值，外面调用就不用循环了
user-0 提问: 关于编写Fibonacci数列（f(n)=f(n-1)+f(n-2))的问题

回复:
user: user-1
content: #include<stdio.h> int Fibonacci(int a){     if(a<=2)         return 1;     else{         return Fibonacci(a-1)+Fibonacci(a-2);     } } int main(){     int i,n,a;     scanf("%d",&n);     for(i=1;i<n;i++){         printf("%d\n",Fibonacci(i));     }     return 0; }

user: user-2
content: 应该还是溢出的问题吧，你换成double类型的试试看 #include<stdio.h> double Fibonacci(int a) {     int i;     double f1 = 1,f2 = 1,f3;     if(a <= 2) return 1;     else     {         for(i = 3 ; i <= a ; i ++)         {             f3 = f1 + f2;             f1 = f2;             f2 = f3;         }         return f3;     } } int main() {     int i,n,a;     scanf("%d",&n);     for(i = 0 ; i < n ; i ++)     {         scanf("%d",&a);         printf("%.0f\n",Fibonacci(a));     }     return 0; }
user-0 提问: c语言程序运行后如果玩家1赢了，却无法输出玩家1获胜的文字咋整。小白求大佬帮助

回复:
user: user-1
content: int a; printf("请输入玩家1的名称: "); scanf("%s",a); player1=a;  int 和 %s怎么搞到一起了？

user: user-0
content: 如图
user-0 提问: 关于二叉树的建立

回复:
user: user-1
content: 引用 4 楼 傻猴子的回复:[quote=引用 3 楼 真相重于对错的回复:]你的递归函数没有出口啊 有的他最后那个n会变成0就跳出来了[/quote] 跳出来又有何用？你的树并没有正确的返回啊，因为跳出来只返回一个null

user: user-0
content: 引用 3 楼 真相重于对错的回复:你的递归函数没有出口啊 有的他最后那个n会变成0就跳出来了

user: user-1
content: 你的递归函数没有出口啊

user: user-0
content: 引用 1 楼 user-2的回复:pre+1错了，为啥要pre+1？ 先序的下一个，中序左边也存在的不就是根的左孩子嘛

user: user-2
content: pre+1错了，为啥要pre+1？
user-0 提问: error C2440: '=' : cannot convert from 'int (*)[7]' to 'int *'  怎么错误大虾们，如何修改？加粗部

回复:
user: user-1
content: 引用 12 楼 千梦一生 的回复:[quote=引用 6 楼 二进制脑袋 的回复:] [quote=引用 4 楼 千梦一生 的回复:] int a[7]; int* pi = &a;//cannot convert from 'int (*)[7]' to 'int *'  int* pii = (int*)&a; 有这样的吗？数组名就是数组首元素的地址了，楼主错在对地址再取地址，是二级指针了。 int* pii = a;[/quote]  有啊，前两天学到的，敲代码验证过int* pi = &a;//报错cannot convert from 'int (*)[7]' to 'int *'。  [/quote] int *p = &a 报错并不意味着&a是二级指针，而是 &a 是指向数组的指针。指向整数数组的指针和指向int*不是一个类型  甚至  int a[3]; int b[4]; &a 和 &b都不是一种类型的指针，他们无法直接转换

user: user-2
content: 引用 6 楼 二进制脑袋 的回复:[quote=引用 4 楼 千梦一生 的回复:] int a[7]; int* pi = &a;//cannot convert from 'int (*)[7]' to 'int *'  int* pii = (int*)&a; 有这样的吗？数组名就是数组首元素的地址了，楼主错在对地址再取地址，是二级指针了。 int* pii = a;[/quote]  有啊，前两天学到的，敲代码验证过int* pi = &a;//报错cannot convert from 'int (*)[7]' to 'int *'。

user: user-3
content: int a[7]; 	int (*p)[7];  	p = &a; 	printf("a:%p, &a:%p, p:%p, *p:%p, &p[1]:%p, &(*p)[1]:%p.\n", a, &a, p, *p, &p[1], &(*p)[1]);  看看输出，就明白了。

user: user-3
content: 引用 8 楼 真相重于对错 的回复:例如 int a[2][2]; 要用一个指针指向它，那么应该是  int (*p)[2][2]=&a; 数组是一种数据类型，而且他的特殊之处在 int arr[3] 和 int arr[5]是两种类型，而不是一种。 还有无论是一维数组，还是二维数组，在内存中都是连续的，所以一维数组和一级指针在内存的布局一致，但二维数组和二级指针在内存中的布局是不一致，所以不能简单地用 int arr[2][2]; int **p =&arr 而要 int (*p)[2][2]=&arr 也就是说p是一级指针，他指向的数据类型是一个二维数组 的确，一维数组名可以赋给同类型一级指针，但并不意味着一维数组等于一级指针。 int a[7]; int (*p)[7]; p = &a; printf("a:%p, &a:%p,(*p)[7]:%p,*p:%p.\n", a, &a, p, *p); 输出4个相同的值！这也是指向数组的指针的怪异之处。

user: user-1
content: 再给段代码int arr[2][2]{ {1,2},{3,4} }; 	int* p = (int*)((void*)arr); 	for (int i = 0; i < 4; i++) 		cout << p[i] << " "; 输出 1 2 3 4;

user: user-1
content: 例如 int a[2][2]; 要用一个指针指向它，那么应该是  int (*p)[2][2]=&a; 数组是一种数据类型，而且他的特殊之处在 int arr[3] 和 int arr[5]是两种类型，而不是一种。 还有无论是一维数组，还是二维数组，在内存中都是连续的，所以一维数组和一级指针在内存的布局一致，但二维数组和二级指针在内存中的布局是不一致，所以不能简单地用 int arr[2][2]; int **p =&arr 而要 int (*p)[2][2]=&arr 也就是说p是一级指针，他指向的数据类型是一个二维数组

user: user-1
content: &a 不是二级指针，他还是一级指针，只是指向的一个数组而已

user: user-3
content: 引用 4 楼 千梦一生 的回复:int a[7]; int* pi = &a;//cannot convert from 'int (*)[7]' to 'int *'  int* pii = (int*)&a; 有这样的吗？数组名就是数组首元素的地址了，楼主错在对地址再取地址，是二级指针了。 int* pii = a;

user: user-4
content: scanf("%d",p[n].finalpay); 这儿的finalpay是数组，因此会出现类型不匹配。要么去掉结构体中的finalpay的数组，改用int finalpay;要么用  scanf("%d", &p[n].finalpay[0]);  如下的salary，meritpay，bonus同样如上处理～ scanf("%d",p[n].salary); printf("\t\t请输入的%d个员工的绩效工资:",n+1); scanf("%d",p[n].meritpay); printf("\t\t请输入的%d个员工的奖金:",n+1); scanf("%d",p[n].bonus); printf("\t\t请输入的%d个员工的应发工资:",n+1); scanf("%d",p[n].finalpay);

user: user-1
content: 代码问题不少，关键是不知道你要干什么？

user: user-2
content: int a[7]; int* pi = &a;//cannot convert from 'int (*)[7]' to 'int *'  int* pii = (int*)&a;

user: user-0
content: 是在void total的定义那里的错误。

user: user-5
content: struct peolpe { int num; char name[20]; char sex[3]; char department[15]; int salary[6]; int meritpay[6]; int bonus[6];  int finalpay;  };
user-0 提问: C语言-条件运算符输出问题

回复:
user: user-0
content: 引用 8 楼 早打大打打核战争 的回复:a < 1这条件可以去掉 这样也可以！了解了 VS2019还是0.4，怎么改都不行，我猜是编译器出问题了 VC++6.0没有问题，输出2.5 我带上a<1主要是因为避免和前边a>1重叠。

user: user-0
content: 引用 7 楼 ?Victor.?? 的回复:[quote=引用 6 楼 Clancey P.M.R.S. Yu 的回复:] [quote=引用 5 楼 ?Victor.?? 的回复:] 奇怪  我用了你的代码还是2.5  b = (a >= 1 ? a : (a >= 0 && a < 1 ? 1 / a : -1 * a));  改成  b = (a >= 1 ? a : (((a >= 0) && (a < 1)) ? (1 / a) : (-1 * a)));  试试呢 还是不行，难不成是编译器问题？ [/quote]  vs吗，我也是呀，2017的  按理说不可能呀[/quote]  啊这，果然编译器有问题，我在虚拟机里跑XP，用VC++6.0最终得到了2.5.......  VS2019可能改了点我不知道的特性吧，我了解下

user: user-1
content: a < 1这条件可以去掉

user: user-2
content: 引用 6 楼 Clancey P.M.R.S. Yu 的回复:[quote=引用 5 楼 ?Victor.?? 的回复:] 奇怪  我用了你的代码还是2.5  b = (a >= 1 ? a : (a >= 0 && a < 1 ? 1 / a : -1 * a));  改成  b = (a >= 1 ? a : (((a >= 0) && (a < 1)) ? (1 / a) : (-1 * a)));  试试呢 还是不行，难不成是编译器问题？ [/quote]  vs吗，我也是呀，2017的  按理说不可能呀

user: user-0
content: 引用 5 楼 ?Victor.?? 的回复:奇怪  我用了你的代码还是2.5  b = (a >= 1 ? a : (a >= 0 && a < 1 ? 1 / a : -1 * a));  改成  b = (a >= 1 ? a : (((a >= 0) && (a < 1)) ? (1 / a) : (-1 * a)));  试试呢 还是不行，难不成是编译器问题？

user: user-2
content: 奇怪  我用了你的代码还是2.5  b = (a >= 1 ? a : (a >= 0 && a < 1 ? 1 / a : -1 * a));  改成  b = (a >= 1 ? a : (((a >= 0) && (a < 1)) ? (1 / a) : (-1 * a)));  试试呢

user: user-0
content: 引用 1 楼 ?Victor.?? 的回复:可以把你的代码复制黏贴上来吗？  我得到2.5 #include <stdio.h> #include <math.h> #include <stdlib.h> int main() { double x, y, a , b; printf("Input the value of x,y:"); scanf_s("%lf%lf", &x, &y); a = (x * 2 + 2) / y; b=(a >= 1 ? a : (a >= 0 && a < 1 ? 1 / a : -1 * a)); printf("%lf", b); system("pause"); return 0; }

user: user-2
content: 可以把你的代码复制黏贴上来吗？  我得到2.5
user-0 提问: 错误列表的问题怎么解决，求答案

回复:
user: user-0
content: 引用 3 楼 ?Victor.??的回复:[quote=引用 2 楼 jian995229 的回复:] [quote=引用 1 楼 ?Victor.??的回复:]int main() {  return 0;  }  好像是这么回事 你是说把getchar换成return吗？[/quote]  main前面加上int  main函数return 0;  [/quote] 谢谢，搞定了

user: user-1
content: 引用 2 楼 jian995229 的回复:[quote=引用 1 楼 ?Victor.??的回复:]int main() {  return 0;  }  好像是这么回事 你是说把getchar换成return吗？[/quote]  main前面加上int  main函数return 0;

user: user-0
content: 引用 1 楼 ?Victor.??的回复:int main() {  return 0;  }  好像是这么回事 你是说把getchar换成return吗？

user: user-1
content: int main() {  return 0;  }  好像是这么回事
user-0 提问: double 0.29  * 100 强制转化成int型后 变成 28

回复:
user: user-1
content: a*=100; a+=0.5; int b = (int)a; --------------- 好像可以

user: user-1
content: 引用 9 楼 千梦一生 的回复:a *= 100; a+=0.4; int b = (int)a; 不对

user: user-1
content: a *= 100; a+=0.4; int b = (int)a;

user: user-2
content: 0.29在内存里不一定是0.290000呢。可能是0.28999999呢。所以，扩大100倍，是有可能是28的。

user: user-3
content: 二进制不能表示所有小数，所以存储在内存的是一个近似0.29的值，所以*100后取整变成了28

user: user-4
content: double x = 0.29; int z = round(x * 100);

user: user-5
content: 0.29没法精确存储，为0.28xxxxx *100得28.xxxxxx 浮点型转整型就是去掉小数部分，得28  方案这有两种 1. +0.5再强转 int  a = 0.29*100 + 0.5; 2. 利用printf相关函数的四舍五入： char  str[100]; int a; sprintf( str, "%.0f", 0.29*100 ); sscanf( str, "%d", &a ); sscanf也可以换atoi： a = atoi(str);

user: user-6
content: 0.39存成0.390000000000000010

user: user-0
content: 引用 1 楼 user-7 的回复：double的存储机制你了解一下，简单说来就是0.29存成0.2899999，然后就出问题，可以写成int b = 10*a + 0.5为什么0.39可以打印出39呢？

user: user-0
content: 为什么0.39可以 打印出39呢

user: user-7
content: double的存储机制你了解一下，简单说来就是0.29存成0.2899999，然后就出问题，可以写成int b = 10*a + 0.5
user-0 提问: 为什么会发生错误无法打开求解答

回复:
user: user-0
content: 引用 4 楼 ?Victor.?? 的回复:[quote=引用 3 楼 qq_44235371 的回复:] [quote=引用 1 楼 ?Victor.?? 的回复:] scanf 改成 scanf_s  或者在  main函数前面加上  #pragma warning(disable:4996) 感谢！ 已经解决了 请问一下为什么会出现这个问题呢 我用vc+6就没有问题[/quote]  vs要求的，scanf_s()安全性较高  scanf_s() 是针对“ scanf()在读取字符串时不检查边界，可能会造成内存泄露”这个问题设计的。  scanf_s()用于读取字符串时，必须提供一个数字以表明最多读取多少位字符，以防止溢出。[/quote]好的感谢

user: user-1
content: 引用 3 楼 qq_44235371 的回复:[quote=引用 1 楼 ?Victor.?? 的回复:] scanf 改成 scanf_s  或者在  main函数前面加上  #pragma warning(disable:4996) 感谢！ 已经解决了 请问一下为什么会出现这个问题呢 我用vc+6就没有问题[/quote]  vs要求的，scanf_s()安全性较高  scanf_s() 是针对“ scanf()在读取字符串时不检查边界，可能会造成内存泄露”这个问题设计的。  scanf_s()用于读取字符串时，必须提供一个数字以表明最多读取多少位字符，以防止溢出。

user: user-0
content: 引用 1 楼 ?Victor.?? 的回复:scanf 改成 scanf_s  或者在  main函数前面加上  #pragma warning(disable:4996) 感谢！ 已经解决了 请问一下为什么会出现这个问题呢 我用vc+6就没有问题

user: user-1
content: scanf 改成 scanf_s  或者在  main函数前面加上  #pragma warning(disable:4996)
user-0 提问: 文件feof函数

回复:
user: user-0
content: 好的，谢谢兄弟

user: user-1
content: 引用 4 楼 你的小小栗子 的回复：[quote=引用 3 楼 离水的鱼儿的回复:][quote=引用 2 楼 你的小小栗子 的回复：][quote=引用 1 楼 user-2的回复:]你把if最后那个分号去掉 和那个有啥关系[/quote]; 代表此语句结束，你if还有还用？cnt++怎么样都执行[/quote] 这个是在一个函数里面，如果if执行，输出打开文件失败，就返回到主函数了，cnt++不会执行啊 [/quote] 你读一个空文件，while 肯定会执行啊，if而且不成立，由于你加了分号，cnt++会执行。那不就是1了。 至于while为什么会执行，原因是，对于一个空文件来说，当程序打开它的时候，它的光标会停在文件的开头，但是由于文件里什么内容都没有存（但是EOF是存在的），即整个文件就存贮了一个EOF。当程序打开文件，并直接调用feof()时，这个函数就会站在光标的位置向后张望，结果就看见了EOF，然后就当然返回0了。 无论怎么样你的分号都不对，逻辑就不对。 真想判断是否到结尾了，while 读取，循环内判断是否到结尾了。

user: user-0
content: 引用 3 楼 离水的鱼儿的回复:[quote=引用 2 楼 你的小小栗子 的回复：][quote=引用 1 楼 user-2的回复:]你把if最后那个分号去掉 和那个有啥关系[/quote]; 代表此语句结束，你if还有还用？cnt++怎么样都执行[/quote] 这个是在一个函数里面，如果if执行，输出打开文件失败，就返回到主函数了，cnt++不会执行啊

user: user-1
content: 引用 2 楼 你的小小栗子 的回复：[quote=引用 1 楼 user-2的回复:]你把if最后那个分号去掉 和那个有啥关系[/quote]; 代表此语句结束，你if还有还用？cnt++怎么样都执行

user: user-0
content: 引用 1 楼 user-2的回复:你把if最后那个分号去掉 和那个有啥关系

user: user-2
content: 你把if最后那个分号去掉
user-0 提问: 时间换算

回复:
user: user-1
content: #include<stdio.h> int main() { 	int h, m, s, n, sum=0, carry; 	scanf("%d:%d:%d", &h, &m, &s); 	scanf("%d", &n); 	sum = s+n; //	if ( sum >= 60 ) {	//处理秒  		carry = sum/60; 		sum = sum%60; 		m += carry; //		if ( m >= 60 ) {  //处理分  			carry = m/60;  			m = m%10; 			h = (h+carry) % 24;  //		} //	} 	printf("%02d:%02d:%02d",h,m,sum); 	return 0; } 其实，所有的 if 语句都可以不要。

user: user-2
content: 使用time_t类型相加就行，不用这么麻烦

user: user-3
content: #include<stdio.h>  int main() {     int h,m,s;     int n;     int sum=0;      scanf("%d:%d:%d",&h,&m,&s);     scanf("%d",&n);     sum = s+n;      m += sum / 60;     sum %= 60;      h += m / 60;     m %= 60;      h %= 24;  #if 0     if(sum>=60){         sum=sum-60;         m++;         if(m==60){             m=m-60;             h++;             if(h==24){                 h=0;             }         }     } #endif      printf("%02d:%02d:%02d\n",h,m,sum);      return 0; } 供参考～
user-0 提问: C语言题目

回复:
user: user-1
content: 引用 4 楼 其实一开始我是拒绝的 的回复:[quote=引用 3 楼 ?Victor.??的回复:][quote=引用 2 楼 其实一开始我是拒绝的 的回复:] [quote=引用 1 楼 江南蜡笔小新的回复:]答案：ABC6789  gets(ss)执行完之后，ss就已经变成ABC了 为什么之前定义的没了[/quote]  重新赋值了，和以前的没关系了[/quote] gets（）用重新赋值的功能？[/quote] #include<stdio.h>  int main() { 	int a = 3; 	scanf("%d",&a); 	printf("%d",a); }  gets对于字符串相当于scanf对于int(功能上)  会把原来的替换掉

user: user-0
content: 引用 3 楼 ?Victor.??的回复:[quote=引用 2 楼 其实一开始我是拒绝的 的回复:] [quote=引用 1 楼 江南蜡笔小新的回复:]答案：ABC6789  gets(ss)执行完之后，ss就已经变成ABC了 为什么之前定义的没了[/quote]  重新赋值了，和以前的没关系了[/quote] gets（）用重新赋值的功能？

user: user-1
content: 引用 2 楼 其实一开始我是拒绝的 的回复:[quote=引用 1 楼 江南蜡笔小新的回复:]答案：ABC6789  gets(ss)执行完之后，ss就已经变成ABC了 为什么之前定义的没了[/quote]  重新赋值了，和以前的没关系了

user: user-0
content: 引用 1 楼 江南蜡笔小新的回复:答案：ABC6789  gets(ss)执行完之后，ss就已经变成ABC了 为什么之前定义的没了

user: user-2
content: 引用 2 楼 其实一开始我是拒绝的 的回复:[quote=引用 1 楼 江南蜡笔小新的回复:]答案：ABC6789  gets(ss)执行完之后，ss就已经变成ABC了 为什么之前定义的没了[/quote]  根据你的问题，我写了一篇博客， 由入门C语言题目浅析gets()函数的用法 https://blog.csdn.net/ftimes/article/details/106957922 表达能力不好，写得又臭又长，你可以直接拉到最后看结论，希望可以帮到你~

user: user-2
content: 答案：ABC6789  gets(ss)执行完之后，ss就已经变成ABC了
user-0 提问: c语言怎么打边框？

回复:
user: user-0
content: 哦 谢谢各位大佬

user: user-1
content: 应该有一些特殊的角标什么的  百度一下

user: user-2
content: printf输出是双引号里的直接输出的～遇到%d, %c， %s等等才会特殊处理～

user: user-3
content: 照着他的代码打呗
user-0 提问: c语言求大佬！！急！！

回复:
user: user-1
content: 引用 1 楼 自信男孩 的回复: int i; float sum = 0f;  while (i < n) {     sum += s[i]; } if (n != 0)     return sum / n;  return 0f;   供参考～  int i; float sum = 0f;   while (i < n) {     sum += s[i++]; } if (n != 0)     return sum / n;   return 0f; 需要把i自增一下，上面的代码会导致无限循环。用这个

user: user-1
content: int i; float sum = 0f;  while (i < n) {     sum += s[i]; } if (n != 0)     return sum / n;  return 0f;   供参考～
user-0 提问: VC下数组和结构体

回复:
user: user-0
content: 引用 2 楼 自信男孩 的回复:ave=sum/j; j在上一个循环之后已经是3了，不是2. 多谢

user: user-0
content: 引用 3 楼 chxchxkkk 的回复:j+1显然不对 已改多谢

user: user-0
content: 引用 1 楼 user-3 的回复:我猜是变量的数据类型问题，程序中 ave 为整型，其实更应该是 double 型，同时 “ave = sum/(j+1);”也应该按double 型进行处理。 已经改了，多谢

user: user-1
content: j+1显然不对

user: user-2
content: ave=sum/j; j在上一个循环之后已经是3了，不是2.

user: user-3
content: 我猜是变量的数据类型问题，程序中 ave 为整型，其实更应该是 double 型，同时 “ave = sum/(j+1);”也应该按double 型进行处理。
user-0 提问: C语言程序设计习题

回复:
user: user-0
content: 引用 1 楼 user-1的回复:这可看着不简单啊，跟世界杯一样 是呀我感觉挺难的

user: user-1
content: 这可看着不简单啊，跟世界杯🏆一样
user-0 提问: for循环读入n个字符串问题

回复:
user: user-1
content: 引用 1 楼 user-3 的回复:首先getchar的地方要放开注释，也就是说需要执行getchar（它的作用是清空换行符，否则你按回车就相当于接收2个数据，一个正确数据，一个是换行符）。就你输入的数据，N接收2，a[0]接收换行符（第一次for循环），然后a[1]接收saca（第二次for循环），for循环就结束了，所以程序就直接运行了。 其次，不要用变量定义数组的长度，即a[N][100]改成a[100][100]，想用变量来定义数组长度就要自己申请内存。你的程序能正常运行，是因为a数组越界后，内存没造成冲突，你现在这样用是不安全的。 不需要放开，用的是scanf %s不是gets或fgets，因此不需要getchar();  char a[N][100];这里的N是未知的，数组需要确定长度，因此建议楼主N用宏定义

user: user-0
content: 我懂了，谢谢大佬指导

user: user-2
content: N没有初始化而已

user: user-3
content: 首先getchar的地方要放开注释，也就是说需要执行getchar（它的作用是清空换行符，否则你按回车就相当于接收2个数据，一个正确数据，一个是换行符）。就你输入的数据，N接收2，a[0]接收换行符（第一次for循环），然后a[1]接收saca（第二次for循环），for循环就结束了，所以程序就直接运行了。 其次，不要用变量定义数组的长度，即a[N][100]改成a[100][100]，想用变量来定义数组长度就要自己申请内存。你的程序能正常运行，是因为a数组越界后，内存没造成冲突，你现在这样用是不安全的。
user-0 提问: 使用libpng将bmp转换成png中遇到的问题

回复:
user: user-1
content: 回楼主    我将这行代码注释了就没有了蓝线    ((DWORD *)op)[-1] = 0;

user: user-1
content: TCHAR 和byte是什么类型的用它libpng库的函数的定义是什么
user-0 提问: VC实现音乐功能

回复:
user: user-0
content: 引用 2 楼 Simple-Soft的回复:time是关键字，是个函数，你改一下，不要用time作为变量名 改了之后，程序能运行，没有错误，但是播放歌曲没有声音

user: user-1
content: time是关键字，是个函数，你改一下，不要用time作为变量名

user: user-2
content: 对一个变量，只能声明一次，多次声名，就算声明类型相同，也是错误的。 而函数中，可以直接在 “函数原型” 中声明。 https://blog.csdn.net/weixin_43641971/article/details/88119496
user-0 提问: 求解一个题

回复:
user: user-1
content: 这道题不难，就是判断，写了一段供参考  #include <stdio.h> #include <stdlib.h>  int main() {     int cj[5] = {0};     int i, aver = 0, total = 0;     printf("输入成绩：\n");     for (i=0; i<5; i++)         scanf("%d", &cj[i]);     aver = (cj[3] + cj[4]) / 2;      if (cj[1] > 95)         total += 100;     if (cj[0] > 95 || cj[2] > 95)         total += 100;     if (aver > 95 && cj[0] > 60 && cj[1] > 60 && cj[2] > 60)         total += 200;          printf("奖学金总数：%d\n", total);      getchar();     return 0; }
user-0 提问: 编写程序：
接收用户输入的一个字符，直接输出字符的Ascii码；然后判断输入的字符是否是数字字符，是则输出对应的英文字母。
对应关系如下：

0：A 
1

回复:
user: user-1
content: 自己试着写几行
user-0 提问: 求大佬帮我看看这3道选择题 ，要解题步骤和思路，谢谢

回复:
user: user-1
content: 第二题，B答案，func的功能是自增传递过来的参数值，main函数中自加一次2，所以答案是6. 第一题，D,未指定a[0][0]的值，所以结果未定，但是在vs2019中无法显示结果。

user: user-2
content: 第一题变量i的类型跟p的类型不一样吧。 第二题答案是6，注意两个地方，变量b是全局变量，mian函数里的局部变量a的值因为传入的是地址，所以被func函数改变了。

user: user-3
content: C没问题， A是因为野指针，结果未定义； B也是野指针原因，结果也是未定义； D是越界，因为s = p;之后，就是s指针指向了e的首地址，*s = 1;那么对应的是1赋值给int类型的数据，而e只是char类型，能表示1个字节，所以结果也是未定义，因为*s = 1;越界了
user-0 提问: 很简单的一道题   但是为什么我一直运行不出来   求解答

回复:
user: user-1
content: 双引号内不用加\n

user: user-2
content: 输入不需要\n

user: user-3
content: 去掉scanf中的'\n'。 因为scanf是标准输入，属于行缓冲，因此需要输入回车才能将输入缓存里的数据刷到内存，因此是必须要输入的。而scanf中加上'\n'，则输入的回车会与'\n'匹配，无法完成提交。

user: user-4
content: scanf（“%f%f%f\n”）;不需要\n

user: user-5
content: scanf（“%f%f%f\n”）; 这句需要干掉 \n
user-0 提问: 求代码

回复:
user: user-1
content: 你就按照这个要求一步一步来做就可以

user: user-2
content: 代码不长，代参考  #include <stdio.h> #include <stdlib.h> #include <string.h>  typedef struct Candidate {     char name[20];     int total; }candidate;  int main() {     candidate carray[3] = {{"li", 0}, {"zhang", 0}, {"wang", 0}};     int i;     char str[20];      for (i=0; i<10; i++)     {         printf("输入候选人的姓名：\n");         scanf("%s", str);         if (strcmp(str, carray[0].name) == 0)             carray[0].total++;         else if (strcmp(str, carray[1].name) == 0)             carray[1].total++;         else if (strcmp(str, carray[2].name) == 0)             carray[2].total++;     }      for (i=0; i<3; i++)     {         printf("姓名：%s\t, 票数：%d\n", carray[i].name, carray[i].total);     }      getchar();     return 0; }
user-0 提问: 求助大家

回复:
user: user-0
content: 引用 1 楼 丁劲犇 的回复：有没有加分号？  函数的返回值定义是不是数值类型，还是别的？  return;  试试看好了，谢谢！

user: user-1
content: 有没有加分号？  函数的返回值定义是不是数值类型，还是别的？  return;  试试看
user-0 提问: error C2065: 'setpalette' : undeclared identifier问题求助，万分感谢

回复:
user: user-1
content: 应该是缺少函数库以及头文件～另外，TC很老的编译器了，建议用最新的编译器，另外，学习一下新的函数接口～

user: user-0
content: 引用 4 楼 自信男孩 的回复:应该是缺少函数库以及头文件～另外，TC很老的编译器了，建议用最新的编译器，另外，学习一下新的函数接口～ 哈哈，这是老师的作业，就是把tc的改成vc的，感谢指导

user: user-0
content: 引用 1 楼 focuslight 的回复:试试 <stdio.h> <graphics.h> <conio.h> em，还是存在这个问题

user: user-2
content: 试试 <stdio.h> <graphics.h> <conio.h>
user-0 提问: 哪里出了问题代码

回复:
user: user-1
content: PRID32是什么？宏定义？

user: user-2
content: 请参考《C++中printf()函数的用法10-1》 希望能够帮到您！

user: user-3
content: “”里面写 ""要加\   例如  " \"test\" " 而且你%后要加d
user-0 提问: c语言

回复:
user: user-1
content: 去如果这个是系统头文件就去百度下载，然后放到cpp文件同目录下。 如果是你自己写的，就直接放到cpp文件同目录下

user: user-2
content: 首先要有这个DataH.h文件，然后  最后在你的c源文件的起始位置处添加 #include "DataH.h"

user: user-3
content: 你看它在哪里

user: user-0
content: 引用 1 楼 user-3的回复:把它datah.h加进来 怎么加，小白一个

user: user-3
content: 把它datah.h加进来
user-0 提问: 求问这个错误提示是怎么回事？拜托大家

回复:
user: user-1
content: 无lib库,也就是链接库

user: user-0
content: 引用 1 楼 user-2的回复:无代码无真相，search未声明？ 谢谢解答，我发现我把函数名写错了(＞＜)

user: user-2
content: 无代码无真相，search未声明？
user-0 提问: 菜鸡提问：统计二进制文件中某个ASCII码的个数 。这真的把我难到了

回复:
user: user-0
content: [quote=引用 1 楼 user-1 的回复:] 读出文件，然后比较[/quote   能有具体的代码嘛？比较的过程我不太会（下面是我的代码） #include <stdio.h> #include <stdlib.h> main() {    long len;    FILE *fp1,*fp2;    int count=0,a,i;    char *buf;    fp1=fopen("a.dat","rb");    fp2=fopen("b.txt","w");    scanf("%p",&a);    fseek(fp1,0,SEEK_END);    len=ftell(fp1);    rewind(fp1);    buf=malloc(len);    for(i=0;i<len;i++)         fread(&buf[i],1,1,fp1);    for(i=0;i<len;i++)    {        if(buf(i)==a)           count++;    }    fprintf(fp2,"%d",count);    fclose(fp1);     fclose(fp2); }

user: user-1
content: 读出文件，然后比较
user-0 提问: 个人通讯录

回复:
user: user-0
content: 解决了，是POS没有初始化

user: user-1
content: 数组的插入比较麻烦，找到插入的位置后，要先把位置之后的元素都后移一个，然后加入插入的数据

user: user-2
content: 这个函数出问题了吧   void insert_record(record *p, int *plen, record person)   { int pos ; for(int i = 0 ; i < *plen ; i++ )     // 找到插入位置  { if(strcmp(person.number, p[i].number)<0)  {     pos =i;    // 保存插入位置 break;      }     }  for(int j= *plen;j>=pos;j--)  //这个有什么用呢 {  } p[pos] = person;     //这里好像替换了原有的一个记录 *plen = *plen +1;  /*len++ ;*/   }
user-0 提问: c语言递归题

回复:
user: user-0
content: 懂了，谢谢各位

user: user-1
content: 引用 3 楼 你的小小栗子 的回复:那为什么时间会超限呢 因为如果计算fact(0) ，你的代码根本没有出口，无限递归了。

user: user-0
content: 那为什么时间会超限呢

user: user-2
content: 因为0的阶乘等于1，所以要考虑f(0)的情况

user: user-3
content: 应该是n = 0这种情况吧

user: user-4
content: 这种递归算法是比较耗时的
user-0 提问: 关于printf输出，运行时中断，显示access violation的问题

回复:
user: user-0
content: 这是空指针，但前天我在读取其他指针时确实判断了是否为空，前天报错是0x00000005，这么小的地址让我怎么判断呢？又不是空

user: user-1
content: dur应该是个指针，指针需要初始化，数组定义后分配好了空间，可以直接赋值。

user: user-0
content: 这个指针为NULL，差不多就是读取了空指针的值出错，但为啥myf=(hmm->dur)[0]这句不报错呢？

user: user-2
content: Access violation是因为访问了一块无效的内存 要么访问的内存已经释放了 要么使用了一个还未创建对象的指针  记得初始化指针，也记得删除指针后置为NULL
user-0 提问: 反序显示命令行参数里的单词

回复:
user: user-1
content: 给你的代码我是自测过的，没问题才发给你的。你的编译出错，是因为编译的版本问题，比较老而已。

user: user-1
content: 你知道这个错误是啥意思吗？  #include <stdio.h> #include <string.h>  #define QW "quit" void ar(char r[],int n) {     //char p[100];     char *p = NULL, *q[100];     int i=0;     int j=0;      p = r;     q[j] = p;     while(p[i]){         if(p[i]==' ' || p[i] == '\n'){             //p[i] =='\0';             p[i] ='\0';             q[++j] = &p[i+1];         }         i++;     }     //j-1;     j = j-1;     //for(j;j>=0;j--)     for(;j>=0;j--)         printf("%s ",q[j]); } int main(void) {     char a[100];      while(strncmp(fgets(a, 100, stdin),QW, 4)){         ar(a,100);         printf("\n");     }     return 0; } 编译出错问题，要先找错误的原因，不要什么都马上问。

user: user-0
content: 引用 1 楼 user-2 的回复:字符串不能直接赋值  改一下 char *p = r;对函数做了如下修改后还是不行，无法实现该功能,修改如下： void ar(char r[],int n){ 	char *p=r; 	int i=0; 	int j=0; 	char *q[100]; 	while(p[i]){ 		if(p[i]==' '){ 			p[i]='\0'; 			q[j++]=&p[i+1]; 		} 		i++; 	} 	j=j-1; 	for(;j>=0;j--) 		printf("%s ",q[j]); }

user: user-0
content: 引用 2 楼 自信男孩 的回复:#include <stdio.h> #include <string.h>  #define QW "quit" void ar(char r[],int n) {     //char p[100];     int i=0;     int j=0;      char *p = r;     char *q[100];     q[j] = p;     while(p[i]){         if(p[i]==' ' || p[i] == '\n'){             //p[i] =='\0';             p[i] ='\0';             q[++j] = &p[i+1];         }         i++;     }     //j-1;     j = j-1;     //for(j;j>=0;j--)     for(;j>=0;j--)         printf("%s ",q[j]); } int main(void) {     char a[100];      while(strncmp(fgets(a, 100, stdin),QW, 4)){         ar(a,100);         printf("\n");     }     return 0; } 供参考～你的代码编译器显示这个错误：“[Error] expected declaration or statement at end of input”

user: user-1
content: #include <stdio.h> #include <string.h>  #define QW "quit" void ar(char r[],int n) {     //char p[100];     int i=0;     int j=0;      char *p = r;     char *q[100];     q[j] = p;     while(p[i]){         if(p[i]==' ' || p[i] == '\n'){             //p[i] =='\0';             p[i] ='\0';             q[++j] = &p[i+1];         }         i++;     }     //j-1;     j = j-1;     //for(j;j>=0;j--)     for(;j>=0;j--)         printf("%s ",q[j]); } int main(void) {     char a[100];      while(strncmp(fgets(a, 100, stdin),QW, 4)){         ar(a,100);         printf("\n");     }     return 0; } 供参考～

user: user-2
content: 字符串不能直接赋值  改一下 char *p = r;
user-0 提问: 新人小白问问题希望有大神来看～

回复:
user: user-1
content: 用超声波多方向测距 先测出基础距离 然后不断多方向测距 如果哪距离近了 就是人在那 然后再转动 不过这种还是用人脸跟随好做一点 就摄像头+人脸追踪代码

user: user-0
content: 引用 3 楼 N-n-N 的回复:用超声波多方向测距 先测出基础距离 然后不断多方向测距 如果哪距离近了 就是人在那 然后再转动 不过这种还是用人脸跟随好做一点 就摄像头+人脸追踪代码感谢老板！

user: user-0
content: 求不要沉啊

user: user-0
content: 超声波 US-100  舵机 MG945
user-0 提问: 全局变量

回复:
user: user-1
content: 全局变量声明与定义还是放在一起吧！这样便于查看和调用。

user: user-2
content: 不一定呢，如果这个头文件可能被多个源文件引入，那么不能在头文件里定义全局变量。反之，没什么问题～

user: user-3
content: 不建议使用全局变量，如果要用，一定要加static
user-0 提问: 一个奇怪的现象，求大佬

回复:
user: user-0
content: 好吧，之后我测试发现 只要default放最前且没有break，它就不管后面case是什么，只要不遇到break，就一律执行 而不把default这样写就正常会去判断case的值符不符合 真的奇怪。。。 一般也不会这么写，只是一道考题

user: user-0
content: 引用 3 楼 自信男孩 的回复:[quote=引用 2 楼 ccqstark 的回复:] 可是此时k为1也不是2呀，不还是不满足case 2吗？为啥会执行呢 因为default没有break，所以继续向后执行，直到break出去 所以，不能少break; switch是根据break跳出来的[/quote] 是的，这个我明白，我不明白的地方是case 2的意思不是说只有当k==2的时候才会执行的意思吗，不会因为没有break就去执行吧，还得满足k==2呀

user: user-0
content: 不是，它执行第一次case2的时候还在第一个循环，第二个循环的时候再次执行了一个case2 最后输出3

user: user-1
content: 引用 2 楼 ccqstark 的回复:可是此时k为1也不是2呀，不还是不满足case 2吗？为啥会执行呢  第一遍k是1，走了default，但是没有break，又循环了一次，k变成2，这个时候不就走case 2了嘛！

user: user-2
content: 引用 2 楼 ccqstark 的回复:可是此时k为1也不是2呀，不还是不满足case 2吗？为啥会执行呢 因为default没有break，所以继续向后执行，直到break出去 所以，不能少break; switch是根据break跳出来的

user: user-0
content: 可是此时k为1也不是2呀，不还是不满足case 2吗？为啥会执行呢

user: user-2
content: 当k为1时，是应该执行default呀，但是你的default后面没加break呀，你加了break就不会执行case 2了。
user-0 提问: 求助

回复:
user: user-1
content: 图像处理，需要会算法呀，数学必须得很好。傅里叶变换算法等等 这个得找懂图像处理算法的人帮你解决～

user: user-2
content: 可以到网上搜索一下，图像处理相关的代码

user: user-3
content: 我觉得你可以调用一些第三方图形库，没必要自己造车轮啊 想造车轮的话参考一下吧 https://blog.csdn.net/wanty_chen/article/details/80336986
user-0 提问: 求助，C语言编程，万分感谢

回复:
user: user-1
content: cout 发出提示信息 并让用户输入1，2选择功能->cin获取选择->cout 输入提示信息->cin获取信息->信息处理->cout或print 格式化输出

user: user-2
content: 对角线元素a[i][i] 遍历所有元素求最大值
user-0 提问: 根据伪代码程序画出来的这个流程图/流图，它是正确的吗？各位能帮我看看吗，我感觉是画多了一条线

回复:
user: user-1
content: 不删，而是要加一个②的判断再跳转（因为不是无条件跳转的，而是判断X>0来决定是否跳转的）。看程序也应该是②放到⑨之后
user-0 提问: 救救孩子吧……求各位大佬解答。

回复:
user: user-0
content: 引用 楼主 半山易的回复:这个题目是数据结构，使用二叉链表，自己写的大概国家还是出来的，但是细节还是不太清楚。希望各位大佬能够解答一下。 题目:设二叉树T：+(A(3,w(x,Y(,7))),a(2(T,?)))采用二叉链表结构存储，数据元素为字符类型。设计算法分别求出二叉链表中data域为英文字母和数字字符的结点个数 我的思路跟你一样的，哈哈

user: user-0
content: 引用 1 楼 user-1的回复:我的理解是这样的： 1、把data数据存到二叉树链表中 2、先序遍历、中序遍历、后续遍历，无论哪种，遍历完整个二叉树 3、遇到英文加1，遇到数字加1。 呃，你来晚了，我昨天晚上自己搞出来了。哭了

user: user-1
content: 我的理解是这样的： 1、把data数据存到二叉树链表中 2、先序遍历、中序遍历、后续遍历，无论哪种，遍历完整个二叉树 3、遇到英文加1，遇到数字加1。
user-0 提问: 研究生让做的第一个项目，请问各位我该怎么入手，学习一些什么呢？

回复:
user: user-1
content: c，c++基本 c网络通讯 c数据库操作

user: user-2
content: 大工程。慢慢弄吧，边弄边学。啥不懂学啥。
user-0 提问: 求大神帮帮忙，下周就要作报告了，但有些错误还是看不出来

回复:
user: user-1
content: 把错误描述一下，是编译时刻还是运行时刻错误，什么类型错误等

user: user-2
content: 你说一下哪里报错了啊，最好带上图

user: user-3
content: 是啊，是哪儿出错了？
user-0 提问: 管道通信问题

回复:
user: user-1
content: 我觉得这个还涉及到管道的读写缓存，如果A没写满缓存数据是不会发送的，这样B就会堵塞，最后A关闭了还是没有flush的话，B可能什么都收不到。

user: user-2
content: 没看出来是管道的题目，不就读写文件嘛，改了一下。  A进程： #include <stdio.h> #include <unistd.h> #include <fcntl.h>  int main() {     int fd;     fd = open("fifo1", O_WRONLY|O_CREAT|O_TRUNC, 0666);     printf("%d\n", fd);      write(fd, "ABCDEFGH", 8);     write(fd, "1234", 6);      close(fd);      return 0; }   B进程： #include <stdio.h> #include <unistd.h> #include <fcntl.h>  int main() {     int fd, n;      char buf[1024];     fd = open("fifo1", O_RDONLY, 0);     n = read(fd, buf, 4);     buf[4] = 0;     printf("%d:%s\n", n, buf);      n = read(fd, buf, 20);     printf("%d:%s\n", n, buf);      close(fd);     return 0;  }   输出： 4:ABCD 10:EFGH1234

user: user-3
content: 引用 4 楼 mmmm0303 的回复:所以B的输出是什么？ 那么为什么不自己试试呢？ 学编程需要多练习，实践～

user: user-0
content: 所以B的输出是什么？

user: user-3
content: https://blog.csdn.net/yrh159357/article/details/49563787 供参考～  按照楼主的程序，进程1需要先执行，然后进程B才可以执行。楼主的程序没有对open的返回值判断，如果文件不存在，先执行进程2，会出错。即使文件存在了，先执行进程2，那么文件此时可能是空的。

user: user-3
content: 这不是文件的读写吗？两个main，相互独立的两个进程，没有父子关系或者兄弟关系呢。 管道是针对父子进程或者两个子进程通信吧。

user: user-0
content: 有人懂吗？？？？
user-0 提问: 阿美的编辑器

回复:
user: user-1
content: #include <stdio.h> #include<string.h> #include<stdlib.h>  #define sizezifu 50000 #define new_size 50  typedef struct{     char **top;     char **base;     int size_top_base; }zifu;  //void init_zifu(zifu *(&s)) void init_zifu(zifu **s) {     *s = (zifu*)malloc(sizeof(zifu)); //先给s分配内存     (*s)->base= (char**)malloc(sizeof(char*)*new_size);     if (!(*s)->base) {         exit(-1);     }     (*s)->top = (*s)->base;     (*s)->size_top_base = 0; } void push(zifu *s,char *st_r1) {     s->top[s->size_top_base] = (char *)malloc(sizeof(char) * sizezifu);     strcpy(s->top[s->size_top_base],st_r1);     s->size_top_base += 1; } void pop(zifu *s) {     for(int i = 0;i < s->size_top_base;i++)     {         printf("%s\n",s->top[i]);     } } int main(void) {     char strr[20];     zifu *s;     init_zifu(&s);     while(1)     {         scanf("%s",strr);         char strr1[3000];         switch(strr[0])         {             case 'E':                 scanf("%s",strr1);                 push(s,strr1);                 break;             case 'B':                 s->size_top_base -= 1;                 break;             case 'F':                 s->size_top_base += 1;                 break;             case 'Q':                 pop(s);         }     }     return 0; } 供参考～

user: user-1
content: 楼主的问题应该是编译的问题。楼主用的g++编译器，而提交用的可能是C编译器。对于参数中出现&，C++识别，但是C语言是不认的。 引用&是C++的语法。
user-0 提问: 怎样合理的解释一下这题？

回复:
user: user-1
content: sizeof是运算符不是函数，区别在于 函数是运行的时候执行的 运算符是编译后内嵌在代码中的。

user: user-2
content: sizeof (int)给出的是int类型的实际大小，一般int类型的变量只占4个字节的大小，不管是在32位下，还是64位下。

user: user-3
content: sizeof是c 语言的关键字

user: user-4
content: sizeof（）不是C语言的函数，而是C语言中的字节运算符，是一个单目运算符。 其实他不参与编译的，在预处理的时候，就已经被计算了，比如说int n = sizeof(int)，那么这个式子，在经过预处理后，就已经变成了，int n = 4，（在32位的环境编译器下）。所以这个到底多大，是根据编译器而定，看编译器处在什么样的环境，而得到不同的结果。在编译之前，就已经被计算了。根本不参与编译，所以，sizeof 不是一个函数，而是一个运算符。为什么计算机知道int几个字节，编译器当然是知道。

user: user-5
content: 是函数，描述错误～后面的描述没问题～

user: user-6
content: sizeof 是C语言的运算符，以字节为单位给出对象的大小，运算对象可以是一个被圆括号括起来的类型说明符，如sizeof（float)或者是一个具体的变量名，数组名等，如sizeof foo。 一开始就错了是运算符不是函数。 类似的strlen（）才是函数，作用是给出字符串中的字符的长度。
user-0 提问: 函数实参问题

回复:
user: user-1
content: 3个实参，a是一个，b+c是一个，(a,b)是一个

user: user-2
content: （a,b）是一个逗号表达式

user: user-3
content: 出这样题目的老师一定是一个只会读书的老师，从来没有编写过工程化的项目。
user-0 提问: 小鱼油日常求助

回复:
user: user-0
content: 引用 6 楼 N-n-N的回复:如果没有 看看更改选项有没有对 w和其他之类的 然后如果打不开要新建一个 ？？？？？？

user: user-1
content: 引用 4 楼 m0_46570923 的回复:为什么txt文件中一直什么都没有 改了那个问题之后，然后运行之后再去看你输入的文件

user: user-0
content: 为什么txt文件中一直什么都没有

user: user-0
content: 真丢人同样的问题遭遇两遍~！~~！

user: user-0
content: 十分感谢你！每回都帮我解决问题！都不知道该怎么感谢你！

user: user-1
content: if ((fp = fopen(filename, "w") != NULL)) 改成如下： if ((fp = fopen(filename, "w")) != NULL)  注意括号的位置。 因为!=的优先级高于=
user-0 提问: C语言（有关背单词系统的）求助大神！！！

回复:
user: user-1
content: 你百度一下怎么在C里面获取当前时间，还有单词以时间存储就按照时间查看单词，并把它们写入txt文件

user: user-0
content: 引用 2 楼 wangdong20的回复:首先获取当前时间，这个简单查一下C的api就知道了。然后该时间下的内容一起写入txt文件 我就是不知道怎么把时间和时间下的内容一起写入txt文件鸭

user: user-1
content: 首先获取当前时间，这个简单查一下C的api就知道了。然后该时间下的内容一起写入txt文件

user: user-2
content: localtime、time函数查一下，还有ctime 如下供参考～         #include <time.h>         char *asctime(const struct tm *tm);        char *asctime_r(const struct tm *tm, char *buf);         char *ctime(const time_t *timep);        char *ctime_r(const time_t *timep, char *buf);         struct tm *gmtime(const time_t *timep);        struct tm *gmtime_r(const time_t *timep, struct tm *result);         struct tm *localtime(const time_t *timep);        struct tm *localtime_r(const time_t *timep, struct tm *result);         time_t mktime(struct tm *tm);
user-0 提问: 哪位大佬会这个

回复:
user: user-0
content: 引用 1 楼 user-2的回复:横向图片看的费劲，估计愿意看的人不多 点一下就是横向的了，我传照片时特意设置正常角度看的，发完它自己变成这样的

user: user-1
content: 内容还挺多的啊

user: user-2
content: 横向图片看的费劲，估计愿意看的人不多
user-0 提问: 关于文件指针

回复:
user: user-1
content: 你的if判断都是fp2呢?那么fp1为什么不判断呢？

user: user-2
content: 那个指的是FILE的成员_ptr为空，不是代表fp1为空，一切都是正常的，你把fp1展开就能看的

user: user-0
content: 好的，谢谢兄弟
user-0 提问: 二叉树的建立问题

回复:
user: user-1
content: 单个跑是怎么理解呢

user: user-0
content: 引用 9 楼 什么名字都被用了的回复:[quote=引用 8 楼 傻猴子的回复:][quote=引用 7 楼 什么名字都被用了的回复:][quote=引用 6 楼 傻猴子的回复:][quote=引用 4 楼 什么名字都被用了的回复:]那你看看你输入有没有问题 不会吧 因为是字符串 所以他就一个个的读取吧[/quote] 字符串肯定一个一个读啊[/quote] 那怎么弄这个图的啊 这个图是两位数的 我就弄不明白了[/quote] 结合你的输入方式来看吧，要么你读成数字，要么你读成字符串后自己手动两个一位合成两位[/quote] 对呀 所以我不会呀 啊哈哈哈哈 两个一位我查了一些资料还是没有思路 那个数字我也不太懂哈哈哈 明天再搞 今天打了一天的代码

user: user-1
content: 引用 8 楼 傻猴子的回复:[quote=引用 7 楼 什么名字都被用了的回复:][quote=引用 6 楼 傻猴子的回复:][quote=引用 4 楼 什么名字都被用了的回复:]那你看看你输入有没有问题 不会吧 因为是字符串 所以他就一个个的读取吧[/quote] 字符串肯定一个一个读啊[/quote] 那怎么弄这个图的啊 这个图是两位数的 我就弄不明白了[/quote] 结合你的输入方式来看吧，要么你读成数字，要么你读成字符串后自己手动两个一位合成两位

user: user-0
content: 引用 7 楼 什么名字都被用了的回复:[quote=引用 6 楼 傻猴子的回复:][quote=引用 4 楼 什么名字都被用了的回复:]那你看看你输入有没有问题 不会吧 因为是字符串 所以他就一个个的读取吧[/quote] 字符串肯定一个一个读啊[/quote] 那怎么弄这个图的啊 这个图是两位数的 我就弄不明白了

user: user-1
content: 引用 6 楼 傻猴子的回复:[quote=引用 4 楼 什么名字都被用了的回复:]那你看看你输入有没有问题 不会吧 因为是字符串 所以他就一个个的读取吧[/quote] 字符串肯定一个一个读啊

user: user-0
content: 引用 4 楼 什么名字都被用了的回复:那你看看你输入有没有问题 不会吧 因为是字符串 所以他就一个个的读取吧

user: user-1
content: 引用 3 楼 傻猴子的回复:[quote=引用 2 楼 什么名字都被用了的回复:]单个跑是怎么理解呢 就比如说50 他是分为5和0读取的[/quote] 你看看输入有没有问题

user: user-1
content: 那你看看你输入有没有问题

user: user-0
content: 各位大神走过路过不要错过

user: user-0
content: 引用 2 楼 什么名字都被用了的回复:单个跑是怎么理解呢 就比如说50 他是分为5和0读取的
user-0 提问: 哪位好心的大佬会这个C语言编程，非常感谢

回复:
user: user-1
content: https://blog.csdn.net/wangdong20/article/details/6779412 我曾今写了个类似的，你可以看着改一下

user: user-0
content: 引用 3 楼 千梦一生的回复:我要是你没兴趣，觉得没意思的就不做了。 像我大学4学期挂了4学期英语一样。 有着时间不如找点感兴趣的 作业啊，没办法啊

user: user-2
content: 我要是你没兴趣，觉得没意思的就不做了。 像我大学4学期挂了4学期英语一样。 有着时间不如找点感兴趣的

user: user-0
content: 引用 1 楼 user-3的回复:好歹自己写一个呀，遇到哪个模块写不出来或出现自己解决不了的错误再来问，这样才能真正掌握。 不会啊做不出来

user: user-3
content: 好歹自己写一个呀，遇到哪个模块写不出来或出现自己解决不了的错误再来问，这样才能真正掌握。
user-0 提问: 关于if语句执行的问题

回复:
user: user-1
content: 看见这代码就头疼，你可以用一下缩进的，代码要有点规范的样子嘛！

user: user-2
content: /* 冗余代码～             else                 c=c; 		*/ 这部分是冗余代码，建议删掉～ 或者这儿改成如下： 		             else                 c=0;

user: user-2
content: #include<stdio.h> int main() {     int a,b,c=0,i,j,p1,p2,n=0;     scanf("%d%d",&a,&b);     for(i=a;i<=b;i++)     {         for(j=2;j<i;j++)         {             if(i%j==0)             {                 c=1;                 break;             }             else                 c=c;         }         if(c==0)         {             p1=i/100;             p2=i%100;             if(p1==16||p1==25||p1==36||p1==49||p1==64||p1==81)             {                 if(p2==1||p2==4||p2==9||p2==16||p2==25||p2==36||p2==49||p2==64||p2==81)                 {                     n=n+1;                     printf("%d\n",i);                 }             }         }         c = 0;  //需要重新初始化      }     printf("%d",n); } 供参考～  需要对c重新初始化

user: user-3
content: #include<stdio.h> #include <stdbool.h>  int main() { 	int a, b, num, num1, num3, k, n=0; 	bool flag; 	scanf("%d%d", &a, &b); 	for ( num1=4; num1<=9; num1++ ) { 		for ( num3=1; num3<=9; num3++ ) { 			num = num1*num1*100 + num3*num3;  	//产生满足条件的4位数 			if ( a<=num && num<=b ) {	//若生成的4位数在指定范围内，则判断是否为素数  				flag = true; 				for( k=2; true && k<num/2; k++) {	//判断是否为素数 					if ( num%k==0 ) {	  						flag = false; 					} 				} 				if ( flag ) {		//	若是素数，则计数并输出  					n++; 					printf("%d\n", num); 				} 			} 		} 	} 	printf("n=%d\n", n); 	return 0; } 可以验证一下这个程序是否正确。

user: user-3
content: #include<stdio.h> int main() { 	int a,b,c=0,i,j,p1,p2,n=0; 	scanf("%d%d",&a,&b); 	for(i=a; i<=b; i++) { 		c = 0; 		for( j=2; j<i/2; j++) {	//判断是否为素数  			if(i%j==0) { 				c = 1; 				break; 			} /*else 				c=c; */ 		} 		if(c==0) { 			p1 = i/100; 			p2 = i%100; 			if (p1==16||p1==25||p1==36||p1==49||p1==64||p1==81) { 				if(p2==1||p2==4||p2==9||p2==16||p2==25||p2==36||p2==49||p2==64||p2==81) { 					n = n+1; 					printf("%d\n",i); 				} 			} 		}  	} 	printf("n=%d\n",n); 	return 0; }  请看看这个程序，修改了个别地方。其实这个算法可以更优化的。

user: user-0
content: 引用 2 楼 自信男孩的回复:		/* 冗余代码～             else                 c=c; 		*/ 这部分是冗余代码，建议删掉～ 或者这儿改成如下： 		             else                 c=0; 		 已解决，谢谢😜
user-0 提问: float a = 0f;

回复:
user: user-1
content: 表示0是float类型的0.

user: user-0
content: 引用 1 楼 真相重于对错 的回复:如果不加f,代表是一个整形 引用 3 楼 轻箬笠 的回复:C++编译器默认处理的是int和double，如果不加后缀的话，会进行强制类型转换，可能会影响最终的数值。 IEEE 754浮点数标准详解  哦，我看了下  确实是那个函数要求float类型  谢谢大佬

user: user-2
content: C++编译器默认处理的是int和double，如果不加后缀的话，会进行强制类型转换，可能会影响最终的数值。 IEEE 754浮点数标准详解

user: user-0
content: 引用 1 楼 真相重于对错 的回复:如果不加f,代表是一个整形  然后有一些函数对类型要求比较严格吗  所以加上f

user: user-3
content: 如果不加f,代表是一个整形

user: user-4
content: 如果这个语句是在变量定义的时候出现，则语句 float a=0f; 可以不要那个“f”。
user-0 提问: 新手日常求助

回复:
user: user-0
content: 引用 6 楼 lstalen的回复:你是不是什么都没有输入 输入了！但是什么都没有？！已经解决问题了但还是很感谢你能够回答我的问题

user: user-1
content: 你是不是什么都没有输入

user: user-2
content: #include <stdio.h> #include<stdlib.h> int main() {     FILE* fp;     char ch, filename[50];     printf("请输入文件名：\n");     scanf("%s", filename);     //if (fp = fopen(filename, "w") == NULL)     if ((fp = fopen(filename, "w")) == NULL)     {         printf("error");         exit(0);     }     ch = getchar();     ch = getchar();     while (ch != '#')     {         fputc(ch, fp);         ch = getchar();//不了解这个的作用     } } 供参考～  注意==的优先级大于=（赋值），因此后面的先结合。

user: user-0
content: 谢谢你告诉我这些东西！十分感谢

user: user-0
content: 引用 2 楼 m0_46570923的回复:[quote=引用 1 楼 user-3的回复:]ch=getchar()就是继续从输入缓存里取字符啊 要不然，你的while(ch!=‘#’)ch的值就不会变，不就死循环了吗？ fputc只是把ch输出到文件，不会改变ch的值，所以需要ch=getchar()来获得下一个字符 听不太懂[/quote] 懂了懂了(￣∀￣)！谢谢！

user: user-0
content: 引用 1 楼 user-3的回复:ch=getchar()就是继续从输入缓存里取字符啊 要不然，你的while(ch!=‘#’)ch的值就不会变，不就死循环了吗？ fputc只是把ch输出到文件，不会改变ch的值，所以需要ch=getchar()来获得下一个字符 听不太懂

user: user-3
content: ch=getchar()就是继续从输入缓存里取字符啊 要不然，你的while(ch!=‘#’)ch的值就不会变，不就死循环了吗？ fputc只是把ch输出到文件，不会改变ch的值，所以需要ch=getchar()来获得下一个字符
user-0 提问: 一个关于英汉电子词典的，麻烦大佬们帮我看下、解决下问题，我怎么搞都不行，谢谢了

回复:
user: user-1
content: int loadSql(data *, char []); void printAction( void ); void dealAction(int); int searchWord(char []); int searchCn(char []); void saveSql( void ); 更一般的函数说明是这样的。

user: user-1
content: int loadSql(data *sql,char path[100]); void printAction(); void dealAction(int action); int searchWord(char word[20]); int searchCn(char cn[80]); void saveSql(); 请在程序的最前面加上函数说明，这样编译的警告错误就没有了。
user-0 提问: 求编程过程

回复:
user: user-1
content: #include <stdio.h> int main(int argc, char** argv) { 	char ch; 	while ( (ch=getchar())!='\n') { 		if ( 'A'<=ch && ch<='Z' ) {			//处理大写字母  			putchar( (ch-'A'+10)%26+'A'); 		} else if ( 'a'<=ch && ch<='z' ) {	//处理小写字母  			putchar( (ch-'a'+12)%26+'a'); 		} else if ( '0'<=ch && ch<='9' ) {	//处理数字  			putchar( ((ch-'0'-4)%10+10)%10+'0'); 		} else {							//处理其他字符  			putchar( ch ); 		} 	} 	return 0; }  请看看这个程序是否满足要求。

user: user-0
content: 用c语言编写 急需
user-0 提问: 数据结构队的出队问题

回复:
user: user-1
content: 引用 3 楼 qq_46411692 的回复:[quote=引用 2 楼 自信男孩的回复:]如果是队列，那么就会有对头，队尾指针。那么有这两个指针控制着队列，所以头部移动不需要关心移动之后的内容。整个队列在不使用时，统一释放～ 那我在移动队头之后他的队列空间会发生变化吗[/quote] 应该不会，你移动的是指针，不会修改空间内容～

user: user-2
content: 没听说过“数据泄露”这种说法。。。

user: user-3
content: 引用 5 楼 qq_46411692 的回复:[quote=引用 1 楼 真相重于对错的回复:]不一定，如果你用链式结构来实现队列的话，可能需要释放。 要是用数组之类的连续存储来做，就不用清楚，只要调整头部即可，就好比删除文件，没必要把文件的内容全部清除掉。 那如果是这样的话那么他的队其实是没有完成出队过程，只是在销毁顺序表的时候把他给销毁了[/quote] 感觉你在钻牛角尖,队列的访问位置只有头尾,那么我只要把头尾改变,不管那个数据还在不在队列的存储当中,我都无法访问到,访问不到不就是不存在了吗?

user: user-0
content: 引用 1 楼 真相重于对错的回复:不一定，如果你用链式结构来实现队列的话，可能需要释放。 要是用数组之类的连续存储来做，就不用清楚，只要调整头部即可，就好比删除文件，没必要把文件的内容全部清除掉。 那如果是这样的话那么他的队其实是没有完成出队过程，只是在销毁顺序表的时候把他给销毁了

user: user-0
content: 引用 1 楼 真相重于对错的回复:不一定，如果你用链式结构来实现队列的话，可能需要释放。 要是用数组之类的连续存储来做，就不用清楚，只要调整头部即可，就好比删除文件，没必要把文件的内容全部清除掉。 那我在移动队头之后他的队列空间会发生变化吗

user: user-0
content: 引用 2 楼 自信男孩的回复:如果是队列，那么就会有对头，队尾指针。那么有这两个指针控制着队列，所以头部移动不需要关心移动之后的内容。整个队列在不使用时，统一释放～ 那我在移动队头之后他的队列空间会发生变化吗

user: user-1
content: 如果是队列，那么就会有对头，队尾指针。那么有这两个指针控制着队列，所以头部移动不需要关心移动之后的内容。整个队列在不使用时，统一释放～

user: user-3
content: 不一定，如果你用链式结构来实现队列的话，可能需要释放。 要是用数组之类的连续存储来做，就不用清楚，只要调整头部即可，就好比删除文件，没必要把文件的内容全部清除掉。
user-0 提问: 求大佬赐教，C语言编译的，求能运行正常的代码和功能

回复:
user: user-1
content: 发给我吧，发出来也行

user: user-0
content: 引用 1 楼 Simple-Soft的回复:这么多功能，可能没有线程的 您好，代码我写完了，就是往文件输入和读取怎么也弄不进去，我可以发你代码，您可以帮我看看吗

user: user-0
content: 引用 2 楼 自信男孩的回复:让别人给你写，你是需要付费的。不要以为别人没事专门写程序～ 我们可以商量商量

user: user-0
content: 引用 2 楼 自信男孩的回复:让别人给你写，你是需要付费的。不要以为别人没事专门写程序～ 付费微信可以啊

user: user-2
content: 让别人给你写，你是需要付费的。不要以为别人没事专门写程序～

user: user-1
content: 这么多功能，可能没有线程的
user-0 提问: 删除字符串中指定元素的小bug

回复:
user: user-1
content: 引用 2 楼 白浅星 的回复:你应该让targetChar这个存储新字符串的数组用另一个变量j来指定它的下标，否则就会因为共用一个i使得targetChar的部分元素跳过了赋值，制造出一个不符合意愿的字符串。 循环部分修改如下：  int j=0; while(i<256){ if(getChar[i]!=target) 	targetChar[j++]=getChar[i]; 	else  		continue; 	i++; }  其实i<256这个条件并不好，应该用getChar[i]!='\0'这个更好 恩，我看到了楼上的回复，确实死循环了，最终如下:  int j=0; while(getChar[i]!='\0'){ if(getChar[i]!=target) 	targetChar[j++]=getChar[i]; 	i++; } targetChar[j]='\0';

user: user-1
content: 你应该让targetChar这个存储新字符串的数组用另一个变量j来指定它的下标，否则就会因为共用一个i使得targetChar的部分元素跳过了赋值，制造出一个不符合意愿的字符串。 循环部分修改如下：  int j=0; while(i<256){ if(getChar[i]!=target) 	targetChar[j++]=getChar[i]; 	else  		continue; 	i++; }  其实i<256这个条件并不好，应该用getChar[i]!='\0'这个更好

user: user-2
content: 把else和continue两条语句都去掉； 因为你continue了，没有i++.那么下次还是第i的和target比较，那不是死循环了吗？
user-0 提问: C语言练习

回复:
user: user-1
content: scandf是让你输入函数，他调用你输入的数去执行的

user: user-2
content: scanf在等你输入数据呢。你需要在键盘上输入    数字1（空格）数字2（空格）数字3（回车）

user: user-3
content: scanf在等待你的输入，另外，输出应该用%lf而非%f

user: user-4
content: 没输入三个数

user: user-5
content: scanf 表示输入，%lf表示双精度浮点数

user: user-5
content: 需要输入三个数才有结果
user-0 提问: 线性表合并问题

回复:
user: user-1
content: 用链表比较节省空间，效率也会比较高。如果用数据会考虑到通过移位或者新建新的空间，新的空间应该是两个表的和。 建议用链表，从空间复杂度和时间复杂度都比较合适。

user: user-2
content: 就是不用创建新到了链表，把两个链表重新连起来

user: user-2
content: 就是合并排序
user-0 提问: 单片机花式灯求各位大佬一个代码用C语言写

回复:
user: user-1
content: 先自己试试，ｗｈｉｌｅ一下，每隔ｔ１时间计数变量加加，当到你需要的种数的时候归零继续加。然后闪烁就先规定每个值是怎么输出的，到了那个值就调用对应的输出
user-0 提问: 学生成绩管理系统

回复:
user: user-1
content: 网上一大堆命令行版的，如果实在需要的话，我可以给你用QT做个带界面的。不过要意思意思的哦。

user: user-2
content: 用结构体数组自己按模块写吧，总不能让别人全写好了自己复制粘贴吧，那样有什么收获呢

user: user-3
content: 一行代码都没有，咋帮
user-0 提问: 请问一下 k 和return (int *)(&tmp) ；是什么意思， 还有别的写法吗？

回复:
user: user-1
content: &tmp真是糟粕。tmp一般被认为是首地址，更像一个右值。还能取个地址是万万没想到的。  不过我试了以下并不报错。 &tmp是一个int(*)[4]类型的。一个指向 4倍int长度数组 的指针。是我见识短浅，这种类型过去少有见识。 不过非常有趣，有一定的实用价值。  所以我对此有个看法了：&tmp这里的tmp已不作首地址意义，而仅是作为数组的指代意义

user: user-2
content: return  tmp; 这样写也是可以的。 因为tmp是数组，数组名就是数组的首地址。

user: user-3
content: tmp没有看到定义啊

user: user-3
content: 返回tmp的地址，别的方式就是直接定义指针，返回指针
user-0 提问: 为何这个函数无法实现对字符串的倒序排序？

回复:
user: user-1
content: 或者申明静态数组 static char q[100];

user: user-1
content: q[100]为局部变量，存储在栈里，函数不能返回局部变量的地址。改为malloc在堆上分配地址。   char *q;     q=(char*)malloc(100*sizeof(char)); 另外， q[t]='\0';
user-0 提问: 请教一个C语言的问题，PTA上刷题遇到的

回复:
user: user-1
content: 转换为整数比较

user: user-2
content: #include <stdio.h> int main() { 	int n, i, h; 	int std, w; 	scanf("%d", &n); 	for(i=0; i<n; i++) 	{	scanf("%d%d", &h, &w); 		std = (h-100)*18; 		if( (w*100) <= (9*std) ) { 			printf("You are tai shou le!\n"); 		} else if( (100*w) >= (11*std)) { 			printf("You are tai pang le!\n"); 		} else { 			printf("You are wan mei!\n"); 		} 	} 	return 0; } 这个程序，用 int 类型。

user: user-3
content: 建议使用浮点数比较方法，楼主用的是整型数比较的方法。  https://blog.csdn.net/u013760665/article/details/89528140

user: user-2
content: 没有发现本质性错误，只能是试试了。 #include <stdio.h> int main() { 	int n, i, h; 	double std, w; 	scanf("%d", &n); 	for(i=0; i<n; i++) 	{	scanf("%d%lf", &h, &w); 		std = (h-100)*1.8; 		if( w <= 0.9*std ) { 			printf("You are tai shou le!\n"); 		} else if( w >= 1.1*std ) { 			printf("You are tai pang le!\n"); 		} else { 			printf("You are wan mei!\n"); 		} 	} 	return 0; }
user-0 提问: c语言pow函数

回复:
user: user-0
content: 引用 1 楼 真相重于对错的回复:二元运算符 % 产生以第二操作数整除第一操作数的余数（经一般算术转换后；注意各操作数的类型必须都为整型类型）。若商 a/b 能以结果类型表示，则 (a/b)*b + a%b == a。若第二操作数为零，则行为未定义。若商 a/b 不能以结果类型表示，则 a/b 和 a%b 的行为均未定义（这意味着，补码系统上 INT_MIN%-1 为未定义）。 懂了，谢谢兄弟

user: user-1
content: 二元运算符 % 产生以第二操作数整除第一操作数的余数（经一般算术转换后；注意各操作数的类型必须都为整型类型）。若商 a/b 能以结果类型表示，则 (a/b)*b + a%b == a。若第二操作数为零，则行为未定义。若商 a/b 不能以结果类型表示，则 a/b 和 a%b 的行为均未定义（这意味着，补码系统上 INT_MIN%-1 为未定义）。
user-0 提问: 求助 6-17 长整数转化成16进制字符串 (10分)

回复:
user: user-1
content: 大佬牛逼牛逼啊。

user: user-2
content: 可以取巧 void f( long int x, char *p ) {     if(x>=0)     {         printf("%X",(unsigned)x);     }     else     {         x=-x;         printf("-%X",(unsigned)x);     } }
user-0 提问: 求大佬指点我一下函数

回复:
user: user-1
content: 3题，自己可以在PC上试一下。n > 2执行，因此func(3)即f(2) + f(1)执行else即，2+2，最后是4.  4题， 由于C函数内不能再定义函数,C函数的存储类型只能是静态的或外部的之一。若定义函数时不指定存储类型是静态的,则它的存储类型就是外部的(extern),即函数允许被程序的其它函数调用。所以解答是extern;(网上down下来的，自己完全可以自己先去查查）  9题，自己一样可以试试。
user-0 提问: 求大佬帮我瞅瞅这道c语言的题目，太难了，是在educoder上运行的，真心不会做

回复:
user: user-1
content: 第一关：  #include  <stdio.h> #define ARR_SIZE 30 /************Begin***********/ //此处加上输入学生信息的函数声明 int PrintArr(float *score, long *num); /************End*************/   int main(void) {     int n;     float score[ARR_SIZE];     long num[ARR_SIZE];     printf("Please enter num and score until score<0:\n");      /************Begin***********/     //此处加上函数调用     n = PrintArr(score, num);      /************End*************/     printf("Total students:%d\n", n);      return 0; }  int PrintArr(float *score, long *num) {     int i = 0, n = 0;      while (1)     {          scanf("%ld%f", &num[i], &n);         if (n >= 0)         {             score[i] = n;             i++;             if (i>=ARR_SIZE)                 break;         }         else         {             break;         }     }      return i;  }   第二关：自己写吧，思路如下 1. 2 声明两个变量作为计数器， 比如m = 0; x = 0; 遍历数组，如果成绩小于60，计数器 m++;同时打印学号; 如果成绩大于等于60，计数器 x++,同时打印学号。数组遍历完成后打印 m, x。 3. 声明一个临时int temp[5], 然后就是遍历数组加判断了，  if (score[i] < 60)     temp[0]++; else if (score[i] >= 60 && score[i] < 70)     temp[1]++; else if (score[i] >= 70 && score[i] < 80)     temp[2]++; else if (score[i] >= 80 && score[i] < 90)     temp[3]++; else if (score[i] >= 90 && score[i] < 100)     temp[4]++;  然后各分数段百分比： temp[0] / 30 * 100  其它类推
user-0 提问: 我是萌新，求大佬帮忙

回复:
user: user-0
content: 引用 2 楼 user-3的回复:#include <stdio.h>  int main() { 	int ch1=0, ch2=0, ch;  	int num;      	ch = ch1 =ch2 =0; 	while( (ch=getchar())!='\n') { 		ch2 = ch1;			//保存号码倒数第二数字  		ch1 = ch;			//保存租后一个数字  	} 	printf("%c,%c\n",ch1, ch2); 	num = ((ch2-'0')*10 + ch1-'0') % 3; 	printf("现在是第 %d 组\n", num==0 ? 3: num ); 	return 0; } 纯C语言的代码，请测试。 多谢大佬！！！

user: user-1
content: 引用 3 楼 sometimegy 的回复:[quote=引用 2 楼 user-3的回复:]#include <stdio.h>  int main() { 	int ch1=0, ch2=0, ch;  	int num;      	ch = ch1 =ch2 =0; 	while( (ch=getchar())!='\n') { 		ch2 = ch1;			//保存号码倒数第二数字  		ch1 = ch;			//保存租后一个数字  	} 	printf("%c,%c\n",ch1, ch2); 	num = ((ch2-'0')*10 + ch1-'0') % 3; 	printf("现在是第 %d 组\n", num==0 ? 3: num ); 	return 0; } 纯C语言的代码，请测试。 多谢大佬！！！[/quote]  感觉有点缺失，参考这个 https://blog.csdn.net/yingzinanfei/article/details/54893394 一般涉及用户输入的最好考虑下各种失败情况，至少验证下是不是手机号。  实际使用的时候坑一定更多...

user: user-2
content: 代码如下:  #include <iostream> using namespace std;  int main() { 	char name[50]; 	int i=0; 	int num;    cout << "请输入手机号:"; 	cin>>name; 	while(name[i])++i; 	num=name[i-1]-48; 	num+=(name[i-2]-48)*10; 	cout<<"现在是第"; 	switch(num%3) 	{ 		case 0:cout<<"三组"<<endl;break; 		case 1:cout<<"一组"<<endl;break; 		case 2:cout<<"二组"<<endl;break; 	}    return 0; }  思路是，输入一个字符串代表手机号，然后找到字符串的末尾，while之后，i就代表着'\0'所在的位置，那么后两位自然就是i-1和i-2了，将他们加到整型变量num上，之后就对num进行取余操作，用switch来分支输出就可以完成该题了

user: user-3
content: #include <stdio.h>  int main() { 	int ch1=0, ch2=0, ch;  	int num;      	ch = ch1 =ch2 =0; 	while( (ch=getchar())!='\n') { 		ch2 = ch1;			//保存号码倒数第二数字  		ch1 = ch;			//保存租后一个数字  	} 	printf("%c,%c\n",ch1, ch2); 	num = ((ch2-'0')*10 + ch1-'0') % 3; 	printf("现在是第 %d 组\n", num==0 ? 3: num ); 	return 0; } 纯C语言的代码，请测试。
user-0 提问: inline函数是在什么时候被展开的

回复:
user: user-1
content: 内联函数与宏定义区别   （1）内联函数在编译时展开，宏在预编译时展开；   （2）内联函数直接嵌入到目标代码中，宏是简单的做文本替换；   （3）内联函数有类型检测、语法判断等功能，而宏没有；   （4）inline函数是函数，宏不是；   （5）宏定义时要注意书写（参数要括起来）否则容易出现歧义，内联函数不会产生歧义；

user: user-1
content: 编译的时候就展开了，跟宏一样展开，只是inline函数展开也会做参数检查什么的。
user-0 提问: 请教C语言结构体的一个问题，太难了啊啊啊！！！

回复:
user: user-1
content: #include <stdio.h>  struct studentinfo {     int score;     struct studentinfo* next; }st1,st2,st3;  void Print_Score(struct studentinfo *st1) {     printf("st1.score = %d \n",st1->score);     printf("st2.score = %d \n",st1->next->score);     printf("st3.score = %d \n",st1->next->next->score); }  int main() {     st1.score =100;     st2.score = 98;     st3.score = 96;     st1.next = &st2;     st2.next = &st3;     st3.next = NULL;     Print_Score(&st1);     return 0; } 供参考～  Print_Score函数的形参类型在哪里声明的？

user: user-2
content: student 应该是studentinfo

user: user-3
content: 就是个链表嘛。 printf("st3.score = %d \n",st1->next->score); ==》》printf("st3.score = %d \n",st2->next->score);