Mxode/CSDN-C_Language-2013_2023 huggingface dataset:
user-0 提问: 编写程序

回复:
user: user-1
content: 参考程序给你，已运行通过~  #include<iostream> #include<stdlib.h> using namespace std;  struct A { 	int date; 	A *next; };  void main() { 	A A1,A2,A3,A4,*head,*p,*q; 	cout << "创建一个链表" << endl; 	cin >> A1.date; 	cin >> A2.date; 	cin >> A3.date; 	cin >> A4.date;  	head=&A1; 	A1.next=&A2; 	A2.next=&A3; 	A3.next=&A4; 	A4.next=NULL; 	p=head; 	int x; 	cout << "请输入需要删除的值" << endl; 	cin >> x; 	int number=1; 	int a=0; 	int j; 	while(p!=NULL) 	{ 		if(p->date!=x) 		{ 			number=number+1; 			p=p->next; 		} 		else 		{ 			p=p->next; 			a++; 			cout << "被删除的链表为第"<<number<<"个" << endl;  			//删除链表中的有X值的节点 			p=head; 			int i=1; 			j=number-1; 			while(i>0&&p->next) 			{ 				if(i==j) 					break; 				p=p->next; 				i++; 			} 			q=p->next; 			p->next=q->next; 			number--; 		} 	}  	if(a==0) 	{ 		cout << "该链表中没有和X值相同的元素" << endl; 	}  	p=head; 	cout << "删除后的链表中为：" << endl; 	while(p!=NULL) 	{ 		cout << p->date << endl; 		p=p->next; 	} 	system("pause"); 	delete[]p;  }
user-0 提问: 求大神帮过

回复:
user: user-0
content: （二）超市总营业额分析程序 要求：  输出每天的销售记录，包括：  ①每笔销售记录存储3个数据，例如：得力固体胶 2 2。 ②它们代表：品名，数量（个） 单价（元）。 ③将每天的销售记录通过文件进行存储。 ④每周末进行盘存，从文件读取数据，并汇总出周销售额。 就是这个题目
user-0 提问: 使用灰狼优化算法对svr进行参数寻优，做回归预测，使用matlab编写，工具包是libsvm,预测结果却是一条直线

回复:
user: user-1
content: 现在结果怎么样？？？

user: user-2
content: 我也是，你不是一个人。

user: user-0
content: 有一点平衡了。。。。。。。。
user-0 提问: devc++运行C语言程序中sleep()函数。

回复:
user: user-1
content: 你好  会写操作系统的c语言代码吗

user: user-0
content: 引用 6 楼 user-2 的回复:头文件 #include<Windows.h> 函数  Sleep(1000); 或者你试试double做参数 1.0/5 1.0/5000 我刚才试了一下，循环直接结束了，估计还是不识别吧TVT

user: user-0
content: 引用 5 楼 weixin_40514465 的回复:你好  会写操作系统的c语言代码吗 可能不太行orz我c才刚入门TVT

user: user-2
content: 头文件 #include<Windows.h> 函数  Sleep(1000); 或者你试试double做参数 1.0/5 1.0/5000

user: user-0
content: 引用 3 楼 user-2 的回复:sleep的参数就是毫秒级的，sleep（1） 休眠1ms 我的是秒级TvT，我找的类似的参考程序运行出来是毫秒级，但我的运行出来是秒级。

user: user-2
content: sleep的参数就是毫秒级的，sleep（1） 休眠1ms

user: user-0
content: 引用 1 楼 user-2 的回复:1/5==0  1/5000==0 那请问我想把时间降到毫秒级有方法嘛？

user: user-2
content: 1/5==0  1/5000==0
user-0 提问: C语言

回复:
user: user-1
content: 这不是链表，是线性数组；链表和线性数组有很大区别，链表中的节点内存不一定相邻，但是线性数组内存是连续的

user: user-2
content: 你这是结构体数组

user: user-3
content: 链表要包含数据和指针，指针用于指向下一个结构，但是你的Student只有数据没有指针，因此不能算是链表
user-0 提问: 随机函数

回复:
user: user-1
content: 引用 3 楼 尼玛，了$ 的回复:为啥，不能在最后加上吗 这算是第二个问题,不为啥，要改也可以，就这几句代码，这设计的本来就不是可以随意生成的结构。

user: user-0
content: 为啥，不能在最后加上吗

user: user-0
content: 为啥，不能在最后加上吗

user: user-1
content: 肯定不能了，这代码都是写死了，只找0-8
user-0 提问: 函数调用

回复:
user: user-1
content: 先学学语文，语句都不通顺，还让别人怎么回答

user: user-2
content: 假如百度是一个函数，你输入查找的内容作为参数，他返回值是搜索结果，你我他每次搜索就是一次调用，每一次搜索就会返回结果到你的页面

user: user-3
content: 还是应该多看教材吧。似乎函数最基本的东西都没理解。 一个函数每一次调用都会返回调用它的函数中。也就是在哪里调用的返回到哪里，而不是在多个地方多次调用却返回同一个地方。

user: user-2
content: 每一次调用都会返加，当时的返回值就会返回到调用他的地方。
user-0 提问: C语言问题

回复:
user: user-1
content: 不适用strcat，那就自己实现一下：

user: user-2
content: void len_cat(char *dest, int destLen, char *src) { 	int len1 = strlen(dest); 	int len2 = strlen(src); 	if (len1 + len2 < destLen) { 		memcpy(dest+len1, src, len2); 		dest[len1 + len2] = '\0'; 	} 	else { 		memcpy(dest+len1, src, destLen - len1 - 1); 		dest[destLen - 1] = '\0'; 	} }

user: user-0
content: 引用 3 楼 轻箬笠的回复:void len_cat(char *dest, int destLen, char *src) { 	int len1 = strlen(dest); 	int len2 = strlen(src); 	if (len1 + len2 < destLen) { 		memcpy(dest+len1, src, len2); 		dest[len1 + len2] = '\0'; 	} 	else { 		memcpy(dest+len1, src, destLen - len1 - 1); 		dest[destLen - 1] = '\0'; 	} } 好的，谢谢了，我去试试

user: user-0
content: 引用 4 楼 自信男孩的回复:不适用strcat，那就自己实现一下： 好的，我去试试，谢谢了

user: user-0
content: 引用 1 楼 离水的鱼儿的回复:你实现一个strcat不就好了。。。。 无非就是对字符指针的操作 int mystrcat(char* str1，int str1len,char *str2,int str2len,char *des，int *deslen) 判断str1加str长度是否大于deslen的长度 不大于就把str1和str2拷贝到des中 Deslen=str1+str2 手机敲的。。。。。 好的，我去试试，谢谢😜

user: user-3
content: char* a = "asd";     char* b = "edf";       int lena = strlen(a);     int lenb = strlen(b);     int lenAll = lena + lenb;      char* all = malloc((lenAll+1)*sizeof(char));     memset(all, 0, (lenAll+1)*sizeof(char));      sprintf(all, "%s%s", a,b);      printf(all); //不是一个题  你可以借鉴这种方法

user: user-4
content: 你实现一个strcat不就好了。。。。 无非就是对字符指针的操作 int mystrcat(char* str1，int str1len,char *str2,int str2len,char *des，int *deslen) 判断str1加str长度是否大于deslen的长度 不大于就把str1和str2拷贝到des中 Deslen=str1+str2 手机敲的。。。。。
user-0 提问: 改程序，这个c++能改成c语言程序吗

回复:
user: user-1
content: #include <stdio.h>  void swap(int a[], int i, int j)  { 	int temp = a[i]; 	a[i] = a[j]; 	a[j] = temp; }  void print(int a[], int n) { 	int m, b, c, d;  	m = (a[0] + a[1] + a[2]); 	b = (a[2] + a[3] + a[4]); 	c = (a[4] + a[5] + a[6]); 	d = (a[6] + a[7] + a[0]);  	if (m == b && b == c && c == d && d == m) 	{ 		//cout << "满足" << endl; 		//cout << a[0] << " " << a[1] << " " << a[2] << endl; 		//cout << a[7] << " " << 0 << " " << a[3] << endl; 		//cout << a[6] << " " << a[5] << " " << a[4] << endl;  		printf("满足\n"); 		printf("%d %d %d\n", a[0], a[1], a[2]); 		printf("%d 0 %d\n", a[7], a[3]); 		printf("%d %d %d\n", a[6], a[5], a[4]); 	}  }  void perm(int a[], int p, int q) { 	int i; 	if (p == q) 	{ 		print(a, q + 1);  	} 	else 		for (i = p; i <= q; i++) 		{ 			swap(a, p, i); 			perm(a, p + 1, q); 			swap(a, p, i); 		}  }  int main() { 	int a[8] = { 2,3,8,1,4,5,7,6 }; 	perm(a, 0, 7);  }

user: user-2
content: 供参考，满意请结帖给分#include <stdio.h>  void swap(int a[], int i, int j)  { 	int temp = a[i]; 	a[i] = a[j]; 	a[j] = temp; }  void print(int a[], int n) { 	int m, b, c, d;  	m = (a[0] + a[1] + a[2]); 	b = (a[2] + a[3] + a[4]); 	c = (a[4] + a[5] + a[6]); 	d = (a[6] + a[7] + a[0]);  	if (m == b && b == c && c == d && d == m) 	{ 		printf("满足\n"); 		printf("%d %d %d\n", a[0], a[1], a[2]); 		printf("%d 0 %d\n", a[7], a[3]); 		printf("%d %d %d\n", a[6], a[5], a[4]); 	}  }  void perm(int a[], int p, int q) { 	int i; 	if (p == q) 	{ 		print(a, q + 1);  	} 	else 		for (i = p; i <= q; i++) 		{ 			swap(a, p, i); 			perm(a, p + 1, q); 			swap(a, p, i); 		}  }  int main() { 	int a[8] = { 2,3,8,1,4,5,7,6 }; 	perm(a, 0, 7); 	return 0; }
user-0 提问: 菜鸟求助

回复:
user: user-1
content: 其实电脑开机后物理内存的每个字节中都有值且都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。

user: user-2
content: 一般情况会赋初始值

user: user-0
content: 引用 9 楼 轻箬笠的回复:数值问题，楼上都已经回答了。一般申明数组最好初始化为0，就算没必要，也初始化下，这是个好习惯。如果没有初始化数组，使用前，也请用memset清零。 谢谢各位大佬了

user: user-3
content: 数值问题，楼上都已经回答了。一般申明数组最好初始化为0，就算没必要，也初始化下，这是个好习惯。如果没有初始化数组，使用前，也请用memset清零。

user: user-4
content: 初始化数组   引用 5 楼 动力风暴 的回复:如果你对数组没有初始化，没有赋值的data[5] 和 data[6]就是内存残留值。

user: user-5
content: 如果是定义结构体数组时只给前面部分元素初始化，则后面未给初始值的结构体也依然会初始化为0值，不管这个数组是静态还是不是是静态的。但如果在定义时所有元素都没有显示初始化，非静态类型的数组，则各元素的成员变量则不被初始化，其值为随机值，而静态的则会全部初始化为0值（全局的也是静态的）。 到于这个提问，说定义了...，放了...进去...这个问题似乎表述有点...我个人觉得不好理解是这个“放进去”是什么时候做的。如果是定义数组的同时，则是初始化，否则，不是。

user: user-6
content: 即静态区会初始化，动态区则不会

user: user-7
content: 如果你对数组没有初始化，没有赋值的data[5] 和 data[6]就是内存残留值。

user: user-8
content: 这个看你在哪里定义的了，如果你是定义的全局变量，那么会自动初始化为空  如果是定义的局部变量，那么会是内存里的垃圾数据，无法读取  满意的话请结贴给分。

user: user-9
content: 定义结构体后，一般情况会赋初始值。  如果没有赋初始值也会做清空处理。 当前边的赋值了，后边的没有赋值时，即为空。 当然如果你只定义没有赋值和清空操作，那后边的可能为垃圾内容。。。

user: user-9
content: 定义结构体后，一般情况会赋初始值。

user: user-9
content: 定义结构体后，一般情况会赋初始值。
user-0 提问: c语言实训

回复:
user: user-1
content: 既然是初级的，那就做个控制台程序呗

user: user-2
content: 如果是学完初级的C语言，应该只是一个简单的命令行形式的C代码，这个你使用VS或者VI都能搞定。 如果是做一个系统那就复杂了，数据库 图形化等都需要用到。
user-0 提问: 求大神指教

回复:
user: user-1
content: #include <stdio.h> #include <math.h> #define N 4  int check(int m) { 	int temp = m; 	int t=0, sum = 0; 	while (temp > 0) 	{ 		t = temp % 10;   //m的最后一位 		temp /= 10;      //去掉最后一位 		 		sum += pow(t, N); //四次方求和 	} 	return sum == m;      }  int main() { 	int i; 	for ( i = 1000; i < 10000; i++) 	{ 		if (check(i)) 			printf("%d\t", i); 	} } //1634 = 1^4 + 6^4 + 3^4 + 4^4

user: user-2
content: int tsSXHBitsCntGet(int iNum) { 	int iBitsCnt = 0; 	int iNumber = iNum; 	int iRemainder = 0; 	int iQuotNum = 0; 	 	while(1) 	{ 		iRemainder = iNumber%10; 		iQuotNum = iNumber/10; 		if(iRemainder == 0 && iQuotNum == 0) 		{ 			break; 		} 		iBitsCnt++; 		iNumber = iQuotNum; 	} 	 	return iBitsCnt; }  int  tsSXHCheck(int iNum) { 	int iBitsCnt = tsSXHBitsCntGet(iNum); 	int iNumber = iNum; 	int iRemainder = 0; 	int iCalcNum = 1; 	int iTotalNum = 0; 	 	int i = 0; 	int j = 0; 	 	for(i = 0;i<iBitsCnt;i++) 	{ 		iRemainder = iNumber%10; 		iCalcNum = 1; 		for(j = 0;j<iBitsCnt;j++) 		{			 			iCalcNum = iCalcNum * iRemainder; 		} 		iTotalNum += iCalcNum; 		iNumber = iNumber/10; 	} 	 	if(iTotalNum == iNum) 	{ 		printf("shui xian hua shu ju is [%d] \n",iNum); 	} }
user-0 提问: 菜鸟程序字符串倒输出

回复:
user: user-1
content: 递归函数：逆序输出字符串；根据栈的特性：先进后出，所以输出的也是逆序的

user: user-2
content: 简单来说，是递归； 首先说指针的类型，是为了表明指针所指向的内容的类型，也就是所指向那块空间的大小，当指针变量加减整数时，可以理解成越过若干个那么大的空间。 char *a 作为一个字符型指针，指向的是字符，a+1是在a的地址上，向后越过1个字符所占的空间，从而指向了后一个字符（数组在声明时是连续的空间）；多次递归调用后，a指向了数组的结束符\0,返回0，打印上一级的字符
user-0 提问: c语言 怎么比较两个储存在字符数组里的日期

回复:
user: user-0
content: 引用 8 楼 smwhotjay的回复: 我一般设计把比较时间丢给数据库里执行。 c语言怎么做啊…能不能教教我呀大佬

user: user-0
content: c语言怎么做啊…能不能教教我呀大佬

user: user-1
content: 我一般设计把比较时间丢给数据库里执行。

user: user-2
content: char s1[]="2019/6/12"; char s2[]="2019/10/1"; int y,m,d,r; char t1[40]; char t2[40]; sscanf(s1,"%d/%d/%d",&y,&m,&d); sprintf(t1,"%04d/%02d/%02d",y,m,d); sscanf(s2,"%d/%d/%d",&y,&m,&d); sprintf(t2,"%04d/%02d/%02d",y,m,d); r=strcmp(t1,t2); if (r>0) {     printf("%s >  %s\n",s1,s2); } else if (r<0) {     printf("%s <  %s\n",s1,s2); } else {     printf("%s == %s\n",s1,s2); }

user: user-0
content: 引用 5 楼 lin5161678的回复:[quote=引用 1 楼 赵4老师 的回复:] 用sscanf将月和日提取出来，用sprintf输出为不够前面补0的两个字符 然后用strcmp直接比较结果字符串 取出来就能直接比较了  不过你的做法写起来的确方便写起来方便  [/quote] 感觉用sscanf会更方便一点吧 我那个方法得循环好多次 时间复杂度会高一些吧…

user: user-3
content: 引用 1 楼 赵4老师 的回复:用sscanf将月和日提取出来，用sprintf输出为不够前面补0的两个字符 然后用strcmp直接比较结果字符串 取出来就能直接比较了  不过你的做法写起来的确方便写起来方便

user: user-0
content: 引用 3 楼 636f6c696e的回复:sscanf(%d/%d/%d, year, month, date); if year if month if date  嗯嗯 我中午去试一下

user: user-4
content: sscanf(%d/%d/%d, year, month, date); if year if month if date

user: user-0
content: 引用 1 楼 赵4老师的回复:用sscanf将月和日提取出来，用sprintf输出为不够前面补0的两个字符 然后用strcmp直接比较结果字符串 谢谢大佬，我中午去试一下。我用的方法是强行把s1和s2给分解成年月日，然后比较月和日，如果只有一位就前边补0 然后用strcat给连起来

user: user-2
content: 用sscanf将月和日提取出来，用sprintf输出为不够前面补0的两个字符 然后用strcmp直接比较结果字符串

user: user-5
content: 7l已经给你答案了

user: user-6
content: 用strtok，然后用  引用 7 楼 赵4老师 的回复:char s1[]="2019/6/12"; char s2[]="2019/10/1"; int y,m,d,r; char t1[40]; char t2[40]; sscanf(s1,"%d/%d/%d",&y,&m,&d); sprintf(t1,"%04d/%02d/%02d",y,m,d); sscanf(s2,"%d/%d/%d",&y,&m,&d); sprintf(t2,"%04d/%02d/%02d",y,m,d); r=strcmp(t1,t2); if (r>0) {     printf("%s >  %s\n",s1,s2); } else if (r<0) {     printf("%s <  %s\n",s1,s2); } else {     printf("%s == %s\n",s1,s2); }  直接用y, m, d比较就可以了吧，再转成字符串是不是就走弯路呢

user: user-7
content: char s1[]="2019/6/12", char s2[]="2019/10/1"; char *p; int year1, month1, day1; int year2, month2, day2;  p = strtok(s1, "/"); if (p) year1 = atoi(p); p = strtok(NULL, "/"); if (p) month1 = atoi(p); p = strtok(NULL, "/"); if (p) day1 = atoi(p);  p = strtok(s2, "/"); if (p) year2 = atoi(p); p = strtok(NULL, "/"); if (p) month2 = atoi(p); p = strtok(NULL, "/"); if (p) day2 = atoi(p);
user-0 提问: C语言中i++与++i的区别

回复:
user: user-1
content: 值计算结果不同 副作用相同

user: user-2
content: 原则上，x=表达式，是把表达式的计算结果赋给x i++表达式，表达式是取i的当前值作为计算结果，然后再i自增1 ++i表达式则是先i自增1，然后再取i的最新值作为表达式的计算结果

user: user-3
content: 1、前置与后置++的操作数都必须是一个左值（关于左值、右值，请查看C/C++标准相关内容）。这里之所以提“左值”，不提“变量”，请看如下示例： 有 int i = 0; 则 ++i、i++明显合法，因为i是变量，但表达式++(++i)或(++i)++也均合法，但++(i++)、(i++)++非法。因为表达式++i是一个左值，而i++是一个右值。当然变量是一个左值。 2、前置与后置++运算均会让其操作数自加1，其区别在于前置、后置++运算符与操作数所构造的表达式的值不同。如： 有 int i = 0; 则 表达式++i的值为1，而表达i++的值为0。即所谓，表达式++i的值为i自加之后i的值，而i++的值则为i自加之前的i的值。但不管是前置还是后置，i均会自加1。 所以int型变量初值i等于0时，如果分别有 int j=++i; 和 int j=i++; 则变量j的值分别为1和0。 3、尽管++运算符的操作一般为整数型数据类型，但并不是不可以是非整数型。如 float f = 0.3; float ff = ++f; 也合法，以上语句执行后，ff的值为1.3，但这明显不是一种值得推荐的计算。 4、在计算过程中，表达式++i与变量i对应同一段内存空间，而表达式i++与变量i分别有自己的内存空间。另外，前置++运算效率要高于后置++，其中一个很重要原因是前置++计算既节约了内存空间，也减少的内存空间分配与回收的过程，当然，一般情况下，这种内存空间与CPU运算时间的节约可以忽略。 表达式++i与变量i对应同一段内存空间，也是表达式++i是一个左值表达式的原因。 5、不要试图对右值（如常量）表达式进行++运算。也不要做如下运算： unsigned int i = 0, j; j = --i; 以上语句，在编译、运行时均不会报错，但语句执行后，变量i、j值明显不会是-1。
user-0 提问: 求助大神，谢谢大神

回复:
user: user-1
content: 这个得做一个界面，然后加入菜单，设置好那些参数后，做对应的操作就好啦。可以用MFC来做

user: user-2
content: 不会mfc qt就用控制台做，根据他描述的过程进行设计就好了呀，逻辑也不难

user: user-0
content: 引用 1 楼 此生注定孤独的回复:这个得做一个界面，然后加入菜单，设置好那些参数后，做对应的操作就好啦。可以用MFC来做 我是一点都不会，想要代码

user: user-3
content: 控制台让用户手输入就可以
user-0 提问: 关于网络编程中通讯socket的数量控制

回复:
user: user-1
content: 使用fork产生子进程时，系统将父进程打开的所有文件制作一份拷贝给子进程。在子进程中将iConnSocket关掉，只是删去子进程打开文件表中的相应表项，但因为父进程仍在使用iConnSocket，系统打开文件表中不会将iConnSocket删去。仅当父进程最后结束时关闭iConnSocket，该描述符才从系统打开文件表中删除，真正地被关掉。

user: user-2
content: 引用 6 楼 slwj 的回复：[quote=引用 5 楼 离水的鱼儿 的回复:] 追根究底就是防止某些资源没有被释放，导致垃圾空间，尤其是做网络，当连接数过多的时候资源也会消耗的很大，所以要注意资源释放的问题 多次释放会不会引出问题来？[/quote]多次释放会释放失败，会反回一个错误代码，就和释放空指针一个道理，你可以在释放之前判断一下资源是否有效，如同释放指针 判断是不是为空再释放。

user: user-0
content: 引用 7 楼 轻箬笠 的回复:fork是克隆的意思吧。 也就是说，调用fork之后，子进程和父进程的变量指向的内存都不一样了吧。所以需要分别释放吧。  “一个进程调用fork（）函数后，系统先给新的进程分配资源，例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中，只有少数值与原来的进程的值不同。相当于克隆了一个自己。”  释放是应该的，本来一次释放就可以了，我的意思是多次释放，会不会出错？

user: user-3
content: Linux里所有资源都可叫文件，文件是可以同时共享打开多次的，打开多次就要关闭多次。

user: user-4
content: fork是克隆的意思吧。 也就是说，调用fork之后，子进程和父进程的变量指向的内存都不一样了吧。所以需要分别释放吧。  “一个进程调用fork（）函数后，系统先给新的进程分配资源，例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中，只有少数值与原来的进程的值不同。相当于克隆了一个自己。”

user: user-0
content: 引用 5 楼 离水的鱼儿 的回复:追根究底就是防止某些资源没有被释放，导致垃圾空间，尤其是做网络，当连接数过多的时候资源也会消耗的很大，所以要注意资源释放的问题 多次释放会不会引出问题来？

user: user-5
content: 虎头蛇尾是俗人的习惯， 有始有终是君子的操守。

user: user-2
content: 追根究底就是防止某些资源没有被释放，导致垃圾空间，尤其是做网络，当连接数过多的时候资源也会消耗的很大，所以要注意资源释放的问题

user: user-0
content: 子进程有2处地方，父进程有1处调用 close(iConnSocket);

user: user-6
content: 前者close 后有return 所以这说明永远只有一个close执行了

user: user-7
content: 我觉得就是为了防止资源没有释放，多关闭几次。
user-0 提问: 在for死循环中，不断用getchar读取键盘输入字符串流 试编程，解析字符串中含有AA开头，后面跟4个数字的串，

回复:
user: user-0

user: user-0
content: 挺好的   有一点是不可以循环输入

user: user-1
content: #include <stdio.h> #include <ctype.h> #include<string.h>   #define MAX_NUM_LEN     4 int main() {     char ch, rch = 0, str[8];     int i = 0, flag = 0, num;      while ((ch = getchar()) != '\n') {         if (ch == 'A' && rch == 'A') {             flag = 1;             continue;         }         rch = ch;         if (flag && i < MAX_NUM_LEN) {             if (ch != '-' && !isdigit(ch))                 continue;             str[i++] = ch;         }         if (i >= MAX_NUM_LEN) {             str[i] = 0;             sscanf(str, "%d", &num);             printf("num = %d\n", num);             flag = 0;             i = 0;         }     }      return 0; }  供参考～

user: user-0
content: #include<stdio.h> int main() {	int zhuan_shu_zi(int d); 	int j=0,k,s[4]; 	char R_data; 	short Result; 	for(;;) 	{        if(R_data=='A') 		   j++; 	   if(j==2) 	   { 		   j=0; 		   for(k=0;k<4;k++) 		   {               s[k]=getchar()-'0'; 		   } 		   if(zhuan_shu_zi(s)) 			   return 0; 	   } 	   else j=0; 	} 	return 0; } int zhuan_shu_zi(int *d) { 	short Result; 	if(d[0]>=0&&d[0]<10&&d[1]>=0&&d[1]<10d[2]>=0&&d[2]<10d[3]>=0&&d[3]<10) 	{ 		Result=(d[0]*1000+d[1]*100+d[2]*10+d[3]); 			if(Result==0) 				return 1; 			else printf("%d\n",Result);  	} 	else 		if(d[0]=='-'-'0'&&d[1]>=0&&d[1]<10d[2]>=0&&d[2]<10d[3]>=0&&d[3]<10) 			{ 				Result=-1*(d[1]*100+d[2]*10+d[3]); 					if(result==0) 						return 1; 					else printf("%d\n",Result);  			}  }

user: user-2
content: 一个多if思路

user: user-2
content: int main() { 	char data,data2,data3,data4,data5,data6; 	int k = 0; 	short results[10]; 	short Result; 	for (;;) { 		data = getchar(); 		if (data=='\n') 		{ 			break; 		} 		if (data == 'A'|| data == 'a') 		{ 			data2 = getchar(); 			if (data2 == 'A' || data == 'a') { 				data3 = getchar(); 				if (data3 =='-'|| (data3 <= '9' && data >= '0' ) ) 				{ 					data4 = getchar(); 					if  (data4 <= '9' && data4 >= '0') 					{ 						data5 = getchar(); 						if (data5 <= '9' && data5 >= '0') 						{ 							data6 = getchar(); 							if (data6 <= '9' && data6 >= '0') 							{ 								if (data3=='-') 								{ 									results[k] = ((data4-'0')*100 + (data5-'0')*10 + (data6 - '0'))*-1; 								} 								else 								{ 									results[k] = (data3 - '0') * 1000 + (data4 - '0') * 100 + (data5 - '0') * 10 + (data6 - '0'); 								} 								k++; 							} 						} 					} 				} 			 			} 		} 	} 	for (size_t i = 0; i < k; i++) 	{ 		if (results[i]>=100&& results[i]<=999) 		{ 			printf("AA0%hd \n", results[i]); 		} 		else 		{ 			printf("AA%4hd \n", results[i]); 		} 		 	} 	 }

user: user-0
content: 求救🆘 急救啊😱 大神们帮帮孩子吧
user-0 提问: 输入五名考生的数据信息（准考证号，姓名，性别，年龄，成绩）并编写函数，通过调用函数实现。1、找出成绩最高的考生信息，并输出。2、按考生成绩从大到小排序

回复:
user: user-1
content: 简单点的话，你就可以用一个结构体数组，这个结构体可以存储准考证号码，姓名，性别，年龄，成绩等信息，然后分别提示用户输入这西恩信息。 通过对比成绩，可以得到一个成家最高的数组元素下标，用一个变量记录这个下标，然后执行相关输出。 至于排序，你通过访问每个元素里的准考证号这个数值来进行排序，比如冒泡排序、计数排序。

user: user-2
content: #include <stdio.h> #include <stdlib.h> #include <string>  #define N 5  typedef struct stul {     char number[10],name[10];     char sex;     unsigned char age;     //int t[10];     //int * max;     int score; }S;  void input(S stud[ ], int n); S get_max_score(S *pstud, int n);   //返回成绩最高的用户信息  void sort(S stud[ ]); void output(S stud[ ]);  int main() {     S student[N], max_stud;     input(student, N);      max_stud = get_max_score(student, N);     printf("%s %s %c %d %d\n", max_stud.number, max_stud.name, max_stud.sex, max_stud.age, max_stud.score);     system("cls");     printf("\n******************成绩最好******************\n");     output(student);     sort(student);     printf("\n\n***********按考生成绩从大到小排序***********\n");     output(student); }  void input(S stud[ ], int n) {     int i,j;     int * max;     for(i=0;i<n;i++)     {         printf("请输入第%d个学生的信息：准考证号,姓名,性别,年龄,成绩:\n",i+1);         //scanf("%s",stud[i].number,stud[i].name,stud[i].sex,stud[i].age,stud[i].score);         scanf("%s %s %c %d %d",stud[i].number,stud[i].name, &stud[i].sex, &stud[i].age, &stud[i].score);         /*         //max=0;         max = NULL;         for(j=0;j<4;j++)         {             scanf("%d",&stud[i].t[j]);             if(stud[j].max > stud[i].max)                 i=j;             max=&stud[i].t[j];         }         stud[i].max = max;         */     } }  S get_max_score(S *pstud, int n) {     int i;     S max_stud;      max_stud = pstud[0];     for (i = 1; i < n; i++)         if (max_stud.score < pstud[i].score)             max_stud = pstud[i];      return max_stud; } void sort(S stud[ ]) {     int i,j,k;     S t;     for(i=0;i<N-1;i++)     {         k=i;         for(j=i+1;j<N;j++)             if(stud[j].score > stud[k].score)                 k=j;         if(k != i)         {             t=stud[i];             stud[i]=stud[k];             stud[k]=t;         }     } } void output(S stud[ ]) {     int i,j;     printf("\n 名次  学号  姓名  性别  年龄  成绩\n");     for(i=0;i<N;i++)     {         printf("%4d %10s %6s %c %d",i+1,stud[i].number,stud[i].name,stud[i].sex,stud[i].age);         /*         for(j=0;j<4;j++)             printf("%6d",stud[i].t[j]);         printf("%8.1f\n",stud[i].max);         */     } }  供参考～

user: user-3
content: 不懂你的t[10]存储什么东东，max你设计是一个指针，在初始化的时候，max没申请内存，指针直接比较大小？  for(j=0;j<4;j++) { scanf("%d",&stud[i].t[j]); if(stud[j].max>stud[i].max)i=j;

user: user-4
content: 每个scanf()后面紧随调用fflush(stdin)或setbuf(stdin,NULL)清空输入区缓存，否则引起混乱
user-0 提问: c语言题目

回复:
user: user-1
content: 首先if (x) y++;这个也是执行的，因为x是3，为真（非0为真，0为假）。所以经过两次自增，最后结果为3.

user: user-2
content: 为啥不是3.... if条件判断成 y++变成2，后面又加了下，变成3

user: user-3
content: 呃这个问题。。。。。 if(x) ｛y++;｝ y=y+1; 是不是这样就能看懂了？
user-0 提问: 新手求回答！

回复:
user: user-1
content: #include<stdio.h>  int main(void) {     int R[4][4],r[4][4],s[4][4];     int i,j,n;     printf("请输入矩阵R:\n");     for(i=0;i<4;i++)     {         for(j=0;j<4;j++)             scanf("%d",&R[i][j]);     }     for(i=0;i<4;i++)         R[i][i]=1;     for (i = 0; i < 4; i++)         for(j=0;j<4;j++)             printf("%d",r[i][j]); //输出矩阵     printf("\n"); } 供参考～

user: user-2
content: for(j=0;j<4;j++) printf("%d",r[i][j]); //输出矩阵  这里少了一个循环嵌套  因该是： for（i=0; i<4; i++） {        for(j=0;j<4;j++)        printf("%d",r[i][j]);     }

user: user-3
content: 我像你大概需要这种效果吧？  #include<stdio.h>  int main() { 	int R[4][4], r[4][4], s[4][4]; 	int i, j, n; 	printf("请输入矩阵R:\n"); 	for (i = 0; i<4; i++) 	{ 		for (j = 0; j<4; j++) 			scanf("%d", &R[i][j]); 	} 	for (i = 0; i < 4; i++) 	{ 		R[i][i] = 1; 		for (j = 0; j < 4; j++) 			printf("%d ", R[i][j]); //输出矩阵 		printf("\n"); 	} 	 	return 0; }

user: user-4
content: 你的代码第二个循环里面出了问题，参考下面的   #include<stdio.h>  int main(void) { int R[4][4],r[4][4],s[4][4]; int i,j,n; printf("请输入矩阵R:\n"); for(i=0;i<4;i++) {   for(j=0;j<4;j++)   scanf("%d",&R[i][j]); }    for(i=0;i<4;i++)       {         R[i][i]=1;         for(j=0;j<4;j++)         printf("%d",r[i][j]); //输出矩阵       }             printf("\n");	 }

user: user-5
content: for (j = 0; j<4; j++) 		printf("%d", r[i][j]); //输出矩阵 你这里循环时，i没有变化
user-0 提问: 求各位大佬帮帮忙 实验周要设计一个程序，平时没怎么学习实验周又和考试周重叠 所以请各位大佬帮帮忙谢谢啦

回复:
user: user-0
content: 引用 3 楼 Chify_w 的回复：你这工作量有点大能给我个联系方式吗 求您帮我看一下代码

user: user-1
content: 你这工作量有点大

user: user-0
content: 可以帮我修改一下代码吗

user: user-2
content: 你这是课程设计啊，代码量有点大。 这里估计没人会专门写一个这，所以你赶紧换题目或者自己写吧   哈哈
user-0 提问: 菜鸟题c语言编写抓交通肇事犯

回复:
user: user-1
content: 这点功能也能写那么多行~~~  #include <stdio.h>  int main() {   for (int i = 0, j, k; j = i * i / 1000, k = i * i % 10, i < 100; i++)     if (j * 1000 + j * 100 + k * 10 + k == i * i && j != k)       printf("%d\n", i * i);    return 0; }

user: user-2
content: 楼上牛，运行得到车牌：7744

user: user-3
content: 前两位相同，后两位相同，没必要四个循环  #include <stdio.h>  int main() { 	int i,j; 	int num = 0; 	int k; 	 	for(i = 1;i<=9;i++) 	{ 		for(j = 0;j<=9;j++) 		{ 			if(i == j) 			{ 				break; 			} 			 			num = i* 1000 + i * 100 + j * 10 + j; 			 			for(k = 30;k< 100;k++) 			{ 				if(k*k == num) 				{ 					printf("che pai hao is  [%d]\n",num); 				} 			} 		} 		 	} 	return 0; }

user: user-4
content: (i != k)

user: user-4
content: #include<stdio.h> /* 问题:一辆卡车违反交通规则，撞人后逃跑.现场有三个人目击事件, 但都没有记住车牌号.只记下车号的一些特征.甲说：牌照的前 两个数字相同；乙说：牌照的后两个数字相同，但与前两个不同 ，丙是位数学家，他说：四位的车号刚好是一个整数的平方。 编程思路:   我们可以用穷举法找到该数。 **/ void main(){  	int i,j,k,temp,flag = 0; 	//i 代表前两位车牌号数字 j代表后两位车牌号 k代表车牌号 	for(i=0;i<=9;i++){  		if(flag) 			break; 		for(j=0;j<=9;j++) 		{ 			if(flag) 				break; 			if(i!=j) 				k=1000*i+100*i+10*j+j; 				for(temp=31;temp<=99;temp++) 					if(temp*temp==k) 					{ 						printf("车牌号是:%d\n",k); 						flag = 1; 						break; 					}  		}  	}   }

user: user-5
content: for(i = 0; i < 10; i++){ 		for(j = 0; j < 10; j++){ 			for(k = 0; k < 10; k++){ 				for(w = 0; w < 10; w++){ 					if((i == j)&&(k == w)&&(i != k)){ 						number = 1000 * i + 100 * j + 10 * k + w; 						for(a = 0; a < 100; a++){ 							if(a * a == number){ 								printf("车牌号：%d\n", number); 							} 						} 					} 				} 			} 		} 	}

user: user-6
content: 你if后面应该还有个花括号吧{}，number和下面的for应该是同一级
user-0 提问: 这个代码如何添加使用外部文件储存通讯录信息，请大神赐教！谢谢！

回复:
user: user-1
content: 使用文件io函数，fopen fread fwrite等函数，把你需要存储的数据信息写进去就可以了

user: user-2
content: 去了解一下C语言的文件流，把结构体存起来就行了
user-0 提问: 大神可以教一下怎么写这个·程序吗？

回复:
user: user-1
content: 通过随机数种子生成一个字符串用作打字模板，再用循环 getchar输入字符 直到接受到换行符 得到一个字符串 ，然后循环比较一下就能得到正确率了
user-0 提问: 求解答：谢谢！

回复:
user: user-0
content: 谢谢，谢谢解答，

user: user-1
content: 字符串输出需要有文件截止符，否则就持续打印输出，直到碰到文件截止符为止。你的b数组长度不够

user: user-0
content: 为什么我的打印输出会这样子
user-0 提问: 数据结构(c语言完成)

回复:
user: user-1
content: 逆序我写了，回文数判断。你自己完成吧。  #include <stdio.h> #include <stdlib.h> #define  N 1024 //栈大小  typedef struct stack {     int top; //栈顶位置     char data[N]; //数据 } STACK; //是否为空 int isEmpty(STACK * stack) {     if(stack->top == -1)     {         return 1;     }     return 0; } //是否已满 int isFull(STACK * stack) {     if(stack->top == N-1)     {         return 1;     }     return 0; }  //设为空 void setEmpty(STACK * stack) {     stack->top = -1; } //压栈 int push(STACK * stack, char data) {     if(isFull(stack))     {         printf("栈已满\n");         return -1;     }     stack->top += 1;     stack->data[stack->top] = data;     return 0; } //弹栈 char pop(STACK * stack) {     if(isEmpty(stack))     {         printf("栈已空");         return 0;     }     char c = stack->data[stack->top];     stack->top -= 1;     return c; }  int main(){      char s[1024]={0};     printf("请输入字符串:\n");     gets(s);     printf("您的输入是:%s\n", s);      STACK stack;     char * p = s;     //压栈     while(*p){         push(&stack, *p); 		printf("%c入栈\n", *p);         p++;     }     printf("逆序结果:\n");     char c;     while(c = pop(&stack)){         printf("%c", c);     }     return 0; }

user: user-2
content: 厉害了，大佬又来出题了
user-0 提问: c语言课程设计

回复:
user: user-0
content: 引用 1 楼 user-1 的回复： #include<stdio.h> #include<string.h> void getnum(char s[],char t[]) {     int i,j=0;     for(i=0;i<strlen(s);i++)         if(s[i]>='0'&&s[i]<='9')             t[j++]=s[i];     t[j]='\0'; } void sum(char s[]) {     int i,sum=0;     for(i=0;i<strlen(s);i++)         sum+=s[i]-'0';     printf("%d\n",sum); } int strtoint(char s[]) {     int i,sum=0;     for(i=0;i<strlen(s);i++)     {         sum*=10;         sum+=s[i]-'0';     }     return sum; } int tentotwo(int x) {     if(x<2)         printf("%d",x);     else     {         tentotwo(x/2);         printf("%d",x%2);     } } int tentoeight(int x) {     if(x<8)         printf("%d",x);     else     {         tentoeight(x/8);         printf("%d",x%8);     } } int tentosixteen(int x) {     if(x<10)         printf("%d",x);     else if(x<16)         printf("%c",x-10+'A');     else     {         tentosixteen(x/16);         if(x%16<10)             printf("%d",x%16);         else             printf("%c",x%16-10+'A');     } } int main() {     char s[100],t[100];     int num;     gets(s);     getnum(s,t);     puts(t);     sum(t);     num=strtoint(t);     printf("%d\n",num);     tentosixteen(255);     return 0; }  c++6.0上貌似不可以这样进制转换

user: user-1
content: #include<stdio.h> #include<string.h> void getnum(char s[],char t[]) {     int i,j=0;     for(i=0;i<strlen(s);i++)         if(s[i]>='0'&&s[i]<='9')             t[j++]=s[i];     t[j]='\0'; } void sum(char s[]) {     int i,sum=0;     for(i=0;i<strlen(s);i++)         sum+=s[i]-'0';     printf("%d\n",sum); } int strtoint(char s[]) {     int i,sum=0;     for(i=0;i<strlen(s);i++)     {         sum*=10;         sum+=s[i]-'0';     }     return sum; } int tentotwo(int x) {     if(x<2)         printf("%d",x);     else     {         tentotwo(x/2);         printf("%d",x%2);     } } int tentoeight(int x) {     if(x<8)         printf("%d",x);     else     {         tentoeight(x/8);         printf("%d",x%8);     } } int tentosixteen(int x) {     if(x<10)         printf("%d",x);     else if(x<16)         printf("%c",x-10+'A');     else     {         tentosixteen(x/16);         if(x%16<10)             printf("%d",x%16);         else             printf("%c",x%16-10+'A');     } } int main() {     char s[100],t[100];     int num;     gets(s);     getnum(s,t);     puts(t);     sum(t);     num=strtoint(t);     printf("%d\n",num);     tentosixteen(255);     return 0; }
user-0 提问: 小白学生管理系统求解 20分 谢谢

回复:
user: user-0
content: 引用 3 楼 user-1 的回复：if (head = NULL) -> if (head == NULL)嗯嗯对的老哥我自己也发现了。谢谢

user: user-1
content: if (head = NULL) -> if (head == NULL)

user: user-0
content: 引用 1 楼 user-1 的回复： struct inf* creat(struct inf* head)             //链表的创建  { 	struct inf* p=head, * q; 	int i;  	for (i = 0; i < 5; i++) 	{ 		q = (struct inf*)malloc(sizeof(struct inf)); 		gets_s(q->name); 		gets_s(q->num); 		gets_s(q->gender); 		gets_s(q->date); 		scanf("%d %d %d", &q->a1, &q->a2, &q->a3); 		getchar(); 		q->next = NULL; 		if (head = NULL) { 			head = q; 		} 		else 			p->next = q;		//此处p并未初始化，引起报错 		p = q; 	} 	return head; } 哥们，这边我初始化了呀，第一次循环不执行else，直接执行下一步初始化p=q的

user: user-1
content: struct inf* creat(struct inf* head)             //链表的创建  { 	struct inf* p=head, * q; 	int i;  	for (i = 0; i < 5; i++) 	{ 		q = (struct inf*)malloc(sizeof(struct inf)); 		gets_s(q->name); 		gets_s(q->num); 		gets_s(q->gender); 		gets_s(q->date); 		scanf("%d %d %d", &q->a1, &q->a2, &q->a3); 		getchar(); 		q->next = NULL; 		if (head = NULL) { 			head = q; 		} 		else 			p->next = q;		//此处p并未初始化，引起报错 		p = q; 	} 	return head; }
user-0 提问: 怎么把他写成函数形

回复:
user: user-0
content: 引用 楼主 user-0的回复:选出能被3整除且至少有一位是5的两位数，输出所有这样的数及其个数。 #include <stdio. h> sub (intk, int n){  } main()  int n=0, k,m; for(k=10;k<=99;k++) { m=sub(k,n) ; if (m!=-1)n=m;  } printf ("这样的数有%d",n) } #include <stdio.h> sub (int k, int n) {     if(k%3==0 &&(k%10==5||k/10==5))     {         printf("%d\n",k);         n++;     }     return (n);  } main() {     int n=0,k,m;     for(k=10; k<=99; k++)     {   m=sub(k,n) ;         if (m!=-1)n=m;      }     printf ("这样的数有%d",n); }    这样对不对呀
user-0 提问: c语言

回复:
user: user-1
content: 你判断是不是#处，如果是#你应该continue吧，不然程序还会向下执行。  话说你这个设计的也太复杂了，你不就是想字符串分割，将输入的字符串保存到字符数组里，根据分隔符进行分割就好了。
user-0 提问: 急求大佬~

回复:
user: user-1
content: 请移步C#区

user: user-0
content: 引用 1 楼 离水的鱼儿的回复:文件访问控制是什么意思？对某一个文件读写权限的控制？ 对，不同用户注册后根据角色可定义几个安全级。然后对软件里管理的文件也进行安全级设置，具体访问控制基于BLP模型

user: user-2
content: 引用 2 楼 weixin_45224665 的回复:[quote=引用 1 楼 离水的鱼儿的回复:]文件访问控制是什么意思？对某一个文件读写权限的控制？ 对，不同用户注册后根据角色可定义几个安全级。然后对软件里管理的文件也进行安全级设置，具体访问控制基于BLP模型[/quote] https://www.cnblogs.com/jaejaking/p/6344662.html 给你参考一下

user: user-2
content: 文件访问控制是什么意思？对某一个文件读写权限的控制？
user-0 提问: c语言求助！

回复:
user: user-0
content: 引用 1 楼 user-1 的回复：好像并没看到图我重新发了个帖子！求解

user: user-0
content: 引用 1 楼 user-1 的回复：好像并没看到图有o

user: user-1
content: 好像并没看到图
user-0 提问: 学校OJ上里的练习题（渣渣求助！题目超时不知道怎么解决

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

user: user-0
content: 引用 1 楼 user-2的回复:需要两层循环么？ 你for循环内部就是要找a+b=k的，为啥b也要for循环？直接b=k-a不就好了 谢谢，按照你的思路来改已经正确了

user: user-2
content: 需要两层循环么？ 你for循环内部就是要找a+b=k的，为啥b也要for循环？直接b=k-a不就好了
user-0 提问: 写入文件乱码

回复:
user: user-1
content: 在windows系统内部使用UNICODE编码。控制台的输入输出使用GBK字符集；在VC，源代码文件根据项目的属性可GBK或UTF8（资源文件UNICODE）；C语言保存文本文件据说默认为UTF8字符集。

user: user-0
content: 引用 1 楼 离水的鱼儿 的回复:也没看到你控制台有中文啊，都是一堆数字 个人怀疑你保存到文件的内容内存指向错了  这位兄弟说的是对的哈 原因是我写入的时候发生了越界... 原来写的时候偷懒 吧这个fwrite元素长度随便给了一个长度100 写入的时候其实 这个字符串的长度远没有100  //fwrite(databuff[index + dataline].c_str(), 1, 100, fq); fwrite(databuff[index + dataline].c_str(), 1,databuff[index + dataline].size(), fq);//改成这样就好了			 std::cout << databuff[index + dataline].c_str();  截图也有问题 要是截到了第一行就会发现第一行是正常的 但是后面会乱码是因为写入越界了 超出了字符串的范围  写入了内存区未使用的内容 所以第二行开始前面就有乱码 是由上一行越界内容产生的 最后感谢上面各位集思广益哈

user: user-2
content: 也没看到你控制台有中文啊，都是一堆数字 个人怀疑你保存到文件的内容内存指向错了

user: user-3

user: user-4
content: 看你文件打开方式。你只要左边的显示，格式化成什么编码随你的意了，按文本文件写入。

user: user-5
content: 对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A

user: user-0
content: 召唤水怪 召唤混分巨兽
user-0 提问: c语言菜鸟请大佬解答，c语言杀我

回复:
user: user-0
content: 引用 1 楼 user-1 的回复：伸手党是要被C语言杀了的我写的大作业就差这一个地方了，哭了

user: user-1
content: 伸手党是要被C语言杀了的
user-0 提问: 为什么printf("j=%d,k=%d,f=%f\n",j),k,f;  可以通过编译?

回复:
user: user-0
content: 谢谢,学习了.

user: user-1
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

user: user-2
content: 这里是k和f被当成了两个表达式，即它们和“a=1”"b=a+c"这样的表达式没有区别，然后，函数调用也是一个表达式，它和k和f三个表达式被两个逗号连成了一个语句。 至于printf内部，编译器不会检查你双引号里%d的数量，对于这个代码，你只传给printf一个变量j，至于多出来的两个%d，理论上显示乱码。

user: user-3
content: 哈哈 题主误打误撞 发现这个问题 不过的确是好问题  涉及到一种特殊函数 不定参数函数  详细内容可以百度搜索  引用C 不定参数函数

user: user-1
content: 上pc_lint

user: user-4
content: printf("<格式化字符串>", <参量表>)。printf解析格式化字符串是在函数内部分解的，编译器并不参与分解格式化字符串，所以不会在编译时出错。 ,也是表达式 	int a,b,c; 	a,b,c; 	a+b,a+c,b+c; 这样是可以的，而且不会有问题 a=(b,c);结果是a=c
user-0 提问: 24点游戏结果无法去重，求大佬指点！

回复:
user: user-1
content: 引用 3 楼 单眼皮的根号3 的回复:细看赵老师发的贴子，精髓

user: user-2
content: 细看赵老师发的贴子，精髓

user: user-3
content: 问题出在这几个数的组合中出现了重复 2 2 4 4 当第一个数和第二个数交换，结果还是 2 2 4 4 我的解决办法，用一个函数来判断数是否重复，没重复就记录 新增的函数为：  int repeat( int a, int b, int c, int d ) { 	static int arr[24][4]={0}; 	static int num=0; 	int i=0; 	for( i=0 ; i<num ; i++ ) 		if( arr[i][0]==a && arr[i][1]==b &&arr[i][2]==c &&arr[i][3]==d) 			return 1; 	arr[num][0]=a; 	arr[num][1]=b; 	arr[num][2]=c; 	arr[num][3]=d; 	num++; 	return 0; }  px函数里也改一行代码：  if( repeat( a[i],a[j],a[m],a[n] ) ==0 ) 	get24(a[i],a[j],a[m],a[n]);  运行结果：

user: user-1
content: https://bbs.csdn.net/topics/380157851

user: user-4
content: 去重无非是将之前的结果保存下来，每新增一个结果进行重复判断

user: user-0
content: 我是想在我的原有代码上改一些东西，实现结果去重，我先在只学了c，还不会c++。
user-0 提问: c语言题目

回复:
user: user-1
content: 引用 3 楼 bula~bula~ 的回复:[quote=引用 2 楼 吖如的回复:]进制之间的转换八进制010转十进制是8，10就是十进制，0x10十六进制转十进制是16，所以选第一个，进制转换都是很基础很基础的东西 感谢大佬，我会好好学习的[/quote]加油加油加油

user: user-0
content: 引用 2 楼 吖如的回复:进制之间的转换八进制010转十进制是8，10就是十进制，0x10十六进制转十进制是16，所以选第一个，进制转换都是很基础很基础的东西 感谢大佬，我会好好学习的

user: user-1
content: 进制之间的转换八进制010转十进制是8，10就是十进制，0x10十六进制转十进制是16，所以选第一个，进制转换都是很基础很基础的东西

user: user-2
content: 这种问题最好是自己去看教材，在这里问到答案了也没什么用
user-0 提问: 求解

回复:
user: user-1
content: int  fun(int n) {  	int i, j = 0, a[20], sum = 0; //前20个不能被2,3,5,7整除的数保存在a数组中，它们的和保存在sum中。 		/**********Program**********/  	for ( i = 1; i < 1000; i++) 	{ 		if (i % 2 != 0 && i % 3 != 0 && i % 5 != 0 && i % 7 != 0 ) 		{ 			a[j] = i; 			j++; 			sum += i; 		} 		if (j == n) 			break; 	}   	/**********  End  **********/ 	return sum;  }
user-0 提问: 求问大神为什么csv打开文件是乱码，急急急

回复:
user: user-1
content: 对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A  不要把 fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n，写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待 和 fopen("...","...b");fseek,ftell,fread,fwrite,fgetc,fclose //不作以上替换，遇到\x1a仍继续读;读写的内容当字节看待 弄混了

user: user-2
content: 看着里我的回复，字符集问题 https://bbs.csdn.net/topics/392690168
user-0 提问: 求C程序设计课设

回复:
user: user-1
content: 引用 2 楼 qq_45184053 的回复:[quote=引用 1 楼 user-2的回复:]信息都不给全？ 需要什么信息，，，，[/quote] 最好是你写的代码，可以帮你改程序，但是不建议也不会给你从无到有写出来；大家帮你写出来你能有多少进步， 养成习惯，以后都让大家帮你写吗？

user: user-0
content: 引用 1 楼 user-2的回复:信息都不给全？ 需要什么信息，，，，

user: user-2
content: 信息都不给全？
user-0 提问: 求问输出二维数组到文件的问题

回复:
user: user-0
content: 引用 3 楼 拥抱Linux的回复:输入  file.out文件内容  求教一下fscanf要输入回车换行 怎么写

user: user-1
content: 输入  file.out文件内容

user: user-2
content: 你没有把数组输入到文件里

user: user-3
content: 你输入了啥
user-0 提问: 此程序每一行的意思详细一点

回复:
user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-2
content: 伸手党万岁~~~~~
user-0 提问: help

回复:
user: user-1
content: 引用 1 楼 user-2 的回复:只会用fprintf的方法：  #include<stdio.h> #include<iostream> #include<string> #define N 100 using namespace std;  struct Student { 	int num; 	char name[20]; 	double score;  };  void main() { 	int i=0,j=0; 	Student stu[2]={{1,"qw",33.5},{3,"jake",57.9}}; 	FILE *p=fopen("学号.txt","w");  	if(p== NULL)     {         printf("Can not open the file.\n");     }  	for(j=0;j<2;j++) 	{ 		fprintf(p,"%d\t",stu[j].num); 		fprintf(p,"%s\t",stu[j].name); 		fprintf(p,"%.lf\n",stu[j].score);  	} 	fclose(p);  } 代码逻辑还不够正确，下面的代码供参考！  #include<cstdio> #include <cstdlib> #include<iostream> #include<cstring>  #define N 100  using namespace std;  struct Student {     int num;     char name[20];     double score;  };  //void main() int main() {     int i=0,j=0;     Student stu[2]={{1,"qw",33.5},{3,"jake",57.9}};      FILE *p=fopen("学号.txt","w");     if(p == NULL)     {         printf("Can not open the file.\n");         exit(0);     }      for(j = 0; j < 2; j++)     {         fprintf(p,"%d\t",stu[j].num);         fprintf(p,"%s\t",stu[j].name);         fprintf(p,"%.1lf\n",stu[j].score);      }     fclose(p);      return 0; }

user: user-2
content: 只会用fprintf的方法：  #include<stdio.h> #include<iostream> #include<string> #define N 100 using namespace std;  struct Student { 	int num; 	char name[20]; 	double score;  };  void main() { 	int i=0,j=0; 	Student stu[2]={{1,"qw",33.5},{3,"jake",57.9}}; 	FILE *p=fopen("学号.txt","w");  	if(p== NULL)     {         printf("Can not open the file.\n");     }  	for(j=0;j<2;j++) 	{ 		fprintf(p,"%d\t",stu[j].num); 		fprintf(p,"%s\t",stu[j].name); 		fprintf(p,"%.lf\n",stu[j].score); 		 	} 	fclose(p); 	 }
user-0 提问: C程序的函数类型

回复:
user: user-1
content: 函数若果没有返回值类型，编译器默认是int类型。

user: user-0
content: 引用 2 楼 拥抱Linux的回复:～ 很早的时候，使用 K & R 风格或者范式 编写的C语言代码里，有很多函数都不指明函数返回值的类型，因为这个工作交给了编译器， 编译器 会自动地假定这样的函数的返回值为 int 型。编译器的这个操作被一直延续到了现在。 ～ 从C语言的标准 C99 开始，提出的是应该在代码中明确函数的返回值类型，要么是void或者其他完全类型，只要不是数组类型就行。当然了，标准当中的用词是 should / 应该 ，实际上其实是希望写代码的人务必做到的。但是呢还是像很早以前那样不明确函数返回值类型的话，也不会报错，编译器仍然会假定为函数返回值类型是 int 型。显而易见，这种行为并不值得提倡。 ～ 另：C++好像是要求函数必须明确返回值类型。 ～ 感谢各位大佬的解答。

user: user-2
content: C与C++有一点区别，C语言中，未给定返回类型的函数会默认为返回int（所以那个题目的答案是A），而C++中，除了构造函数、析构函数这些特殊的函数，所有函数都必须明确返回值类型。 但是不管是C还是C++，普通函数不指定函数返回值类型一定不是个好习惯。

user: user-3
content: ～ 很早的时候，使用 K & R 风格或者范式 编写的C语言代码里，有很多函数都不指明函数返回值的类型，因为这个工作交给了编译器， 编译器 会自动地假定这样的函数的返回值为 int 型。编译器的这个操作被一直延续到了现在。 ～ 从C语言的标准 C99 开始，提出的是应该在代码中明确函数的返回值类型，要么是void或者其他完全类型，只要不是数组类型就行。当然了，标准当中的用词是 should / 应该 ，实际上其实是希望写代码的人务必做到的。但是呢还是像很早以前那样不明确函数返回值类型的话，也不会报错，编译器仍然会假定为函数返回值类型是 int 型。显而易见，这种行为并不值得提倡。 ～ 另：C++好像是要求函数必须明确返回值类型。 ～

user: user-4
content: B,不确定吧，返回了y得看函数怎么定义的，并不是问y是什么类型 你定义成 int fun(float x)返回就是int； 定义成float fun(float x)返回就是float
user-0 提问: <求助>大佬们，这题我是真的不知到怎么做。（瑟瑟发抖尔康手）

回复:
user: user-0
content: 呃呃呃，后面两楼都是一个大佬，抱歉我没分了@user-2

user: user-0
content: 谢谢各位大佬，我再试试

user: user-1
content: int main(void)   {      long float a;       int b;      scanf("%lf  %d",&a,&b); 	 printf("%.2lf",fmod(a,b)); 	 getchar();      return 0;  }

user: user-1
content: int main(void)   {      double a,b;      scanf("%lf  %lf",&a,&b); 	 printf("%.2f",fmod(a,b)); 	 getchar();      return 0;  }  就是搞那么复杂干什么，四舍五入不是也有round()吗

user: user-2
content: 浮点数取余数用 fmod 函数

user: user-0
content: 略崩

user: user-0
content: 自己捞一捞，新手
user-0 提问: c语言

回复:
user: user-1
content: /**  * @version: 1.0 zuodu  * @other: 可参考以下，有问题私我  */ void Replace_FOO(void)  {       int nLen;       char repStr[] = "foo";       char arrTest[] = "food fool, fooox";       char *a = arrTest, *token;          token = strstr(arrTest, repStr);       while(NULL != token)       {           nLen = token - a;           memcpy(arrTest + nLen, "xxx", 3);           nLen += 3;              token = strstr(arrTest + nLen, repStr);       }          return ;   }

user: user-2
content: #include <cstdio> #include <cstring> #include <iostream>  using namespace std;  int main() {     char *str = new char[50];     char *pstr;     printf("请输入字符串（回车结束）：\n");     fgets(str, 50, stdin);     printf("len:%u\n", strlen(str));     printf("替换前：%s\n", str);      pstr = str;     while ((pstr = strstr(pstr, "foo"))) {         *pstr++ = 'x';         *pstr++ = 'x';         *pstr++ = 'x';     } #if 0     for (size_t i = 0; i < strlen(str) - 2; i++)     {         int j;         for (j = 0; j < 3; j++)         {             buff[j] = str[i + j];         }         if (!strcmp(buff, "foo"))         {             str[i] = 'x';             str[i+1] = 'x';             str[i+2] = 'x';         }     } #endif      printf("替换后：%s\n", str);     delete[] str;      return 0; } 供参考～

user: user-3
content: strstr搜索字符串，返回搜索到的地址 从得到的地址开始，写你要的xxx 然后继续用刚才的地址+3搜索，直到返回NULL 这个方法有个前提，那就是要替换的内容长度和原内容一样长

user: user-4
content: 可以用系统的函数，如果要自己写的话，给你个参考，写的不是很好。int main() { 	char* str = new char[50]; 	char* buff = new char[4]; 	memset(str, 0, 50); 	memset(buff, 0, 4); 	printf("请输入字符串（回车结束）：\n"); 	scanf_s("%[^\n]", str, 49); 	printf("len:%d\n", strlen(str)); 	printf("替换前：%s\n", str); 	for (size_t i = 0; i < strlen(str) - 2; i++) 	{ 		int j; 		for (j = 0; j < 3; j++) 		{ 			buff[j] = str[i + j]; 		} 		if (!strcmp(buff, "foo")) 		{ 			str[i] = 'x'; 			str[i+1] = 'x'; 			str[i+2] = 'x'; 		} 	} 	printf("替换后：%s\n", str); 	delete[] str; 	delete[] buff;  	while (1); 	return 0; }

user: user-5
content: C++ string.replace自己搜索下
user-0 提问: Stack around the variable was corrupted

回复:
user: user-1
content: 引用 3 楼 user-2 的回复:声明pszStr[11]，最后一个元素是pszStr[10]，这是很容易犯的差一错误。 对于你第二个问题，C语言并不一是一旦内存越界就立即会报错的，Stack around the variable was corrupted 这个错误是函数返回后检查栈内存是否完整，因为你那一句越界了，所以检测出栈内存问题报的错  [quote=引用 2 楼 wula0010 的回复:] [quote=引用 1 楼 user-2 的回复:] 问题出在pszStr[j - i + 2] = '\0'; 你例子中等价于访问了pszStr[11]，越界了。 应改成pszStr[j - i + 1] = '\0';  pszStr[11]是'\0'，是字符串的结尾，这个不能访问么？如果不能访问， 应该在pszStr[j - i + 2] = '\0';这句报错，可实际上是在trim(char *pszStr)返回后才报错，中间还有两句，这两句都正常执行，这么理解有错么？   free(pszTmp); pszTmp = NULL; [/quote][/quote] 出问题，并不代表马上就会出错,pszTmp是在栈上分配的,越界操作，会有能破坏栈,但也不是一定会,返回才会出错是因为pszTmp是这个函数在栈上分配的最后一个变量,他后面的就是返回地址,函数执行完毕之后return ,会弹栈返回, pop ebp return X 这个时候ebp有可能被破坏了，所以程序才会在返回之后报错。 个人理解，没有实际汇编验证，如有错误理解，欢迎指正

user: user-2
content: 声明pszStr[11]，最后一个元素是pszStr[10]，这是很容易犯的差一错误。 对于你第二个问题，C语言并不一是一旦内存越界就立即会报错的，Stack around the variable was corrupted 这个错误是函数返回后检查栈内存是否完整，因为你那一句越界了，所以检测出栈内存问题报的错  引用 2 楼 wula0010 的回复:[quote=引用 1 楼 user-2 的回复:] 问题出在pszStr[j - i + 2] = '\0'; 你例子中等价于访问了pszStr[11]，越界了。 应改成pszStr[j - i + 1] = '\0';  pszStr[11]是'\0'，是字符串的结尾，这个不能访问么？如果不能访问， 应该在pszStr[j - i + 2] = '\0';这句报错，可实际上是在trim(char *pszStr)返回后才报错，中间还有两句，这两句都正常执行，这么理解有错么？   free(pszTmp); pszTmp = NULL; [/quote]

user: user-0
content: 引用 1 楼 user-2 的回复:问题出在pszStr[j - i + 2] = '\0'; 你例子中等价于访问了pszStr[11]，越界了。 应改成pszStr[j - i + 1] = '\0';  pszStr[11]是'\0'，是字符串的结尾，这个不能访问么？如果不能访问， 应该在pszStr[j - i + 2] = '\0';这句报错，可实际上是在trim(char *pszStr)返回后才报错，中间还有两句，这两句都正常执行，这么理解有错么？   free(pszTmp); pszTmp = NULL;

user: user-2
content: 问题出在pszStr[j - i + 2] = '\0'; 你例子中等价于访问了pszStr[11]，越界了。 应改成pszStr[j - i + 1] = '\0';
user-0 提问: 关于错误c2446

回复:
user: user-1
content: fscnaf(fp,"%d,%s",studeng1_id[i],password1); zhanghao==studeng1_id[i]

user: user-0
content: 引用 1 楼 user-1的回复:fscnaf(fp,"%d,%s",studeng1_id[i],password1); zhanghao==studeng1_id[i] 好的，我去试一试。。。。。
user-0 提问: strlen函数计算值不对

回复:
user: user-1
content: 这有什么不理解的ch[40]没有初始化，里面的内容不定，你每次只改一个字符，有可能下个字符不是0就不是结束符，strlen是以'\0'结束的，所以你8,9,10,11长度都是11
user-0 提问: 求助C语言编程：编写函数对字符数组中的输入字母，按由大到小的字母顺序进行排序。

回复:
user: user-0
content: 引用 6 楼 拥抱Linux 的回复:[quote=引用 5 楼 Aatsword 的回复:] 我说错了，我是输入一个字母按一下回车，当然我连续输入八个按回车就是“烫烫烫烫”  如下所示：  #include <stdio.h>  void abc(char ch[]) { 	int i; 	for (i = 0; i < 8; i++) { 		ch[i] = getchar(); 	} }  void sort(char ch[]) { 	int i, j, n; 	for (i = 0; i < 7; i++) { 		for (j = i + 1; j < 8; j++) { 			if (ch[i] < ch[j]) { 				n = ch[j]; 				ch[j] = ch[i]; 				ch[i] = n; 			} 		} 	} }  int main(void) { 	char ch[100]; 	int i; 	printf("请输入8个字母： \n"); 	abc(ch); 	printf("由大到小排序： \n"); 	sort(ch); 	for (i = 0; i < 8; i++) { 		printf("%c", ch[i]); 	} 	return 0; }  运行截图：  ～ 能看懂【连续输入】的【连续】是什么意思了么？ ～ [/quote] 好吧。原来是这样的。我以为回车一次才运行一次那个输入代码 。谢谢啦！

user: user-0
content: 引用 1 楼 拥抱Linux 的回复:～ getchar()函数是吸收任何输入进去的字符，当然也就包括空格，所以，你不想改代码的话，就在输入字母的时候连续输入，不要在中间使用空格。  我是输入一个字母按一下空格的，这样有问题吗？ 在用getchar之前我用的是printf的，但是情况也一样

user: user-1
content: ～ getchar()函数是吸收任何输入进去的字符，当然也就包括空格，所以，你不想改代码的话，就在输入字母的时候连续输入，不要在中间使用空格。

user: user-1
content: 引用 5 楼 Aatsword 的回复:我说错了，我是输入一个字母按一下回车，当然我连续输入八个按回车就是“烫烫烫烫”  如下所示：  #include <stdio.h>  void abc(char ch[]) { 	int i; 	for (i = 0; i < 8; i++) { 		ch[i] = getchar(); 	} }  void sort(char ch[]) { 	int i, j, n; 	for (i = 0; i < 7; i++) { 		for (j = i + 1; j < 8; j++) { 			if (ch[i] < ch[j]) { 				n = ch[j]; 				ch[j] = ch[i]; 				ch[i] = n; 			} 		} 	} }  int main(void) { 	char ch[100]; 	int i; 	printf("请输入8个字母： \n"); 	abc(ch); 	printf("由大到小排序： \n"); 	sort(ch); 	for (i = 0; i < 8; i++) { 		printf("%c", ch[i]); 	} 	return 0; }  运行截图：  ～ 能看懂【连续输入】的【连续】是什么意思了么？ ～

user: user-0
content: 引用 3 楼 拥抱Linux的回复:[quote=引用 2 楼 Aatsword 的回复:] 我是输入一个字母按一下空格的，这样有问题吗？ 在用getchar之前我用的是printf的，但是情况也一样 在输入字母的时候连续输入，不要在中间使用空格。 ～ 你先试一试再说。[/quote] 我说错了，我是输入一个字母按一下回车，当然我连续输入八个按回车就是“烫烫烫烫”

user: user-0
content: 我试了，它最后输出的是“烫烫烫烫”四个字，

user: user-1
content: 引用 2 楼 Aatsword 的回复:我是输入一个字母按一下空格的，这样有问题吗？ 在用getchar之前我用的是printf的，但是情况也一样 在输入字母的时候连续输入，不要在中间使用空格。 ～ 你先试一试再说。
user-0 提问: c语言题目 Fat Mouse Trade

回复:
user: user-0
content: #include<stdio.h> #include<iostream> #include<algorithm> using namespace std; typedef struct v{ 	int j; 	int f; }A; bool compare(A a,A b) {  	double x=(double)a.j/(double)a.f; 	double y=(double)b.j/(double)b.f; 	if(x==y)return a.j>b.j; 	return x>y; } int main(){ 	int n,m,i; 	while(scanf("%d %d",&m,&n)){ 		if(m==-1&&n==-1) break; 		double h=0; 		A a[10000]; 		for(i=0;i<n;i++){ 		     scanf("%d %d",&a[i].j,&a[i].f); 		} 		sort(a,a+n,compare); 		i=0; 		while(m>0){ 			if(a[i].f<=m){ 				m=m-a[i].f; 				h=h+a[i].j; 			} 			else{ 				h=h+((double)a[i].j*m)/(double)a[i].f; 				break; 			} 			i++; 		} 		printf("%.3lf\n",h); 	} 	return 0;		 } 虽然结贴了。。。但是有大佬看出这个哪里错了么

user: user-1
content: h=c[i];c[i]=c[j];c[j]=h;       	h=a[i];a[i]=a[j];a[j]=h;    	h=b[i];b[i]=b[j];b[j]=h; } h 是int ，你用来做 double数组元素交换的临时变量，会丢精度 最后结果不对
user-0 提问: 关于未经处理的异常

回复:
user: user-1
content: time是字符串类型么？如果不是字符串类型请用memcpy 如果是字符串类型，说明有内存越界，建议贴出完整代码

user: user-0
content: 好的好的，谢谢

user: user-0
content: 引用 3 楼 636f6c696e的回复:至少贴下数据结构，目前来看很可能是time越界了，因为strcpy会一直拷贝到'\0'为止，一旦源地址的time末尾'\0'被字符覆盖了，就会越界。 还有你的代码太繁琐了，试试用memcpy吧 memcpy(temp, our_student[i], sizeof(struct student)); memcpy(our_student[i], our_student[i + 1], sizeof(struct student)); memcpy(our_student[i +1], temp, sizeof(struct student));   [quote=引用 2 楼 ONE~ 的回复:] [quote=引用 1 楼 636f6c696e的回复:]time是字符串类型么？如果不是字符串类型请用memcpy 如果是字符串类型，说明有内存越界，建议贴出完整代码 这个代码有两千多行，不好贴[/quote][/quote] 好的，我试一下memcpy

user: user-2
content: 关于未经处理的异常，可以看下这篇文章 http://j.gs/Cq5s

user: user-1
content: 至少贴下数据结构，目前来看很可能是time越界了，因为strcpy会一直拷贝到'\0'为止，一旦源地址的time末尾'\0'被字符覆盖了，就会越界。 还有你的代码太繁琐了，试试用memcpy吧 memcpy(temp, our_student[i], sizeof(struct student)); memcpy(our_student[i], our_student[i + 1], sizeof(struct student)); memcpy(our_student[i +1], temp, sizeof(struct student)); 引用 2 楼 ONE~ 的回复:[quote=引用 1 楼 636f6c696e的回复:]time是字符串类型么？如果不是字符串类型请用memcpy 如果是字符串类型，说明有内存越界，建议贴出完整代码 这个代码有两千多行，不好贴[/quote]

user: user-0
content: 引用 1 楼 636f6c696e的回复:time是字符串类型么？如果不是字符串类型请用memcpy 如果是字符串类型，说明有内存越界，建议贴出完整代码 这个代码有两千多行，不好贴
user-0 提问: EOF要输入两次，字符统计错误

回复:
user: user-1
content: ～ 因为你输入的第一个 EOF 就是你的输入数据的结尾啊，因为 EOF 的意思原本就是 End Of File ，而 getchar() 函数从输入缓冲区读取数据的时候是需要 EOF 来判断输入数据是否结束的。过程就是 getchar() 先吸收掉第一个 EOF ，第二个 EOF 才会被交给变量 ch 。  还不理解的话，就按通常情况的输入方式，先输入几个字符然后敲回车以中断一次输入，然后再按下输入 EOF 的快捷键，看看是什么结果。 ～ getchar()函数的标准文档中是这样描述它的返回值的： 引用Return value The obtained character on success or EOF on failure.  If the failure has been caused by end-of-file condition, additionally sets the eof indicator (see feof()) on stdin. If the failure has been caused by some other error, sets the error indicator (see ferror()) on stdin. 还有配套的示例代码：  #include <stdio.h> #include <stdlib.h>   int main(void) {      int ch;     while ((ch=getchar()) != EOF)   /* read/print "abcde" from stdin */           printf("%c", ch);       /* Test reason for reaching EOF. */     if (feof(stdin))          /* if failure caused by end-of-file condition */        puts("End of file reached");     else if (ferror(stdin))   /* if failure caused by some other error      */          {             perror("getchar()");             fprintf(stderr,"getchar() failed in file %s at line # %d\n", __FILE__,__LINE__-9);             exit(EXIT_FAILURE);          }       return EXIT_SUCCESS; }  输出结果是：  //输入abcde回车 abcde End of file reached  自己看看，体会一下吧！ ～
user-0 提问: 怎么用C语言编程输出数组a中没有重复数字的前5个最大的整数。

回复:
user: user-1
content: 用大根堆就可以，

user: user-2
content: 降序排序，从第一个开始，只要与相邻的不相同就满足你说的条件，找5个最大的就行
user-0 提问: 求大神给小白解惑

回复:
user: user-0
content: #include<stdio.h>   int zqjtotal(int *a,int n,int c) { 	int i,count=0; 	for(i=0;i<n;i++) 	{ 		if(*a==c) 		{ 			count++; 		} 		a++; 	} 	return count; } int main() { 	int mix[10],j,b,p,z;  	printf("请输入整数b(0<b<=10):"); 	scanf("%d",&b); 	printf("请输入%d个数：",b);     for(j=0;j<b;j++) 	{ 		scanf("%d",&mix[j]); 	} 	printf("请输入一个要统计的整数p："); 	scanf("%d",&p);  	z=zqjtotal(mix,b,p);  	printf("%d个整数中%d有%d个\n\n",b,p,z);  	system("pause");  }
user-0 提问: 关于枚举

回复:
user: user-1
content: 对的，没指定数值的从上一个指定数值的项开始按顺序排（+1）  如果第一个没指定的话缺省为0

user: user-2
content: enum test{  a(第一项默认0)，b=5，c(之后的根据前一项的值+1，c为6) } 拿这个题为例，就是MOD= 0 GOLDMOS=1 PLATMOD= 2 enum learn类型变量currMod已赋值1 所以选b