Question: 求教，c语言统计单词频率，这个问题困扰我好几个星期了，初学者。

第一次发帖，好像分都给了一个人，没给到分的抱歉哈

牛，给力，谢了，兄弟。

#include <stdio.h> #include <string.h>  void count_words() {     char text[8][15] = { "on","the","desk","on","frank","the","hello" };      char buf[8][15];     int nword[8] = {0}, total_cnt = 0;     int i, j;       strcpy(buf[0], text[0]);     total_cnt = 1;     nword[0]++;      for (i = 1; i < 8; i++) {         if (strlen(text[i]) <= 0)             continue;         for (j = 0; j < total_cnt; j++) {             if (strcmp(buf[j], text[i]) == 0) {                nword[j]++;                break;             }         }         if (j >= total_cnt) {             puts(text[i]);             strcpy(buf[total_cnt], text[i]);             nword[total_cnt]++;             total_cnt++;         }     }      printf("%d\n", total_cnt);     for (i = 0; i < total_cnt; i++) {         printf("%s %d \n", buf[i], nword[i]);     }     /*     char buf[8][15] = { "" };     char* ptr = NULL;     int nword[15] = { 0 };     int i, j, k;     int word_cout = 0;     bool new_word = true;      for (i = 0; i < 8; i++) {         ptr = text[i];         for (j = 0; j < i; j++) {             if (strcmp(buf[j], ptr) == 0) {                 new_word = false;                  ++nword[j];             }         }         if (new_word) {             strcpy(buf[i], ptr);             ++nword[j];             word_cout++;         }         else {             strcpy(buf[i], ptr);         }     }     printf("%d\n", word_cout);     for (k = 0; k < word_cout; k++) {         printf("%s %d ", buf[k], nword[k]);     }     */ }  int main(void) {     count_words();     return 0; } 供参考～

void count_words() {     char text[8][15] = { "on","the","desk","on","frank","the","hello" };     char buf [8][15] = { "" };     char* ptr = NULL;     int nword[8] = { 0 };     int i, j, k;     int word_count = 0;      for (i = 0; i < 8; i++) {         ptr = text[i];         if ( strlen(ptr)==0) continue; // 空串跳过         nword[word_count] = 1; // 找到第一个不重复的串，重复都被后面的for循环替换了 	strcpy(buf[word_count++], ptr) ; // 不重复的放到buf里面去         for (j = i+1; j <8; j++) {  // 删除后面重复存在的串             if (strcmp(text[j], ptr) == 0) { //   找到了重复的串                 nword[word_count-1]++; // 计数器自增                 text[j][0]= '\0'; // 删除             }         }     }     printf("%d\n", word_count);     for (k = 0; k < word_count; k++) {         printf("%s %d ", buf[k], nword[k]);     }  }


Question: 结构指针能不能相互赋值呢?

引用 1 楼 寻开心 的回复:类型不一样啊，  错误提示那里说的很清楚 stud_note 和 stud_node 这不一样啊。 谢谢 !  被自己蠢哭了 哈哈哈


Question: 虽然warning不影响运行，但有没有办法去掉warning

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

引用 2 楼 寻开心的回复:const  int storeArrey[10] = {1,2,3,4,5,6,7,8,9,10};  这里把const 去掉，是第二种改法  前面的增加cosnt的地方要改造多处 Thanks.😁😁😁

int * maxfinder(const  int To_be_fouded_arrey[10]);  这样就好


Question: 链表！！！求教

你就搜一个链表的建立和增删查改操作代码就行了。把你自己需要的数据成员放进去。


Question: 帮忙改个bug

改了一下代码  你试试看吧 逻辑上的 bug， 你单步跟踪先自己试试  #include<stdio.h> #include<stdlib.h> #include<string.h>  void input(); void name();  void number(); void max(); void min();  void insert();  void alter();  void sort();  void delet();  void statistic(); void output();//函数声明   //声明结构类型  struct student  { 	char			num[15];      char			name[20];      int				chinese; 	int				math;  	int				c;  	float			sum;  	float			aver; }stu[100];  int n;   int main()  { 	int a,flag=0;  	while(1)  	{ 		printf("学生管理系统\n"); 		printf("1.输入学生信息\n");  		printf("2.按名字查询学生信息\n");  		printf("3.按学号查询学生信息\n"); 		printf("4.查找最高分学生\n"); 		printf("5.查找不及格学生\n");  		printf("6.插入学生信息\n");  		printf("7.修改学生信息\n");  		printf("8.按平均分排序\n"); 		printf("9.删除学生信息\n"); 		printf("10.统计最高分，不及格人数\n");  		printf("11.显示全部学生信息\n");  		printf("0.退出\n"); 		printf("请输入你的选择:"); 		scanf("%d",&a);  		switch(a) 		{ 		case 1: 			input(); 			break;   		case 2: 			name(); 			break;  		case 3: 			number(); 			break; 		case 4: 			max(); 			break; 		case 5: 			min(); 			break; 		case 6: 			insert(); 			break;  		case 7: 			alter(); 			break; 		case 8: 			sort();  			break; 		case 9: 			delet(); 			break; 		case 10: 			statistic();  			break; 		case 11: 			output(); 			break; 		case 0: 			flag=1; 			break; 		default: 			printf("error"); 		}  		if(flag) break;  	} }  void input()  { 	system("CLS"); 	int i; 	printf("输出你想输入的学生信息个数:"); 	scanf("%d",&n); 	for(i=0;i<n;i++)  	{ 		printf("学号:"); 		scanf("%s",stu[i].num);  		printf("姓名:"); 		scanf("%s",stu[i].name); 		printf("语文:"); 		scanf("%d",&stu[i].chinese);  		printf("数学:"); 		scanf("%d",&stu[i].math); 		printf("C语言:"); 		scanf("%d",&stu[i].c); 		stu[i].sum=(stu[i].chinese+stu[i].math+stu[i].c); 		stu[i].aver=(stu[i].chinese+stu[i].math+stu[i].c)/3; 		printf("总成绩=%4.1f\n",stu[i].sum); 		printf("平均成绩=%4.1f\n",stu[i].aver); 	} }  void name() { 	system("CLS"); 	int i; 	char name[20];  	printf("请输入学生姓名:\n"); 	scanf("%s",name); 	printf("\t学号\t姓名\t英语\t数学\tC语言\t平均成绩\t总成绩\n"); 	for(i=0;i<n;i++) 	{ 		if(strcmp(stu[i].name,name)==0)  		{ 			printf("%10s\t%s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name, 				stu[i].chinese,stu[i].math,stu[i].c,stu[i].aver,stu[i].sum); 		} 	} }  void number()  { 	system("CLS"); 	int i; 	char number[15];  	printf("请输入学号:\n"); 	scanf("%s",number); 	printf("\t学号\t姓名\t英语\t数学\tC语言\t平均成绩\t总成绩\n"); 	for(i=0;i<n;i++) 	{ 		if(strcmp(stu[i].num,number)==0)  			printf("%10s\t%s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name, 			stu[i].chinese,stu[i].math,stu[i].c,stu[i].aver,stu[i].sum); 	} }  void max ( ) { 	int i;  	int j=0; 	int k=0; 	int g=0; 	int max=0; 	for(i=0;i<n;i++) 	{ 		if(stu[i].chinese>max) 			j=i; 		printf ("语文最高分学生为：%s",stu[j].name); 	}  	for(i=0;i<n;i++) 	{ 		if(stu[i].math>max) 			j=k; 		printf ("数学最高分学生为：%s",stu[k].name); 	}  	for(i=0;i<n;i++) 	{ 		if(stu[i].c>max) 			j=g; 		printf ("C语言最高分学生为：%s",stu[g].name); 	} }  void min( ) { 	system("CLS"); 	int i; 	printf("语文不及格名单：\n"); 	for(i = 0;i < n;i++) 	{ 		if(stu[i] .chinese< 60) 		{ 			printf("姓名：%s\t", stu[i] .name); 			printf("语文成绩：%4.2f\n", stu[i] .chinese ); 		} 		else  		{ 			printf("语文没有不及格的！\n"); 		} 	} 	printf("数学不及格名单：\n");  	for(i = 0;i < n;i++) 	{ 		if (stu[i].math < 60) 		{ 			printf("姓名：%s\t",stu[i].name); 			printf("数学成绩：%4.2f\n",stu[i].math); 		} 		else  		{ 			printf("数学没有不及格的！\n"); 		} 	} 	printf("C语言不及格名单：\n");  	for(i = 0;i < n;i++) 	{  		if(stu[i] .c< 60) 		{  			printf("姓名：%s\t", stu[i] .name); 			printf("C语言成绩：%4.2f\n", stu[i] .chinese ); 		} 		else  		{ 			printf("C语言没有不及格的！\n"); 		} 	}  }  void insert() { 	system("CLS"); 	int q;  	int i; 	char a[15]; 	char b[20]; 	int s1,s2,s3; 	printf("输入插入的位置：");  	scanf("%d",&q); 	printf("\t学号\t姓名\t英语\t数学\tC语言\n");  	scanf("%s %s %d %d",a,b,&s1,&s2,&s3); 	for(i=n-1;i>=q;i--)//将插入位置后面的同学向后移动一个位置 	{ 		strcpy(stu[i+1].num,stu[i].num); 		strcpy(stu[i+1].name,stu[i].name); 		stu[i+1].chinese=stu[i] .chinese; 		stu[i+1].math=stu[i]. math; 		stu[i+1].c=stu[i].c; 	} 	strcpy(stu[q].num,a); 	strcpy(stu[q].name,b); 	stu[q]. chinese =s1; 	stu[q].math =s2; 	stu[q].c =s3;  }  void alter() { 	system("CLS"); 	int i; 	int m; 	int h; 	char q[15]; 	printf("请输入要修改的学生学号："); 	scanf("%s",q); 	for(i=0;i<n;i++) 	{ 		if (0==strcmp(stu[i].num,q))//查找该学生所在位置 			m=i; 		printf("输入要修改的科目（修改语文成绩请输入1，修改数学成绩请输入2，修改C语言成绩请输入3）"); 		scanf ("%d",&h);//为要修改的科目 		printf("您要修改为："); 		if(h==1)//修改科目为语文成绩时 		{ 			scanf("%f",&stu[m].chinese); 			printf("已修改！\n"); 		} 		else if(h==2)//修改科目为数学时; 		{ 			scanf("%f",&stu[m].math); 			printf("已修改！\n"); 		} 		else if(h==3)//修改科目为C语言时; 		{ 			scanf("%f",&stu[m].c); 			printf("已修改！\n"); 		} 	} }  void sort()  { 	system("CLS"); 	int i,j; 	char b; 	struct student temp;  	printf("\t学号\t姓名\t英语\t数学\tC语言\t平均成绩\t总成绩\n"); 	for(i=0;i<n;i++) 	{ 		for(j=i+1;j<n;j++) 			if(stu[i].sum<stu[j].sum) 			{ 				temp=stu[i]; 				stu[i]= stu[j]; 				stu[j]=temp; 			} 			printf("%10s\t%s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name, 				stu[i].chinese,stu[i].math,stu[i].c,stu[i].aver,stu[i].sum); 	} 	printf("退出"); }  void delet() { 	int i;  	char q[15];  	int m;  	int j; 	printf("输入要删除学生的学号："); 	scanf("%s",q); 	for(i=0;i<n;i++) 	{ 		if(strcmp(stu[i].num,q)==0) 			m=i; 		for(i=m,j=m+1,j<n-1;i++;j++)//将后一位学生的信息向前移动一个存储单位覆盖要删除的学生信息 		{  			strcpy(stu[i].num,stu[j].num); 			strcpy(stu[i].name,stu[j].name); 			stu[i].chinese =stu[j].chinese; 			stu[i].math =stu[j]. math; 			stu[i].c =stu[j].c; 		} 	} }  void statistic ( ) { 	system("CLS"); 	int i,e=0,m=0,c=0,x,y,z; 	for(i=0;i<n;i++) 	{ 		if(stu[i].chinese<60) e++; 	} 	for(i=0;i<n;i++) 	{ 		if(stu[i].math<60) m++; 	} 	for(i=0;i<n;i++) 	{ 		if(stu[i].c<60) c++; 	} 	printf("英语不及格人数：%d\n数学不及格人数：%d\nC语言不及格人数：%d\n",e,m,c); 	for(i=0;i<n;i++) 	{ 		if(stu[i].chinese>stu[i+1].chinese) x=stu[i].chinese; 	} 	for(i=0;i<n;i++) 	{ 		if(stu[i].math>stu[i+1].math) y=stu[i].math; 	} 	for(i=0;i<n;i++) 	{ 		if(stu[i].c>stu[i+1].c) z=stu[i].c; 	} 	printf("英语最高分：%d\n数学最高分：%d\nC最高分：%d\n",x,y,z); }  void output()  { 	system("CLS"); 	int i; 	printf("\t学号\t姓名\t英语\t数学\tC语言\t平均成绩\t总成绩\n"); 	for(i=0;i<n;i++) 	{ 		printf("%10s\t%s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name, 			stu[i].chinese,stu[i].math,stu[i].c,stu[i].aver,stu[i].sum); 	} }

/*****************************************************************************************            代码错误                      *************************************************************************************** */ void input()  { 	system("CLS");                                                                  //1 	int i;                                                                                //2 	printf("输出你想输入的学生信息个数:");                           //3 	scanf("%d",&n);                                                              //4 	for(i=0;i<n;i++)                                                              //5 	{                                                                                //6 		printf("学号:");                                                        //7 		scanf("%s",&stu[i].num);                                       //8 		printf("姓名:");                                                        //9 		scanf("%s",&stu[i].name);                                     //10 		printf("语文:");                                                        //11 		scanf("%d",&stu[i].chinese);                                 //12 		printf("数学:");                                                        //13 		scanf("%d",&stu[i].math);                                     //14 		printf("C语言:");                                                      //15 		scanf("%d",&stu[i].c);                                             //16 		stu[i].sum=(stu[i].chinese+stu[i].math+stu[i].c);  //17 		stu[i].aver=(stu[i].chinese+stu[i].math+stu[i].c)/3;//18 		printf("总成绩=%4.1f\n",stu[i].sum);                       //19 		printf("平均成绩=%4.1f\n",stu[i].aver);                    //20 	} } /* 第8行，num是一个字符数组，输入字符串的时候不需要对其取地址 scanf("%s",&stu[i].num);                                       //8 改成 scanf("%s",stu[i].num);                                       //8  第10行，name是一个字符数组，在输入字符串的时候不需要对其取地址了 scanf("%s",&stu[i].name);                                     //10 改成 scanf("%s",stu[i].name);                                     //10 */   void insert() { 	system("CLS");                                                                                //1 	int q; char b; int s1,s2,s3;                                                                    //2 	printf("输入插入的位置：");                                                                //3 	scanf("%d",&q);                                                                                //4 	printf("\t学号\t姓名\t英语\t数学\tC语言\n");                                     //5 	scanf("%d %s %f %f",&p,&a,&S1,&s2,&s3);                                     //6 	for(i=n-1,i>=q;i--)//将插入位置后面的同学向后移动一个位置           //7 	{                                                                                //8 		stu[i+1].num=stu[i].num;                                                         //9 		strcpy(stu[i+1].name,stu[i].name);                                           //10 		stu[i+1].chinese=stu[i] .chinese;                                              //11 		stu[i+1].math=stu[i]. math;                                                      //12 		stu[i+1].c=stu[i].c;                                                                     //13 	}                                                                                //14 	stu[q].num=b;                                                                                //16 	strapy(stu[q].name,b);                                                                     //17 	stu[q]. chinese =s1;                                                                         //18 	stu[q].math =s2;                                                                              //19 	stu[q].c =s3;                                                                                //20 } /* 第6行，学号你在结构体里面定义的是字符串，姓名也是字符串，输入格式只有4个输入，和输入参数个数对不上 输入参数p、a、S1(大写 S)没有定义，成绩是“语文”不是“英语”,“%f”是输入浮点数，“%d”才是输入整数 int q; char b; int s1,s2,s3;                                                                    //2 scanf("%d %s %f %f",&p,&a,&S1,&s2,&s3);                                     //6 改成 int q;  char b[15]; cahr a[20] int s1,s2,s3; scanf("%s %s %d %d %d",p,a,&s1,&s2,&s3);                                     //6     第7行，i 没有定义，在前面增加定义，i=n-1后面是分号，不应该是逗号 int i;                                                                                第9行，字符串赋值应该用 strcpy 函数，而不是直接 = 号赋值 stu[i+1].num=stu[i].num;                                                                 //9 改成 strcpy(stu[i+1].num,stu[i].num);                                                      //9  第16 17行，问题同第9行 stu[q].num=b;                                                                                //16 strapy(stu[q].name,b);                                                                     //17 改成 strcpy(stu[q].num,a); strcpy(stu[q].name,b); */  void alter() { 	system("CLS");                                                                                //1 	int i; int q;                                                                                //2 	printf("请输入要修改的学生学号：");                                                    //3 	scanf("%d",&q);                                                                                //4 	for(i=0;i<n;i++)                                                                                //5 	{                                                                                //6 		if (q==stu[i].num)                                                                       //7 查找该学生所在位置       			m=I;                                                                                //8 		printf("输入要修改的科目（修改语文成绩请输入1，修改数学成绩请输入2，修改C语言成绩请输入3）");//9 		scanf ("%d",&h);                                                                         //10 为要修改的科目 		printf("您要修改为：");                                                                //11 		if(h==1)//修改科目为语文成绩时                                                //12 		{                                                                                //13 			scanf("%f",&stu[m].chinese);                                             //14 			printf("已修改！\n");                                                           //15 		}                                                                                //16 		else if(h==2)//修改科目为数学时;                                               //17 		{                                                                                //18 			scanf("%f",&stu[m].math);                                                 //19 			printf("已修改！\n");                                                           //20 		}                                                                                //21 		else (h==3)//修改科目为C语言时;                                               //22 		{                                                                                //23 			scanf("%f",&stu[m].c);                                                        //24 			printf("已修改！\n");                                                           //25 		}                                                                                } } /* 第2行，学生学号是字符串，所以q要定义成对应的字符数组 int i; int q; printf("请输入要修改的学生学号："); scanf("%d",&q); 改成 int i;  char q[15]; printf("请输入要修改的学生学号："); scanf("%s",q);  第7行，字符串比较用 strcmp 函数 if (q==stu[i].num)//查找该学生所在位置 改成 if (0==strcmp(stu[i].num,q))//查找该学生所在位置  第8行，m 未定义， I 要用小写的 m=I; 改成 m= i;  而且在参数定义加上m的定义 int m;  第10行， h未定义 在前面加上 h定义 int h;  第22 行， 括号前面少一个 if else (h==3)//修改科目为C语言时; 改成 else if(h==3)//修改科目为C语言时;  */   void sort()  { 	system("CLS");                                                                                //1                             	int i,j;                                                                                //2 	char b;                                                                                //3 	struct student temp;                                                                                //4 	printf("\t学号\t姓名\t英语\t数学\tC语言\t平均成绩\t总成绩\n");                                        //5 	for(i=0;i<n;i++)                                                                                //6 	{                                                                                //7 		for(j=i+1;j<n;j++)                                                                                //8 			if(student[i].sum<student[j].sum)                                                                     //9 			{                                                                                //10 				temp=student[i];student[i]= student[j];student[j]=temp;                       //11 			}                                                                                //12 			printf("%10s\t%s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,   //13 				stu[i].chinese,stut[i].math,stu[i].c,stu[i].aver,stu[i].sum);                           //14 	}                                                                                //15 	printf("退出");                                                                                //16 } /* 第9 11 14行，student、stut数组名称引用错误，要用数组名stu */   剩下的写不下了 你慢慢检查吧，代码没有错误之后才能称之为bug，逻辑上的错误debug，单步跟踪，慢慢调试

引用 5 楼 weixin_44135325的回复:void input()  { 	system("CLS"); 	int i; 	printf("输出你想输入的学生信息个数:"); 	scanf("%d",&n); 	for(i=0;i<n;i++)  	{ 		printf("学号:"); 		scanf("%s",&stu[i].num);  		printf("姓名:"); 		scanf("%s",&stu[i].name); 		printf("语文:"); 		scanf("%d",&stu[i].chinese);  		printf("数学:"); 		scanf("%d",&stu[i].math); 		printf("C语言:"); 		scanf("%d",&stu[i].c); 		stu[i].sum=(stu[i].chinese+stu[i].math+stu[i].c); 		stu[i].aver=(stu[i].chinese+stu[i].math+stu[i].c)/3; 		printf("总成绩=%4.1f\n",stu[i].sum); 		printf("平均成绩=%4.1f\n",stu[i].aver); 	} }  大佬，请继续讲解问题二

你这代码，我一个个问题来给你解决啊 问题一：代码排版，这叫乱码都不过分啊。这拿出去容易挨揍。最好学学别人的代码编辑排版。

这是什么乱七八糟的，改不过来啊， 给你改一个函数，其他的参照着自己修改吧 void insert() { system("CLS"); int q;  char b;  char name[20];  // 这两个临时变量，需要定义 char num[15]; int s1,s2,s3; printf("输入插入的位置：");  scanf("%d",&q); printf("\t学号\t姓名\t英语\t数学\tC语言\n");  scanf("%s %s %f %f",&num,&name,&s1,&s2,&s3); for(i=n-1; i>=q; i--)//将插入位置后面的同学向后移动一个位置 { strcpy( stu[i+1].num, stu[i].num); strcpy(stu[i+1].name,stu[i].name); stu[i+1].chinese=stu[i] .chinese; stu[i+1].math=stu[i]. math; stu[i+1].c=stu[i].c; }  strcpy(stu[q].num, num); strapy(stu[q].name,name); stu[q]. chinese =s1; stu[q].math =s2; stu[q].c =s3;  }  貌似复制别人的代码，但是你的数据结构和人家的不一样，人家的num是整数，你这是char [20] 对应和num相关的都要去修改一遍 以上给你改的代码也只能保证编译过， 不保证你的算法逻辑对 太多了，慢慢玩儿吧 反正编译器提示的错误也很清楚

引用 楼主 国家一级抬杠运动员.的回复:#include<stdio.h> #include<stdlib.h> #include<string.h> void input(); void name();  void number(); void max(); void min();  void insert();  void alter();  void sort();  void delet();  void statistic(); void output();//函数声明  struct student  {char num[15];  char name[20];  int chinese; int math;  int c;  float sum;  float aver;}//声明结构类型  stu[100]; int n;  int main()  {int a,flag=0;  while(1)  {printf("学生管理系统\n"); printf("1.输入学生信息\n");  printf("2.按名字查询学生信息\n");  printf("3.按学号查询学生信息\n"); printf("4.查找最高分学生\n"); printf("5.查找不及格学生\n");  printf("6.插入学生信息\n");  printf("7.修改学生信息\n");  printf("8.按平均分排序\n"); printf("9.删除学生信息\n"); printf("10.统计最高分，不及格人数\n");  printf("11.显示全部学生信息\n");  printf("0.退出\n"); printf("请输入你的选择:"); scanf("%d",&a); switch(a) {case 1:input();break;    case 2:name();break;   case 3:number();break;  case 4:max();break;  case 5:min();break;  case 6:insert();break;   case 7:alter();break;  case 8:sort(); break;  case 9:delet();break;  case 10:statistic(); break;  case 11:output();break;  case 0:flag=1;break;  default:printf("error");} if(flag) break; }} void input()  {system("CLS"); int i; printf("输出你想输入的学生信息个数:"); scanf("%d",&n); for(i=0;i<n;i++)  {printf("学号:"); scanf("%s",&stu[i].num);  printf("姓名:"); scanf("%s",&stu[i].name); printf("语文:"); scanf("%d",&stu[i].chinese);  printf("数学:"); scanf("%d",&stu[i].math); printf("C语言:"); scanf("%d",&stu[i].c); stu[i].sum=(stu[i].chinese+stu[i].math+stu[i].c); stu[i].aver=(stu[i].chinese+stu[i].math+stu[i].c)/3; printf("总成绩=%4.1f\n",stu[i].sum); printf("平均成绩=%4.1f\n",stu[i].aver);}} void name() {system("CLS"); int i; char name[20];  printf("请输入学生姓名:\n"); scanf("%s",name); printf("\t学号\t姓名\t英语\t数学\tC语言\t平均成绩\t总成绩\n"); for(i=0;i<n;i++) if(strcmp(stu[i].name,name)==0)  {printf("%10s\t%s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name, stu[i].chinese,stu[i].math,stu[i].c,stu[i].aver,stu[i].sum);}}  void number()  {system("CLS"); int i; char number[15];  printf("请输入学号:\n"); scanf("%s",number); printf("\t学号\t姓名\t英语\t数学\tC语言\t平均成绩\t总成绩\n"); for(i=0;i<n;i++) if(strcmp(stu[i].num,number)==0)  printf("%10s\t%s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name, stu[i].chinese,stu[i].math,stu[i].c,stu[i].aver,stu[i].sum);} void max ( ) { int i; int j=0;int k=0;int g=0;int max=0; for(i=0;i<n;i++) { if(stu[i].chinese>max) j=i; printf ("语文最高分学生为：%s",stu[j].name);} for(i=0;i<n;i++) { if(stu[i].math>max) j=k; printf ("数学最高分学生为：%s",stu[k].name);} for(i=0;i<n;i++) { if(stu[i].c>max) j=g; printf ("C语言最高分学生为：%s",stu[g].name);}} void min( ) {system("CLS"); int i; printf("语文不及格名单：\n"); for(i = 0;i < n;i++) {if(stu[i] .chinese< 60)  {printf("姓名：%s\t", stu[i] .name);  printf("语文成绩：%4.2f\n", stu[i] .chinese );} else  {printf("语文没有不及格的！\n");}} printf("数学不及格名单：\n"); for(i = 0;i < n;i++) {if (stu[i].math < 60) {printf("姓名：%s\t",stu[i].name); printf("数学成绩：%4.2f\n",stu[i].math);} else  {printf("数学没有不及格的！\n");}} printf("C语言不及格名单：\n"); for(i = 0;i < n;i++) { if(stu[i] .c< 60) { printf("姓名：%s\t", stu[i] .name); printf("C语言成绩：%4.2f\n", stu[i] .chinese );} else { printf("C语言没有不及格的！\n");}}  void insert() {system("CLS"); int q; char b; int s1,s2,s3; printf("输入插入的位置：");  scanf("%d",&q); printf("\t学号\t姓名\t英语\t数学\tC语言\n");  scanf("%d %s %f %f",&p,&a,&S1,&s2,&s3); for(i=n-1,i>=q;i--)//将插入位置后面的同学向后移动一个位置 { stu[i+1].num=stu[i].num; strcpy(stu[i+1].name,stu[i].name); stu[i+1].chinese=stu[i] .chinese; stu[i+1].math=stu[i]. math; stu[i+1].c=stu[i].c; } stu[q].num=b; strapy(stu[q].name,b); stu[q]. chinese =s1; stu[q].math =s2; stu[q].c =s3; } void alter() {system("CLS"); int i; int q; printf("请输入要修改的学生学号："); scanf("%d",&q); for(i=0;i<n;i++) {if (q==stu[i].num)//查找该学生所在位置 m=I; printf("输入要修改的科目（修改语文成绩请输入1，修改数学成绩请输入2，修改C语言成绩请输入3）"); scanf ("%d",&h);//为要修改的科目 printf("您要修改为："); if(h==1)//修改科目为语文成绩时 {scanf("%f",&stu[m].chinese); printf("已修改！\n");} else if(h==2)//修改科目为数学时; {scanf("%f",&stu[m].math); printf("已修改！\n");} else (h==3)//修改科目为C语言时; {scanf("%f",&stu[m].c); printf("已修改！\n");} void sort()  {system("CLS"); int i,j; char b; struct student temp;  printf("\t学号\t姓名\t英语\t数学\tC语言\t平均成绩\t总成绩\n"); for(i=0;i<n;i++) {for(j=i+1;j<n;j++) if(student[i].sum<student[j].sum) {temp=student[i];student[i]= student[j];student[j]=temp;} printf("%10s\t%s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name, stu[i].chinese,stut[i].math,stu[i].c,stu[i].aver,stu[i].sum);} printf("退出");} void delet int I; int q; int m; int j; printf("输入要删除学生的学号："); scanf("%d",&q); for(i=0;i<n;i++) {if(stu[i].num==q) m=i; for(i=m,j=m+1;j<n-1;i++;j++)//将后一位学生的信息向前移动一个存储单位覆盖要删除的学生信息 { stu[i].num=stu[j].num; strcpy(stu[i].name,stu[j].name); stu[i].chinese =stu[j]. Chinese; stu[i].math =stu[j]. math; stu[i].c =stu[j].c; } void statistic ( ) {system("CLS"); int i,e=0,m=0,c=0,x,y,z; for(i=0;i<n;i++) {if(stu[i].chinese<60) e++;} for(i=0;i<n;i++) {if(stu[i].math<60) m++;} for(i=0;i<n;i++) {if(stu[i].c<60) c++;} printf("英语不及格人数：%d\n数学不及格人数：%d\nC语言不及格人数：%d\n",e,m,c); for(i=0;i<n;i++) {if(stu[i].chinese>stu[i+1].chinese) x=stui].chnese;} for(i=0;i<n;i++) {if(stu[i].math>stu[i+1].math) y=stu[i].math;} for(i=0;i<n;i++) {if(stu[i].c>stu[i+1].c) z=stu[i].c;} printf("英语最高分：%d\n数学最高分：%d\nC最高分：%d\n",x,y,z);} void output()  {system("CLS"); int i; printf("\t学号\t姓名\t英语\t数学\tC语言\t平均成绩\t总成绩\n"); for(i=0;i<n;i++) {printf("%10s\t%s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name, stu[i].chinese,stu[i].math,stu[i].c,stu[i].aver,stu[i].sum);}} 大佬们，救救孩子吧


Question: c语言链表

建议简单的链表用递归的方法建立和遍历： https://gitee.com/shallwing/C-3P/blob/master/DataStructure-OS/DataStructure/linearList/list.cpp

建议楼主对比代码找出自己逻辑上问题～

#include<stdio.h> #include<stdlib.h>  #define LEN sizeof(struct Node) //int n;  struct Node {     int x;     struct Node *next; };  struct Node *CreateLList(); struct Node *SortLList(struct Node *head); void PrintLList(struct Node *head); //void main() int main() {     struct Node *h1,*h2;     h1=CreateLList();     PrintLList(h1);     h2=CreateLList();     PrintLList(h2); }  void PrintLList(struct Node *head) {     struct Node *p;     p = head;     printf("the new records are:\n");     //if(head!=NULL)     if(!head)         return;     do {         printf("%d ", p->x);         p = p->next;         //} while(p->next!=NULL);     } while(p!=NULL);     putchar(10); }  struct Node *CreateLList() {     struct Node *head,*p;     int n=0;     head = p = (struct Node*)malloc(LEN);     if (!p)         exit(0);     scanf("%d", &p->x);     //head=NULL;     while(p->x != 0)     {         ++n;         if(n==1)         {             head = p;             head->next = NULL;         }         else         {             p->next = head->next;             head->next = p;         }         p = (struct Node*)malloc(LEN);         if (!p)             exit(0);         scanf("%d", &p->x);     }     free(p);      return head; }   供参考～

循环条件不太对叭……


Question: 有没有高手使用C语言编写与AB PLC以太网通讯的程序。型号：Compacllogix


Question: 问题

不难，建议自己写写～

就是把赋值和输出封装成两个函数进行调用就好了一个函数放赋值语句，一个放输出，main函数里就创建数组，然后调用，是这意思吧


Question: C语言排序输出文件问题求解答

快来救救孩子吧求求你们了


Question: 求助C

感谢各位老铁


Question: 链栈逆置链表，大佬们帮我看看哪里错了，自己学了几天啥都不懂！！！

#include <stdio.h> #include <stdlib.h>  typedef struct node             //定义链表// {      int data;     node *next; }Lnode,*Linklist;  typedef struct  stack           //定义链栈// {      int data;     stack *snext; } stack,*linkstack;  void init(linkstack snext)               //初始化栈// {     snext = NULL;  } int empty(stack *s)      //判断是否空栈// {      if(s->snext==NULL)         return 1;     else         return 0;  } Linklist creat(int num)          //输入数据创建含头结点的单链表// {      Lnode *s,*r;     int x;     int cout=0;     Linklist L;     L=(Lnode *)malloc(sizeof(Lnode));           //需开辟空间否则无法使数据存入进去，初始化链表//     L->next=NULL;     r=L;     printf("请输入数据:");     while(cout<num)     {          scanf("%d",&x);         s = (Linklist)malloc(sizeof(Lnode));         if (!s)             exit(0);         s->data = x;         s->next = NULL;         r->next = s;         r = s;         cout++;      }     return L;  } void push(stack** s, Lnode *x)      //入栈// {     //{     stack* p=(stack *)malloc(sizeof(stack));     if (!p)         exit(0);     p->data = x->data;     p->snext = (*s);     (*s) = p;      //} } //int pop(stack* s,int *x)               //出栈// int pop(stack** s,int *x)               //出栈// {     stack *p = *s;     if(empty((*s)))         return 0;     //else     //{     *x = (*s)->data;     (*s) = (*s)->snext;     free(p); #if 0     stack * p=(stack *)malloc(sizeof(stack));     p->snext=s;     s=s->snext;     *x=p->data;     free(p); #endif     //}     return *x; }  void result(Linklist L) {      Lnode *p;//,*l;     int x;     stack *s=(stack *)malloc(sizeof(stack));     p = L->next;          //指向第一个结点     //l = L;     //L->next=NULL;     while(p)         //将链表结点数据入栈     {          push(&s,p);         p = p->next;     }     while(!empty(s))     {          x = pop(&s,&x);         printf("%d ",x);     } }    int main() {     //Lnode * head;     int num;     Linklist L;     printf("请输入个数:");     scanf("%d",&num);     L=creat(num);     result(L);          /*链栈逆置*/      return 0; }  供参考～  注意建议加上把L链表释放，free


Question: C语言在vs2019中复数的定义与使用方法，跪求大佬！

你看_C_double_complex的定义吧  typedef struct _C_double_complex     {         double _Val[2];     } _C_double_complex; 是一个结构体，该结构体中包含一个double数组，该数组中有2个元素。 以下定义方法在VS2015 C++环境下不报错 _C_double_complex c = { 1.0, 3.0 };

现在的C++标准已经提供了复数类模板complex，但也不可能有 std::complex<float> c=1.0+3.0*i; 的形式。而应该是 std::complex<float> c(1.0, 3.0);


Question: 求大神指教

查一下'1'，'4'，'7'对应的10进制是是多少 '0'对应的是0x30,即48.以此向后计算就知道答案了。

因为你大括号里面写的是字符而不是数字，但是输出的是按数字输出的，实际输出的是1，4，7这几个字符的ASCII码。


Question: C语言编写的计算长方体体积程序，和书上写得一样，但就是不能运行，初学编程，求大神指教

重新建一个控制台程序，把下面的代码全部拷贝进去，再试试 #include "stdafx.h" #include<stdio.h>  #define Height 10  int calculate(int Long,int Width); int main(int argc, char* argv[]) { 	int m_Long; 	 	int m_Width; 	 	int result; 	 	 	printf("长方形的高度为：%d\n",Height); 	 	 	printf("请输入长度\n"); 	 	scanf("%d",&m_Long); 	 	 	printf("请输入宽度\n"); 	 	scanf("%d",&m_Width); 	 	 	result=calculate(m_Long,m_Width); 	 	printf("长方体的体积是："); 	 	printf("%d\n",result); 	return 1;  } int calculate(int Long,int Width)  { 	int result=Long*Width*Height; 	 	return result; }

跟我的一样还是不行，就是输入完三边摁下回车就结束了，没有计算出结果

改完以后报这个错误是什么情况

引用 6 楼 棉猴的回复:VC++6.0我的最爱，没有之一 int calculate(int Long,int Width)//-------去掉分号   {      int result=Long*Width*Height;   return result;//---------把中文字符的逗号改成英文字符的逗号--------- } VC++6.0 C++调试结果  按照你说的改了，还是不能运行鸭，我后来还重新编了一次，就是不能运行，是不是我这软件有问题呀？但是“Hello world”那个简单的c程序又可以运行

引用 4 楼 Nonoas的回复:把报错截图发上来看看 好像没有报错，点击运行程序的时候就响了一声（警告提示音），程序运行的画面都没有出来

把报错截图发上来看看

#include<stdio.h>  #define Height 10  int calculate(int Long,int Width);  int main() {     int m_Long;     int m_Width;     int result;      printf("长方形的高度为：%d\n",Height);       printf("请输入长度\n");     scanf("%d", &m_Long);      printf("请输入宽度\n");     scanf("%d",&m_Width);       result = calculate(m_Long,m_Width);      printf("长方体的体积是：");      printf("%d\n",result);      return 0;  }   //int calculate(int Long,int Width); int calculate(int Long,int Width) {     int result=Long*Width*Height;      //return result；     return result; } 供参考～

我把函数定义的分号删掉了，还是不行呀，我用的是Visual6.0软件

int calculate(int Long,int Width);函数声明结尾用分号，函数定义是不能用分号的，而是括号后直接接大括号，应该删除分号，这样： int calculate(int Long,int Width)  {      int result=Long*Width*Height;   return result； }


Question: 萌新求1简单俄罗斯方块代码

引用 1 楼 @矛盾综合体 的回复：在csdn博文上搜索应该有很多，里面的博主应该有解释或者思路设计谢谢！

如果是电脑上的论坛，可以看到右边和下边好多的，自己找一个合适的吧（手机上不知道什么效果）

在csdn博文上搜索应该有很多，里面的博主应该有解释或者思路设计


Question: c语言简单题…

初始化时第6个字符为‘\0',它是字符串结束符


Question: #软件工程大一新生的期末爆炸#

&按位与运算。 && 布尔运算 真真为真；真假，假假都为假

&&就是看真假的，也就是是否成立或者是否等于0之类的，且&&的优先级比||高，前面d=a/2是赋值表达式且有值，必定为真，后面b==c是判断，结果显然为假，则式子变成    真&&假||！a，a有值，！a为假（非零即为真）式子：真&&假||假  &&优先级高先运算，结果为假。式子：假||假   ||是两边有一个为真即为真，否则为假，故结果为0，也就是假  &&是两边有一个为假结果就是假


Question: 求教！

getchar从输入缓冲读取一个字符，你输入B按一下回车，相当于输入了B和一个换行符。换行符就是\n 对应的ascii码值是10；你可以用%d打印一下m看是不是10；


Question: c语言求教  50分

找到了，话说那个博主现在都没有给我结贴。。。。 链接：https://bbs.csdn.net/topics/395359290#post-410107541

这个题我回答过，几乎差不多吧，就是没有准确率之类的，是三次错误就显示答案，让我找找，看还找不找得到


Question: c语言链表问题

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

这个功能基本都不能实现，改来改去总是有问题

#include<stdio.h> #include<string.h> #include<stdlib.h>         //包含动态内存分配的函数 #include<windows.h>        //包含清屏函数  void menu();               //声明菜单函数 void course_information(); //声明课程信息录入函数 void student_information();//声明学生选课信息录入函数 void lcourse();            //声明课程信息浏览函数 void courseNo();           //声明按课程编号查询函数 void credit();             //声明按学分查询函数 void * malloc(unsigned int size);  void free(void *p); int is_exist(struct course *p,int num);            //声明判断是否存在的函数   void main()                //主函数 {   menu();                  //调用menu函数 }  void menu()                //定义菜单函数 { 	int n,a=1; 	while(a) 	{ 	  system("cls"); 	  printf("\n"); 	  printf("********************学生选修课程系统********************"); 	  printf("\n\n\n"); 	  printf("1.课程信息录入\n"); 	  printf("2.学生选课信息录入\n"); 	  printf("3.课程信息浏览\n"); 	  printf("4.按课程编号查询\n"); 	  printf("5.按学分查询\n"); 	  printf("0.退出系统\n"); 	  printf("请输入数字[0-6]:[ ]\b\b"); 	  scanf("%d",&n); 	  if(n<0||n>6)  a=1; 	  else a=0; 	}     switch(n) 	{ 		case 1: course_information();break; 		case 2: student_information();break; 		case 3: lcourse();break; 		case 4: courseNo();break; 		case 5: credit();break; 		case 0:	exit(0);  //退出 	} }   struct course        //声明课程结构体 {   int num;           //课程编号   char name[20];     //课程名称   char chara[10];    //课程性质   int ttime;         //总学时   int stime;         //授课学识   int ptime;         //实验学时   float credit;      //学分   int term;          //开课学期   struct course *next;//指向结构体变量的指针 };  struct student {   int number;         //学生学号   int c[20];          //课程编号    float total;        //总学分 };   struct course *creatcourse()    //建立课程单链表的函数 {     struct course *head,*tail,*p;  //定义指向结构体变量的指针变量     int num,ttime,stime,ptime,term,n;  	float credit;     char name[20],chara[10];       int size=sizeof(struct course);//将返回的结构体变量的大小赋值给size     head=tail=NULL;  //先使head的值为0，这是链表为空时的情况，head不指向任何结点，即链表无结点     printf("请输入课程编号:");  //数据域成员的输入     scanf("%d",&num);       getchar();     printf("请输入课程名:");       scanf("%s",name);       getchar();       printf("请输入课程性质:");       scanf("%s",chara);       getchar();       printf("请输入总学时:");       scanf("%d",&ttime);       printf("请输入授课学时:");       scanf("%d",&stime);     getchar();     printf("请输入实验学时:");       scanf("%d",&ptime);       getchar();     printf("请输入学分:");       scanf("%f",&credit);       getchar();     printf("请输入开课学期:");       scanf("%d",&term);       getchar();      while(1){  //循环，不断加入新结点         p=(struct course *)malloc(size);  //为新结点开辟动态储存区，把起始地址赋值给p，p所指向的结点就是链表中的第一个结点         p->num=num;              //将输入的数据赋值给p指向的结构体变量         strcpy(p->name,name);           strcpy(p->chara,chara);           p->ttime=ttime;           p->stime=stime;           p->ptime=ptime;           p->credit=credit;           p->term=term;           p->next=NULL;  //指向下一个结点的指针变量为空         if(head==NULL)  //判断新结点是否为头节点             head=p;  //使head指向新开辟的结点，即将第一个结点作为表头         else               tail->next=p;  //尾节点指向新创立的节点         tail=p;  //指向尾节点的指针也指向该节点         do{           printf("请输入课程编号:");           scanf("%d",&num);           n=is_exist(head,num);  //判断课程编号是否存在         if(n==1)               break;           else               printf("您输入的编号已存在,请重新输入!\n");       }while(1);          if(num==0)   //直到新结点的数据成员num为0时跳出循环             break;           else           {   			printf("请输入课程名:");   			scanf("%s",name);   			getchar();   			printf("请输入课程性质:");   			scanf("%s",chara);   			getchar();   			printf("请输入总学时:");   			scanf("%d",&ttime);             getchar(); 			printf("请输入授课学时:");   			scanf("%d",&stime);  			getchar(); 		 			printf("请输入实验学时:");   			scanf("%d",&ptime);  			getchar();  			printf("请输入学分:");   			scanf("%f",&credit);   			getchar();  			printf("请输入开课学期:");   			scanf("%d",&term);              getchar();          }       }       return head;   }    //单链表的插入   struct course *addcourse()   {       struct course *head;     struct course *ptr,*p1,*p2,*p;       char name[20],chara[10];     int size=sizeof(struct course);       int num,ttime,stime,ptime,term,n;  	float credit;     do{           printf("请输入课程编号:");           scanf("%d",&num);           n=is_exist(head,num);           if(n==1)               break;           else               printf("您输入的编号已存在,请重新输入!\n");       }while(1);       printf("请输入课程名:");   	scanf("%s",name);   	getchar();   	printf("请输入课程性质:");   	scanf("%s",chara);   	getchar();   	printf("请输入总学时:");   	scanf("%d",&ttime);     getchar(); 	printf("请输入授课学时:");   	scanf("%d",&stime);  	getchar(); 		 	printf("请输入实验学时:");   	scanf("%d",&ptime);  	getchar();  	printf("请输入学分:");   	scanf("%f",&credit);   	getchar();  	printf("请输入开课学期:");   	scanf("%d",&term);      getchar();      p=(struct course *)malloc(size);       p->num=num;       strcpy(p->name,name);       strcpy(p->chara,chara);       p->ttime=ttime;       p->stime=stime;       p->ptime=ptime;       p->credit=credit;       p->term=term;      p2=head;       ptr=p;       while((ptr->num > p2->num)&&(p2->next!=NULL)){           p1=p2;           p2=p2->next;       }       if(ptr->num <= p2->num){           if(head==p2)  //表头插入             head=ptr;           else{         //表中插入             p1->next=ptr;               p->next=p2;           }       }       else{  //表尾插入         p2->next=ptr;           p->next=NULL;       }       return head;   }   //单链表的删除 struct course *deletecourse() {   struct course *head,*p,*pdel;   int size=sizeof(struct course);     int num;    printf("请输入要删除的课程编号:");   scanf("%d",&num);   if(head==NULL)   {     printf("链表为空，不需要做删除操作!\n"); 	return head;   }   if(head->num==num)  //如果删除的节点为表头节点   {     p=head;//p指向表头结点 	head=head->next;//把下一节点作为新的表头节点 	printf("编号为%d的课程已被删掉!\n",p->num); 	free(p); 	return head;   }   for(p=head;p->next!=NULL;p=p->next)//利用循环查找   {     if(p->next->num==num)//当当前节点的下一节点等于给定的值时，则下一节点就是要删除的节点 	{ 	  pdel=p->next;//pdel指向要删除的节点 	  p->next=pdel->next;//p指向要删除的节点的下一节点 	  printf("编号为%d的课程已被删掉!/n",pdel->num); 	  free(pdel);//删除结构指针pdel指向的节点 	  return head; 	}   }   printf("链表中没有为该编号的课程!\n");   return head; }    //单链表的查找  按课程编号 struct course *searchcourse1() {   struct course *head;   struct course *p=head->next;   int num;   printf("请输入要查询的课程编号:");   scanf("%d",&num);   getchar();   while(p!=NULL&&p->num!=num) 	  p=p->next;   if(p==NULL)   {     printf("找不到符合条件的课程"); 	return NULL;   }   if(p->num==num)   {   	 printf("找到符合条件的课程\n"); 	 printf("课程名为:%s\n",p->name);        printf("课程性质为:%s\n",p->chara);   	 printf("总学时为:%d\n",p->ttime);   	 printf("授课学时为:%d\n",p->stime);        printf("实验学时为:%d\n",p->ptime);        printf("学分为:%f",p->credit);        printf("开课学期为:%d\n",p->term);    }   return p; }   //按学分查找 struct course *searchcourse2() {   struct course *head;   struct course *p=head->next;   int credit;   printf("请输入要查询的课程学分:\n");   scanf("%d",&credit);   if(p==NULL)   {     printf("找不到符合条件的课程"); 	return NULL;   }   for(;p->credit==credit&&p!=NULL;p=p->next)   {   	 printf("找到符合条件的课程\n"); 	 printf("课程编号为:%d\n",p->num); 	 printf("课程名为:%s\n",p->name);        printf("课程性质为:%s\n",p->chara);   	 printf("总学时为:%d\n",p->ttime);   	 printf("授课学时为:%d\n",p->stime);        printf("实验学时为:%d\n",p->ptime);        printf("开课学期为:%d\n",p->term);    }   return p; }     int is_exist(struct course *head,int num)//判断是否重复输入 {   int n=1;   struct course *p;   for(p=head;p;p=p->next)   {       if(p->num==num)       {           n=0;           break;       }   }   return n; }     void course_information() {   struct course *pt;   int b;   char password[5]="1234";   char s[6];   do   { 	  printf("请输入管理员密码:"); 	  scanf("%s",s); 	  if(!strcmp(s,password)) 	  { 		break; 	  } 	  else 	  { 		printf("密码出错!\n"); 	  }   }while(1);   printf("\n\n");   printf("*********************课程信息录入********************\n");   printf("1录入课程            2添加课程              3删除课程\n");   scanf("%d",&b);   getchar();   switch(b)   {   case 1:pt=creatcourse();break;   case 2:pt=addcourse();break;   case 3:pt=deletecourse();break;   }   printf("操作完成!返回菜单\n");   menu(); }   void student_information() {   struct course *p,*head;   int number,num,i=0;   int c[20];   float total=0;   printf("********************学生选课信息录入********************\n");   printf("**********学号:[ ]\b\b");   scanf("%d",&number);   getchar();   while(total<60)   { 	  printf("输入要选择的课程编号\n"); 	  scanf("%d",&num); 	  getchar(); 	  while(num!=0) 	  { 		for(p=head;p;p=p->next) 			if(p->num==num) 			{ 			  total=total+p->credit; 			  c[i]=num;//将选择的课程编号存放在数组中 			  i++; 			} 			scanf("%d",&num); 	  }     }   if(total<60)   {     printf("选修总学分为%d未达到60，选修失败!\n",total); 	system("pause");   }   else   { 	printf("选课成功!\n");   }   system("pause"); }   void lcourse() {   struct course *p,*head;   p=head;   if(p==NULL)   {     printf("无课程信息\n"); 	return;   }   printf("***************************欢迎浏览************************\n");   printf("\n\n");   printf("课程编号     课程名称      课程性质     总学时     授课学时     实验学时     学分     开课学期\n");   for(;p;p=p->next)	   {     printf("%5d%10s%10s%10d%10d%10d%10d%10f%5d\n",p->num,p->name,p->chara,p->ttime,p->stime,p->ptime,p->credit,p->term);//输出链表   }   system("pause"); }  void courseNo() {   struct course *pt;   pt=searchcourse1();   printf("操作完成!返回菜单\n");   menu(); }  void credit() {   struct course *pt;   pt=searchcourse2(); }

直接贴代码吧，可以帮你调一下～

引用 6 楼 自信男孩的回复:楼主的代码里多处用到course的head，但是都是定义的局部变量head，还是没有初始化的head，直接用head->next这样会导致段错误的。  没办法我只能定义全局变量ghead，让其他函数里用ghead。这样改不好，函数之间的耦合很大。 部分函数我用了传参数(head)进去。  供参考吧。建议楼主对于代码架构多做一些努力～ 谢谢你的帮助，我会努力的

我不知道要怎样给head初始化，我的思维不是很好，编程时感觉很乱，学起来也很吃力

#include<stdio.h> #include<string.h> #include<stdlib.h>         //包含动态内存分配的函数 //#include<windows.h>        //包含清屏函数  void menu();               //声明菜单函数 void course_information(); //声明课程信息录入函数 void student_information();//声明学生选课信息录入函数 void lcourse();            //声明课程信息浏览函数 void courseNo();           //声明按课程编号查询函数 void credit();             //声明按学分查询函数 //void * malloc(unsigned int size); void free(void *p); int is_exist(struct course *p,int num);            //声明判断是否存在的函数  struct course *ghead;  //void main()                //主函数 int main()                //主函数 {     menu();                  //调用menu函数 }  void menu()                //定义菜单函数 {     int n,a=1;     while(a)     {         system("cls");         printf("\n");         printf("********************学生选修课程系统********************");         printf("\n\n\n");         printf("1.课程信息录入\n");         printf("2.学生选课信息录入\n");         printf("3.课程信息浏览\n");         printf("4.按课程编号查询\n");         printf("5.按学分查询\n");         printf("0.退出系统\n");         printf("请输入数字[0-6]:[ ]\b\b");         scanf("%d",&n);         if(n<0 || n>6)             a=1;         else             a=0;     }     switch(n)     {         case 1: course_information();break;         case 2: student_information();break;         case 3: lcourse();break;         case 4: courseNo();break;         case 5: credit();break;         case 0: exit(0);  //退出     } }   struct course        //声明课程结构体 {     int num;           //课程编号     char name[20];     //课程名称     char chara[10];    //课程性质     int ttime;         //总学时     int stime;         //授课学识     int ptime;         //实验学时     float credit;      //学分     int term;          //开课学期     struct course *next;//指向结构体变量的指针 };  struct student {     int number;         //学生学号     int c[20];          //课程编号     float total;        //总学分 };   struct course *creatcourse()    //建立课程单链表的函数 {     //struct course *head,*tail,*p;  //定义指向结构体变量的指针变量     struct course *tail,*p;  //定义指向结构体变量的指针变量     int num,ttime,stime,ptime,term,n;     float credit;     char name[20],chara[10];     int size=sizeof(struct course);//将返回的结构体变量的大小赋值给size     //head=tail=NULL;  //先使head的值为0，这是链表为空时的情况，head不指向任何结点，即链表无结点     printf("请输入课程编号:");  //数据域成员的输入     scanf("%d",&num);     getchar();     printf("请输入课程名:");     scanf("%s",name);     getchar();     printf("请输入课程性质:");     scanf("%s",chara);     getchar();     printf("请输入总学时:");     scanf("%d",&ttime);     printf("请输入授课学时:");     scanf("%d",&stime);     getchar();     printf("请输入实验学时:");     scanf("%d",&ptime);     getchar();     printf("请输入学分:");     scanf("%f",&credit);     getchar();     printf("请输入开课学期:");     scanf("%d",&term);     getchar();     while(1){  //循环，不断加入新结点         p=(struct course *)malloc(size);  //为新结点开辟动态储存区，把起始地址赋值给p，p所指向的结点就是链表中的第一个结点         p->num=num;              //将输入的数据赋值给p指向的结构体变量         strcpy(p->name,name);         strcpy(p->chara,chara);         p->ttime=ttime;         p->stime=stime;         p->ptime=ptime;         p->credit=credit;         p->term=term;         p->next=NULL;  //指向下一个结点的指针变量为空         if(ghead==NULL)  //判断新结点是否为头节点             ghead=p;  //使head指向新开辟的结点，即将第一个结点作为表头         else             tail->next=p;  //尾节点指向新创立的节点         tail=p;  //指向尾节点的指针也指向该节点         do {             printf("请输入课程编号:");             scanf("%d",&num);             n = is_exist(ghead,num);  //判断课程编号是否存在             if(n == 1)                 break;             else                 printf("您输入的编号已存在,请重新输入!\n");         } while(1);         if(num==0)   //直到新结点的数据成员num为0时跳出循环             break;         else         {             printf("请输入课程名:");             scanf("%s",name);             getchar();             printf("请输入课程性质:");             scanf("%s",chara);             getchar();             printf("请输入总学时:");             scanf("%d",&ttime);             getchar();             printf("请输入授课学时:");             scanf("%d",&stime);             getchar();             printf("请输入实验学时:");             scanf("%d",&ptime);             getchar();             printf("请输入学分:");             scanf("%f",&credit);             getchar();             printf("请输入开课学期:");             scanf("%d",&term);             getchar();         }     }     return ghead; }  //单链表的插入 struct course *addcourse(struct course *head) {      struct course *ptr,*p1,*p2,*p;     char name[20],chara[10];     int size=sizeof(struct course);     int num,ttime,stime,ptime,term,n;     float credit;     do{         printf("请输入课程编号:");         scanf("%d",&num);         n = is_exist(head,num);         if(n==1)             break;         else             printf("您输入的编号已存在,请重新输入!\n");     }while(1);     printf("请输入课程名:");     scanf("%s",name);     getchar();     printf("请输入课程性质:");     scanf("%s",chara);     getchar();     printf("请输入总学时:");     scanf("%d",&ttime);     getchar();     printf("请输入授课学时:");     scanf("%d",&stime);     getchar();     printf("请输入实验学时:");     scanf("%d",&ptime);     getchar();     printf("请输入学分:");     scanf("%f",&credit);     getchar();     printf("请输入开课学期:");     scanf("%d",&term);     getchar();     p=(struct course *)malloc(size);     p->num=num;     strcpy(p->name,name);     strcpy(p->chara,chara);     p->ttime=ttime;     p->stime=stime;     p->ptime=ptime;     p->credit=credit;     p->term=term;     p2=head;     ptr=p;     while((ptr->num > p2->num)&&(p2->next!=NULL)){         p1=p2;         p2=p2->next;     }     if(ptr->num <= p2->num){         if(head==p2)  //表头插入             head=ptr;         else{         //表中插入             p1->next=ptr;             p->next=p2;         }     }     else{  //表尾插入         p2->next=ptr;         p->next=NULL;     }      return head; }   //单链表的删除 struct course *deletecourse(struct course *head) {     //struct course *head,*p,*pdel;     struct course *p,*pdel;     //int size=sizeof(struct course);     int num;     printf("请输入要删除的课程编号:");     scanf("%d",&num);     if(head==NULL)     {         printf("链表为空，不需要做删除操作!\n");         return head;     }     if(head->num==num)  //如果删除的节点为表头节点     {         p=head;//p指向表头结点         head=head->next;//把下一节点作为新的表头节点         printf("编号为%d的课程已被删掉!\n",p->num);         free(p);         return head;     }     for(p=head;p->next!=NULL;p=p->next)//利用循环查找     {         if(p->next->num==num)//当当前节点的下一节点等于给定的值时，则下一节点就是要删除的节点         {             pdel=p->next;//pdel指向要删除的节点             p->next=pdel->next;//p指向要删除的节点的下一节点             printf("编号为%d的课程已被删掉!/n",pdel->num);             free(pdel);//删除结构指针pdel指向的节点             return head;         }     }     printf("链表中没有为该编号的课程!\n");     return head; }    //单链表的查找  按课程编号 struct course *searchcourse1() {     //struct course *head;     //struct course *p=head->next;     struct course *p = ghead->next;     int num;     printf("请输入要查询的课程编号:");     scanf("%d",&num);     getchar();     while(p!=NULL&&p->num!=num)         p=p->next;     if(p==NULL)     {         printf("找不到符合条件的课程");         return NULL;     }     if(p->num==num)     {         printf("找到符合条件的课程\n");         printf("课程名为:%s\n",p->name);         printf("课程性质为:%s\n",p->chara);         printf("总学时为:%d\n",p->ttime);         printf("授课学时为:%d\n",p->stime);         printf("实验学时为:%d\n",p->ptime);         printf("学分为:%f",p->credit);         printf("开课学期为:%d\n",p->term);     }     return p; }   //按学分查找 struct course *searchcourse2() {     //struct course *head;     struct course *p = ghead->next;     int credit;     printf("请输入要查询的课程学分:\n");     scanf("%d",&credit);     if(p==NULL)     {         printf("找不到符合条件的课程");         return NULL;     }     for(;p->credit==credit&&p!=NULL;p=p->next)     {         printf("找到符合条件的课程\n");         printf("课程编号为:%d\n",p->num);         printf("课程名为:%s\n",p->name);         printf("课程性质为:%s\n",p->chara);         printf("总学时为:%d\n",p->ttime);         printf("授课学时为:%d\n",p->stime);         printf("实验学时为:%d\n",p->ptime);         printf("开课学期为:%d\n",p->term);     }     return p; }     int is_exist(struct course *head,int num)//判断是否重复输入 {     int n=1;     struct course *p;      for(p=head;p;p=p->next)     {         if(p->num==num)         {             n=0;             break;         }     }      return n; }     void course_information() {     struct course *pt = ghead;     int b;     char password[5]="1234";     char s[6];     do     {         printf("请输入管理员密码:");         scanf("%s",s);         if(!strcmp(s,password))         {             break;         }         else         {             printf("密码出错!\n");         }     }while(1);     printf("\n\n");     printf("*********************课程信息录入********************\n");     printf("1录入课程            2添加课程              3删除课程\n");     scanf("%d",&b);     getchar();     switch(b)     {         case 1:pt=creatcourse();break;         case 2:pt=addcourse(pt);break;         case 3:pt=deletecourse(pt);break;     }     printf("操作完成!返回菜单\n");     menu(); }   void student_information() {     struct course *p;//,*head;     int number,num,i=0;     int c[20];     float total=0;      printf("********************学生选课信息录入********************\n");     printf("**********学号:[ ]\b\b");     scanf("%d",&number);     getchar();     while(total<60)     {         printf("输入要选择的课程编号\n");         scanf("%d",&num);         getchar();         while(num!=0)         {             for(p=ghead;p;p=p->next)                 if(p->num==num)                 {                     total=total+p->credit;                     c[i]=num;//将选择的课程编号存放在数组中                     i++;                 }             scanf("%d",&num);         }     }     if(total<60)     {         //printf("选修总学分为%d未达到60，选修失败!\n", total);         printf("选修总学分为%f未达到60，选修失败!\n", total);         system("pause");     }     else     {         printf("选课成功!\n");     }     system("pause"); }   void lcourse() {     struct course *p;//,*head;     //p = head;     p = ghead;     if(p==NULL)     {         printf("无课程信息\n");         return;     }     printf("***************************欢迎浏览************************\n");     printf("\n\n");     printf("课程编号     课程名称      课程性质     总学

我知道了，应该是p->num==num


Question: 这种方式的结构体全部都在栈内存中吗？

栈内存的变量定义需要是在函数内定义的，即是局部变量，局部变量是在栈上申请～

是的。。。。。。。。。


Question: 结构体复制现象求解释

*book2 = *book1 确实是把所有的元素复制了一份儿给了*book2  这也就是为什么说struct也是值类型的原因  赋值操作，会把结构体里面的所有元素，一摸一样的复制一份儿给到另外一个结构体。


Question: 二维数组引用

*(a+n)是第n行第0个元素的地址 *(a+n)+m是第n行第m个元素的地址 *(*(a+n)+m)是第n行第m个元素

二维数组  a[x][y] *(a+n) 是一个地址啊，谁说不是地址的啊  *(a+n) 的 值 和  &a[n][0]是相等的   *(a+n)+m 是 &a[n][m] , 不是值，还是地址


Question: C语言函数部分  先说一下，我的技术比较low，不要见笑

引用 8 楼 遇见女神的回复:按照题目，有F(1)=2，F(2)=3，F(3)=5，F(4)=F(3)+F(2)-F(1)，也就是F(4)=5+3-2=6，F(5)=F(4)+F(3)-F(2)，也就是F(5)=6+5-3=8； 你代码却定义是f3=2，f2=3，f1=5，且f4=f3+f2-f1，也就是f4=2+3-5=0，错误了。 哦，明白了，我太粗心了，谢谢

链接给我吧我跑一遍

引用 5 楼 Chris Brown的回复:[quote=引用 4 楼 weixin_45746353的回复:][quote=引用 3 楼 Chris Brown的回复:]答案错误应该也有对应的输入输出提示吧 没有呢，可是题目中说n是大于四的[/quote] 试着return f3呗不从标准输出输出[/quote] #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> int f(int n) {     int f1,f2,f3,f4,i;     f1=2;     f2=3;     f3=5;     for(i=1;i<=n-3;i++)     {         f4=f1+f2-f3;         f1=f2;         f2=f3;         f3=f4;     }     printf("%d",f3); } int main() {     int n;     scanf("%d",&n);     f(n);      } 是这样改么？ 可还是不对

引用 4 楼 weixin_45746353的回复:[quote=引用 3 楼 Chris Brown的回复:]答案错误应该也有对应的输入输出提示吧 没有呢，可是题目中说n是大于四的[/quote] 试着return f3呗不从标准输出输出

引用 3 楼 Chris Brown的回复:答案错误应该也有对应的输入输出提示吧 没有呢，可是题目中说n是大于四的

答案错误应该也有对应的输入输出提示吧

是不是因为没考虑n小于1的情况

他是叫你用递归做吧？


引用 2 楼 寻开心 的回复:借助第二个临时栈，要删除的时候，从栈弹出内容，push到另外一个临时栈里面，直到弹出要删除的之后，吧临时栈的内容再弹出放回原来的栈里面。 当然，这只的是只利用标准的栈的操作 如果你用数组来实现的话，完全可以删除中间的，然后移动数据后修改栈指针来实现。 +1

用两个或三个栈


Question: 数组问题求助，删除一个字符串中某个字符

引用 9 楼 棉猴的回复:[quote=引用 8 楼 weixin_45880956 的回复:] [quote=引用 7 楼 棉猴的回复:]VC++6.0是我的最爱，没有之一，握个抓 把str和str1进行初始化即可。 	char str[100] = {0}, str1[100] = {0}, p; VC++6.0调试结果  的确好了，为啥呢，初始化起什么作用[/quote] 初始化相当于把数组str1和str都填充了'\0'，即字符串结束符，所以printf()函数遇到'\0'就会停止输出，不会再输出其他的内容了。[/quote] 🤝(୨୧•͈ᴗ•͈)◞谢谢

引用 8 楼 weixin_45880956 的回复:[quote=引用 7 楼 棉猴的回复:]VC++6.0是我的最爱，没有之一，握个抓 把str和str1进行初始化即可。 	char str[100] = {0}, str1[100] = {0}, p; VC++6.0调试结果  的确好了，为啥呢，初始化起什么作用[/quote] 初始化相当于把数组str1和str都填充了'\0'，即字符串结束符，所以printf()函数遇到'\0'就会停止输出，不会再输出其他的内容了。

引用 7 楼 棉猴的回复:VC++6.0是我的最爱，没有之一，握个抓 把str和str1进行初始化即可。 	char str[100] = {0}, str1[100] = {0}, p; VC++6.0调试结果  的确好了，为啥呢，初始化起什么作用

引用 5 楼 Chris Brown的回复:[quote=引用 2 楼 weixin_45880956的回复:][quote=引用 1 楼 Chris Brown的回复:]如果是烫烫烫烫烫烫的问题，这种乱码最常见的地方是Visual Studio里。  Visual Studio中，未初始化的栈空间用0xCC填充，而未初始化的堆空间用0xCD填充。  而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。 那个我有点听不懂，能不能帮我看一下程序哪里错了，我用的vc++6.0[/quote] 你可以试着最后一位赋值为结束符\0试试[/quote] 好得，我去试试，谢谢啦

引用 2 楼 weixin_45880956的回复:[quote=引用 1 楼 Chris Brown的回复:]如果是烫烫烫烫烫烫的问题，这种乱码最常见的地方是Visual Studio里。  Visual Studio中，未初始化的栈空间用0xCC填充，而未初始化的堆空间用0xCD填充。  而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。 那个我有点听不懂，能不能帮我看一下程序哪里错了，我用的vc++6.0[/quote] 你可以试着最后一位赋值为结束符\0试试

引用 2 楼 weixin_45880956的回复:[quote=引用 1 楼 Chris Brown的回复:]如果是烫烫烫烫烫烫的问题，这种乱码最常见的地方是Visual Studio里。  Visual Studio中，未初始化的栈空间用0xCC填充，而未初始化的堆空间用0xCD填充。  而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。 那个我有点听不懂，能不能帮我看一下程序哪里错了，我用的vc++6.0[/quote] 我用的就不是VC所以跑你的程序就正常

引用 2 楼 weixin_45880956的回复:[quote=引用 1 楼 Chris Brown的回复:]如果是烫烫烫烫烫烫的问题，这种乱码最常见的地方是Visual Studio里。  Visual Studio中，未初始化的栈空间用0xCC填充，而未初始化的堆空间用0xCD填充。  而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。 那个我有点听不懂，能不能帮我看一下程序哪里错了，我用的vc++6.0[/quote] 你的程序没啥问题，主要是初始化数组

引用 1 楼 Chris Brown的回复:如果是烫烫烫烫烫烫的问题，这种乱码最常见的地方是Visual Studio里。  Visual Studio中，未初始化的栈空间用0xCC填充，而未初始化的堆空间用0xCD填充。  而0xCCCC和0xCDCD在中文GB2312编码中分别对应“烫”字和“屯”字。 那个我有点听不懂，能不能帮我看一下程序哪里错了，我用的vc++6.0

这是字符串没有结束标志‘\0’导致的，你在便利完字符串退出循环的时候加一句： str1[j] = '\0'; 试试

这是字符串没有结束标志‘\0’导致的，你在便利完字符串退出循环的时候加一句：

scanf("%c", &p);  //把%s改成%c


Question: 新手学编程，帮我看看这两个程序有什么区别，输出的结果为什么不一样？

一个是sum=sum+1 ，每次只加1 另一个是sum=sum+i，每次加的i值，下次都递增了

多谢大家啊，我当时对着一句句的看，都没发现i和1不一样，老了眼花了

上面已经说了原因了，+1意思可以理解为有多少个数是符合条件的，+i才是总值，这边就不说了，提个建议，for循环语句的{} 不要省略，我知道它可以省略，但是我们默认的格式是不省略符号的，现在程序短看着没影响，但是以后多了如果出错不好调试找错，要养成良好的编码风格哦

sum = sum + i;和sum = sum + 1;注意sum加的值是不一样的～

第一个程序是 sum=sum+1 ;第二个程序是   sum=sum+i; 当然不同了.


Question: 关于指针数组的问题,指针数组中存放的是指针(地址)吗?

引用 1 楼 自信男孩 的回复:因为%s对应的就应该是char *类型，而color[i]就是char *。如果color+i是不对的，因为color是char **，color+i也是char ** 好的  谢谢


Question: 急求大佬，c语言课设

这个问题表明你新建的是一个main类型函数（控制台程序），而你的程序中有窗口程序，显然是个win32函数，解决方法： 项目－属性－链接器－系统－子系统－把控制台该为windows


Question: 求问！！！

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

引用 2 楼 weixin_45798902 的回复:[quote=引用 1 楼 寻开心的回复:]除了基础的数字类型（int，float，double这些）以及char类型，和对应的指针类型 剩下都是构造类型吧。 数组，结构， 联合，枚举， typedef定义出来的也算是吧 导出类型是个什么鬼？ 没有注意这个概念 我也不知道，书上的，哭了[/quote] 导出类型是返回值类型嘛？返回值类型的话就多了阿，前面的那些，指针（地址），结构体，引用，包括容器都可以返回

这个问题好像除了考试考一个选择题意外没啥用

引用 1 楼 寻开心的回复:除了基础的数字类型（int，float，double这些）以及char类型，和对应的指针类型 剩下都是构造类型吧。 数组，结构， 联合，枚举， typedef定义出来的也算是吧 导出类型是个什么鬼？ 没有注意这个概念 我也不知道，书上的，哭了


Question: 链表求救

只从代码上看ElementType还没有定义呢   看书不能断章取义， 这种代码往往都是前后关联的，前面有过类似的定义才这样的 更不能完全照搬， 要先明白它的意思再去复制 就如同在这个论坛里面，不写自己的代码，上来要别人原码一样。  自己不理解没有想法，要来了代码就更看不懂 从来都是看别人的代码比自己写还难 工作了，也是都不愿意接受别人的代码继续写，而是宁愿自己重新来 原因就是理解他人的想法比自己做一遍更难  回到这个问题上 ElementType表示链表包含的数据的类型，比如，你可以在顶部增加一一个 typedef int ElementType； 来解决这个定义缺失的问题


Question: 明天课设答辩急需大佬！！！！麻烦大佬讲一下这个程序我看不懂了！！！


Question: C语言求矩阵的特征值


Question: 请问这个警告是什么意思，要怎么处理

VC++6.0，我最喜欢，没有之一。 不过在VS2015中你可能会理解的更为深刻 int main() { 	int i; 	return 0; } 此时，编译器的警告信息是  解决的方法是 1 注释掉该行代码 2 定义额外的宏 #define UNUSED_VARIANT(x) ((void)(x)) int main() { 	int i; 	UNUSED_VARIANT(i); 	return 0; }


Question: 这是什么原因引起的

30行的函数，返回的是一个指针类型p，函数名里面是返回类型是stu，不一致。  30行里的*靠着stu，写成stu*,不要和函数名写在一起。  stu* find(stu* head, int s)

函数声明别写在main里，别写在任何函数里。而且你这也不需要单独声明啊

函数名冲突了


Question: 结构体写入文件

VS2015 C++环境调试

引用 1 楼 棉猴的回复:VC++6.0，我的最爱，但是还是上代码吧 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> struct { 	int num; 	char name[10]; }body[100],t; void practice(); void menue(); void set(); void test(); void look(); void back(); void rank(); int main() { FILE*f1; 	if(f1=fopen("D:\\测验成绩.txt", "r")==NULL) 	{f1=fopen("D:\\测验成绩.txt","w");} 	else 	{f1=fopen("D:\\测验成绩.txt","r");} 	fclose(f1); 	printf("***第一次使用本程序先进行设置***\n"); 	menue(); return 0; } void practice() { 	FILE*fp; 	int a,b,c,d,m,i,g,h,e=0; 	char f; 	fp=fopen("D:\\设置文件.txt","r");     fscanf(fp,"%d,%d",&g,&h); 	fclose(fp); 	for(i=1;i<i+1;i++) 	{ 	printf("1.加法\n"); 	printf("2.减法\n"); 	printf("3.乘法\n"); 	printf("4.除法\n"); 	scanf("%d",&m); 	switch(m) 	{case 1: 	{  	srand((unsigned)time(NULL)); 	a=rand()%g+h; 	b=rand()%g+h; printf("%d+%d=\n",a,b); printf("请输入你的答案"); d=a+b; scanf("%d",&c); if(c==d) {printf("答案正确\n"); e=e+1;} else {printf("答案错误\n"); printf("正确结果为%d\n",d);}break;} 	case 2:{ 	srand((unsigned)time(NULL)); 	a=rand()%g+h; 	b=rand()%g+h; printf("%d-%d=\n",a,b); printf("请输入你的答案"); d=a-b; scanf("%d",&c); if(c==d) {printf("答案正确\n"); e=e+1;} else {printf("答案错误\n"); printf("正确结果为%d\n",d);}break;} 	case 3:{ 	srand((unsigned)time(NULL)); 	a=rand()%g+h; 	b=rand()%g+h; printf("%d*%d=\n",a,b); printf("请输入你的答案"); d=a*b; scanf("%d",&c); if(c==d) {printf("答案正确\n"); e=e+1;} else {printf("答案错误\n"); printf("正确结果为%d\n",d);}break;} 	case 4:{ 	srand((unsigned)time(NULL)); 	a=rand()%g+h; 	b=rand()%g+h; printf("%d/%d=\n",a,b); printf("请输入你的答案"); d=a/b; scanf("%d",&c); if(c==d) {printf("答案正确\n"); e=e+1;} else {printf("答案错误\n"); printf("正确结果为%d\n",d);}break;} 	} 	printf("总答题数为%d\n",i); 	printf("正确答题数为%d\n",e); 	printf("正确率为%.2f%%\n",e*1.0*100/i); 	printf("是否返回主菜单Y/N?\n"); 	getchar(); 	if(getchar()=='Y') 	{menue(); 	break;} 	}   }void menue() { 	int n; 	printf("算数练习\n\n"); 	printf("1.练习\n"); 	printf("2.测验\n"); 	printf("3.设置\n"); 	printf("4.查看测验成绩\n"); 	printf("5.排行榜\n"); 	printf("0.退出\n"); 	scanf("%d",&n); switch(n) 	{case 1:practice();break; case 2:test();break; case 3: set();break; case 4:look();break; case 5:rank();break; case 0: back();break; default: printf("输入错误"); } }void set() { 	int a,b,c,d,e,i; 	FILE*fp; fp=fopen("D:\\设置文件.txt","w+"); printf("请选择你计算的数字位数,支持1到3位\n"); scanf("%d",&i); switch(i) { case 1:a=9,b=1;break; case 2:a=90,b=10;break; case 3:a=900,b=100;break; default :printf("输入错误"); } 	printf("请输入测验模式的总题数\n"); 	scanf("%d",&c); 	printf("请输入测验模式的总分\n"); 	scanf("%d",&d); fprintf(fp,"%d,%d,%d,%d",a,b,c,d); fclose(fp); menue(); }void test() { 	FILE*fp,*f1; 	char name[10],ch; 	int a,b,c,d,i,g,h,m,f,k=0,s,w,p=0; 	if(f1=fopen("D:\\结构体数据.txt", "r")==NULL) 	{f1=fopen("D:\\结构体数据.txt","w"); 	fprintf(f1,"%d",p);} 	else 	{f1=fopen("D:\\结构体数据.txt","r"); 	fscanf(f1,"%d",&p); 	p=p+1; 	fclose(f1); 	f1=fopen("D:\\结构体数据.txt","w"); 	fprintf(f1,"%d",p);  	} 	fclose(f1); 	printf("请输入您的姓名\n"); 	scanf("%s",&name); 	fp=fopen("D:\\设置文件.txt","r");     fscanf(fp,"%d,%d,%d,%d",&g,&h,&f,&s); 	fclose(fp); 	fp=fopen("D:\\测试数据文件.txt","w+"); 	fprintf(fp,"题 目\t测验后的结果\t参考答案\n"); 	fclose(fp); 	for(i=0;i<f;i++) 	{ 	printf("1.加法\n"); 	printf("2.减法\n"); 	printf("3.乘法\n"); 	printf("4.除法\n"); 	scanf("%d",&m); 	switch(m) 	{case 1: 	{  	srand((unsigned)time(NULL)); 	a=rand()%g+h; 	b=rand()%g+h; printf("%d+%d=\n",a,b); printf("请输入你的答案"); d=a+b; scanf("%d",&c);// if(c==d) {k=k+1;} fp=fopen("D:\\测试数据文件.txt","a"); fprintf(fp,"%d+%d=\t  %d\t                %d\n",a,b,c,d); fclose(fp);break;} 	case 2: 		{srand((unsigned)time(NULL)); 	a=rand()%g+h; 	b=rand()%g+h; printf("%d-%d=\n",a,b); printf("请输入你的答案"); d=a-b; scanf("%d",&c);// if(c==d) {k=k+1;} fp=fopen("D:\\测试数据文件.txt","a"); fprintf(fp,"%d-%d=\t  %d\t                %d\n",a,b,c,d); fclose(fp);break;} 	case 3: 		{srand((unsigned)time(NULL)); 	a=rand()%g+h; 	b=rand()%g+h; printf("%d*%d=\n",a,b); printf("请输入你的答案"); d=a*b; scanf("%d",&c);// if(c==d) {k=k+1;} fp=fopen("D:\\测试数据文件.txt","a"); fprintf(fp,"%d*%d=\t  %d\t                %d\n",a,b,c,d); fclose(fp);break;} 	case 4: 		{srand((unsigned)time(NULL)); 	a=rand()%g+h; 	b=rand()%g+h; printf("%d/%d=\n",a,b); printf("请输入你的答案"); d=a/b; scanf("%d",&c);// if(c==d) {k=k+1;} fp=fopen("D:\\测试数据文件.txt","a"); fprintf(fp,"%d/%d=\t  %d\t                %d\n",a,b,c,d); fclose(fp);break;} 	}}// fp=fopen("D:\\测试数据文件.txt","a"); fprintf(fp,"答对题数%d\t答错题数%d\t您的分数为%.2f分\t姓名%s\n",k,(i-k),k*s*1.0/f,name); fclose(fp);     fp = fopen("D:\\测试数据文件.txt", "r");     f1 = fopen("D:\\测验成绩.txt", "a");     while((w = fgetc(fp)) != EOF)         fputc(w,f1);     fcloseall(); fp=fopen("D:\\测试数据文件.txt","r"); 	while( (ch=fgetc(fp)) != EOF ) 	{         putchar(ch);     } 	fclose(fp); 	body[p].num=(k*s/f); 	strcpy(body[p].name,name); 	fp=fopen("D:\\排行榜数据.txt","a");  	{fwrite(&body[p],sizeof(body),1,fp);} 	fclose(fp);   	menue();  }void look() { char ch; FILE*fp; fp=fopen("D:\\测验成绩.txt","r"); 	while( (ch=fgetc(fp)) != EOF ) 	{         putchar(ch);     } 	fclose(fp);      menue(); }void back() {exit(0); }void rank() {    }

VC++6.0，我的最爱，但是还是上代码吧


Question: 请大佬指教！

提供完整函数的代码，以及调用该函数的代码～


Question: 文件一直保存不了 急

#include<stdio.h> #include<stdlib.h> #include<string.h> //#include<conio.h>  /*包含头文件*/  /**定义结构体**/ struct student {     char name[20];     char num[30];     char sex[2];     int th; }stu[10]; /*定义结构体数组*/  /*自定义函数的声明*/ void menu(); void select(); void check(); void manage(); void input(); void save(); void search(); void modify(); void calculate(); void quit(); /**全局变量**/ FILE*fp; /**主函数**/ int main() {     int i=1;     stu[0].th=0;     stu[1].th=0;     stu[2].th=0;     stu[3].th=0;     stu[4].th=0;     stu[5].th=0;     stu[6].th=0;     stu[7].th=0;     stu[8].th=0;     stu[9].th=0;     menu();     while (i!=0) {         select ();         //if(i!='n')             menu();     } } /**目录函数**/ void menu () {     printf("\t\t*****\n");     printf("      欢迎使用学生考勤系统\n");     printf("       本科课程共四节\n");     printf("       1.学生每日签到\n");     printf("       2.学生信息管理系统\n");     printf("       3.考勤评定分数\n");     printf("       4.退出考勤系统\n");     printf("*请选择相应的数字*\n");     printf("\t\t*****\n"); } /*选择函数*/ void select() {     int m;     scanf("%d",&m);     switch(m)     {         case 1:check();break;         case 2:manage();break;         case 3:calculate();break;         case 4:quit();break;         default:printf("输入错误请重新输入\n");     } /*条件选择*/ } /*签到函数*/ void check() {     int i,n;     char no[30];     system("cls");     printf("请输入学号:\n");     scanf("%s",no);     //for(i=0;i<10;i++);    //多一个分号;     for(i=0;i<10;i++)     {         if(strcmp(no, stu[i].num)==0)         {             stu[i].th++;             printf("签到成功！\n");             printf("请输入考勤系统功能数字:\n");             n = 5;         }     }     if (n!=5)         printf("查无此人\n");     save(); } /**信息管理函数**/ void manage() {     int a,i=1;     system("cls");     printf("\n");     printf("\t\t **\n");     printf("\t\t\t学生信息管理系统\n");     printf("1.添加学生信息\n");     printf("2.查询学生信息\n");     printf("3.修改学生信息\n");     printf("4.退出学生信息管理系统\n");     printf("\t\t**\n");     scanf("%d",&a);     while(i!=0)     {if (a<=3&&a>=0)         {             switch(a)             {                 case 1:input();break;                 case 2:search();break;                 case 3:modify();break;             }             printf("请输入信息管理功能数字\n");             scanf("%d", &a);         }         else if (a==4)         {             system("cls");             break;         }         else             printf("错误！请重新输入：\n");         scanf("%d",&a);     } } /**输入函数**/ void input() {     int i;     for (i=0;i<10;i++)     {         printf("请输入第%d位学生姓名:\n",i+1);         scanf("%s",stu[i].name);         printf("请输入学生学号:\n");         scanf("%s",stu[i].num);         printf("请输入学生性别(m:男生 f:女生):\n");         scanf("%s",stu[i].sex);     }     save(); } /**查询函数**/ void search() {     int i,n;     char no[30];     printf("请输入要查找的学生学号:\n");     scanf("%s",no);     for(i=0;i<10;i++)     {         if(strcmp(no,stu[i].num)==0)         {             printf("学生的基本信息：%-5s,%-5s,%-3s\n\n",stu[i].name,stu[i].num,stu[i].sex);             n=5;         }     }     if (n!=5)         printf("查无此人\n"); } /**保存函数**/ void save() {     int i;     FILE*fp;     fp=fopen("stu.txt","wb");     //if ((fp=fopen("stu.list","wb"))==NULL);    //多一个分号     if ((fp=fopen("stu.list","wb"))==NULL)     {         printf("can not open file\n");         exit(0);     }     for(i=0;i<10;i++)         if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)             printf("file write error\n");     fclose (fp);     printf("已保存\n"); } /**修改函数**/ void modify() {     int i,j,c;     char k[30];     FILE *fp;     if((fp=fopen("stu.txt","rb"))==NULL)     {         printf("can not open file\n");         return;     }     printf("\n请输入要修改的学生的学号:");     scanf("%s",k);     for(i=0;i<10;i++)     {         fread(&stu[i],sizeof(struct student),1,fp);         for (j=0;j<10;j++)         {             if (strcmp (k,stu[i].num)==0)             c = i;             //fclose (fp);             break;         }     }     fclose(fp);     printf("请输入新修改的内容:\n");     printf("请输入学生姓名：\n");     scanf("%s",stu[c].name);     printf("请输入学生学号:\n");     //scanf("%d",stu[c].num);     scanf("%s",stu[c].num);     printf("请输入学生性别\n");     scanf("%s", stu[c].sex);     save(); } /*考勤评定函数*/ void calculate() {     int i;     system("cls");     printf("课程参考考勤评分如下\n");     for(i=0;i<10;i++)     {         //printf("学号:%s 姓名%s 分数%d,stu[i].num,stu[i].name,stu[i].th*25");         printf("学号:%s 姓名%s 分数%d",stu[i].num,stu[i].name,stu[i].th*25);         printf("\n");     }     printf("请输入考情系统功能数字:\n\n"); }  /**退出函数**/ void quit() {     printf("\n");     printf("\n");     printf("\t\t\t谢谢使用本系统！\n");     printf("\t\t\t ** 再见**\n");     printf("\t\t 制作人邱哲宇\n");     exit(0); } 供参考～  代码有多处问题，建议对比找一下原因～


Question: 为什么运行不对，小白跪求大佬。

引用 3 楼 user-2的回复:说一下你的逻辑，也可以把运行情况发出来看看 我输入abcd输出是abcd****

说一下你的逻辑，也可以把运行情况发出来看看

引用 1 楼 user-2的回复:s的长度不足，要定的大一点 不对，改了运行结果一样错的

s的长度不足，要定的大一点


Question: 哪位大佬帮看看代码哪里有错

引用 5 楼 weixin_45798902的回复:[quote=引用 楼主 qq_46052581的回复:] #include<stdio.h> int main() {     int i,j,n;     scanf("%d",&n);     for(j=2;j<=n;j++){         for(i=2;i<=j/2;i++)           if(j%i==0)               break;           if(i>j/2)                 printf("%d ",j);}     return 0; }[/quote] 不过，我这个是输入2到n的素数

引用 楼主 qq_46052581的回复: #include<stdio.h> int main() {     int i,j,n;     scanf("%d",&n);     for(j=2;j<=n;j++){         for(i=2;i<=j/2;i++)           if(j%i==0)               break;           if(i>j/2)                 printf("%d ",j);}     return 0; }

引用 楼主 qq_46052581的回复: 我刚做的，等等发给你

另外，另个printf也有问题，你应该加上%d，这样才能和后面的变量匹配。即使是输出也应该输出a，而不是b吧。

定义了两个b，而循环中的b作用范围是for循环，所以if (b > a)这里的b不是循环里的b，但是楼主应该用循环里的b才对。  所以，去掉for循环里int b = 0；的int，这样for循环里的b就是上面定义的b，因此循环之后用的b就是对的。  另外，scanf之后，需要对a进行判断，if (a < 2) return -1;直接返回就好了，或者打印一条提示，然后再返回～

首先有点不严谨，如果是1呢？b=2>a。而且b是一直加到等于a的，所有a%b最后肯定可以break，怎么超过a？


Question: 错在哪里？

引用 2 楼 自信男孩的回复:两处问题，scanf改成scanf_s，对于%d这样改是可以的。 第二处是printf的双引号注意下不能全放在双引号里。想一下原因～ scanf改成scanf_s就能运行了

引用 3 楼 csucxy的回复:1楼指出错误是肯定的，不过你的error C4996错误是新版VS认为scanf不安全引起的，解决办法：在程序的最开始加入如下一行： #define _CRT_SECURE_NO_WARNINGS 它的作用就是取消VS对这种“错误”的报错。 当然，也可以遵循VS的建议，用scanf_s替换scanf。 总之，VS反馈的提示信息应该仔细看看，其实人家已经提示得相当明显了。 自学，很多东西都是听免费课程，靠自己反应

printf 那里错了。


Question: 急急急！C语言题

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

先吧思路写下来。再转换成语言描述，再调试。

建议自己动手试一下哦，编程还是要自己写了才会，这个不难，要是不会可以私信教你，但是还是要自己先想一下

#include<stdio.h> int main(void) {     float sum,weight,price;     sum=0;     scanf("%f",&weight);     while(weight<0){     printf("重量不能为负数！请重新输入！\n");     scanf("%f",&weight); }     if(weight<=10&&weight>=0){         price=5; }     if(weight>10){         price=4.5; }     sum=weight*price;     printf("总价\t%f",sum);     return 0; }  手机不易，给个采纳谢谢

起码自己先动手试试，简单的几条语句，定义几个变量的问题～

用if   else语句啊，判断是10斤内还是超过10斤，然后分别计算优惠值


Question: C语言方面的问题 按要求编程的 求解

pow（double x， double n）函数，了解一下 #include 《math.h》  整数的话，你自己做乘法吧。  0.5次方，对应的是sqrt（x）函数 绝对值 是 fabs函数

刚学c语言不知道怎么表示n次方


Question: C语言求一数三平方

//#include"stdio.h" //#include"math.h" #include <stdio.h> #include <math.h>  void f(void) {     int i,n0,n1,n2;     for(i=100000;i<999999;i++)     {         n0 = sqrt(i);         n1 = sqrt(i/1000);         n2 = sqrt(i%1000);         if(n0*n0 == i && n1 * n1 == i/1000 && n2 * n2 == i%1000)             printf("%d\n",i);     } }  int main() {     //int y;     //y=f();     f();     //printf("%d",y);     //     return 0; } 供参考～  f定义了返回值，但是f函数里有return语句吗？  从功能上看，无需返回值，因此定义为void f即可～

引用 1 楼 喜欢做我自己的回复:函数原型为double sqrt(double); 将变量设为double类型，不要用int 型 他是要取整，并没有问题呀 楼主，f没有return，所以y没有意义

可以运行，结果正确，感谢🙏


Question: 这个小白有问题

急功近利，误人子弟

不用换来换去的   一点儿错误没有的书太罕见了。改了，继续看就是了 这种最基础的， 都差不多

😂😂😂大佬们有没有推荐的教材啊。

错误的教材，扔了得了。

应该是 %= 还差不多， 没有～= 这个运算啊

～  是单目运算符 ， 位运算，逐个位取反  ～= 是个神马东西啊 ？！


Question: 这段代码是什么意思

是struct Student 还是 Student，这是个问题。

定义了一个结构， 并声明了一个结构类型的数组   看书吧  结构struct 一定专门有一章在讲它


Question: C语音作业，求大佬指教

这不是C语言的语法，是C++的语法

cin >> a; 表示输入一个值到变量a的内存空间

m = (m/i)

引用 1 楼 喜欢做我自己的回复:cin >> a; 表示输入一个值到变量a的内存空间 能再请教你一个问题吗？ m/=i什么意思


Question: c语言编程

这个就是改变了这个数组的值，k=3,s[k-1+i]的意思就是s数组的2+i下标的这个地址的值，也就是s[2],因为数组下标从0开始是第一个，所以s[2]是s数组这个字符串的第三个字符，也就是C的值改为c[i]的值。

看不明你要做什么，函数写成什么样子出什么结果 为什么是AB12345CD才是正确的， 题目的要求给出来


Question: c语言

你这个是c语言吗？！赶脚是C++呢 c里面，Student只能是一个struct结构， 但是struct是默认支持=的啊

Student类没有定义赋值操作符，自己重载一个 Student& operator = （const Student& s) {      hour = s.hour;     ....     return * this; }


Question: 大神 刚入门C的小白 求助课设作业


Question: 按教材中示例输入，运行不了，什么原因？

引用 6 楼 不忘初心20191013 的回复:[quote=引用 4 楼 棉猴的回复:]#include <stdio.h> int main() { 	char c1, c2; 	int i1, i2; 	printf("请输入两个字符c1,c2\n"); 	scanf_s("%c,%c", &c1, 1, &c2, 1); 	i1 = c1; 	i2 = c2; 	printf("整型按字符输出为：\n"); 	printf("%c,%c\n", i1, i2); 	printf("字符型按整数输出为：\n"); 	printf("%d,%d\n", c1, c2); 	return 0; }  VS2015调试  请参考《VS2015中使用scanf()不报错的设置方法》 希望能够帮到你！ 谢谢您！老师。给您添麻烦了[/quote] 老师可不敢当，大家互相学习，共同进步！

引用 4 楼 棉猴的回复:#include <stdio.h> int main() { 	char c1, c2; 	int i1, i2; 	printf("请输入两个字符c1,c2\n"); 	scanf_s("%c,%c", &c1, 1, &c2, 1); 	i1 = c1; 	i2 = c2; 	printf("整型按字符输出为：\n"); 	printf("%c,%c\n", i1, i2); 	printf("字符型按整数输出为：\n"); 	printf("%d,%d\n", c1, c2); 	return 0; }  VS2015调试  请参考《VS2015中使用scanf()不报错的设置方法》 希望能够帮到你！ 谢谢您！老师。给您添麻烦了

谢谢您，老师，给您添麻烦了

#include <stdio.h>  void main( ) {     //chat c1,c2;     char c1,c2;     int i1,i2;     printf("请输入两个字符c1,c2\n");     //scanf_s("%c,%c",&c1,&c2);     scanf_s("%c,%c",&c1, 1, &c2, 1);     i1=c1;     i2=c2;     printf("整型按字符输出为：\n");     //printf("%c,%c",&i1,&i2);     printf("%c,%c", i1, i2);     printf("字符型按整数输出为：\n");     printf("%d,%d",c1,c2); } 供参考～  课本编写的时候，vs2010还没出来呢。因此照抄书本上，不一定能在vs2010上编译通过。  所以，楼主灵活一些，若用vs2010就应该逐步了解这些api借口～

引用 1 楼 suifengsanjin的回复:1 #include <studio.h> 这个输入错了应该是 #include <stdio.h> 2 chat c1,c2; 这里类型应该是char scanf_s提示的信息，scanf_s认为你要输入的是字符串，字符串需要设置长度，参数不够，把c1,c2设置成int试下？ 谢谢老师，#inclued <stdio.h>我在这里输入错了，您看的很仔细

引用 8 楼 不忘初心20191013 的回复:[quote=引用 7 楼 棉猴的回复:][quote=引用 6 楼 不忘初心20191013 的回复:] [quote=引用 4 楼 棉猴的回复:]#include <stdio.h> int main() { 	char c1, c2; 	int i1, i2; 	printf("请输入两个字符c1,c2\n"); 	scanf_s("%c,%c", &c1, 1, &c2, 1); 	i1 = c1; 	i2 = c2; 	printf("整型按字符输出为：\n"); 	printf("%c,%c\n", i1, i2); 	printf("字符型按整数输出为：\n"); 	printf("%d,%d\n", c1, c2); 	return 0; }  VS2015调试  请参考《VS2015中使用scanf()不报错的设置方法》 希望能够帮到你！ 谢谢您！老师。给您添麻烦了[/quote] 老师可不敢当，大家互相学习，共同进步！[/quote] 在您面前，我就是学生，我虽是计算机本科出身，但毕业后就没从事相关工作，十年了，厌倦了管理方面的尔虞我诈，想做些技术方面的工作，干回老本行计算机，现正在复习呢，还有算法和数据结构方面的。另外，我把这个方法用在int和float上，结果程序运行不了，scanf_s指定长度只针对字符和字符串吧？[/quote] 请附上错误的代码，我也看看

引用 7 楼 棉猴的回复:[quote=引用 6 楼 不忘初心20191013 的回复:] [quote=引用 4 楼 棉猴的回复:]#include <stdio.h> int main() { 	char c1, c2; 	int i1, i2; 	printf("请输入两个字符c1,c2\n"); 	scanf_s("%c,%c", &c1, 1, &c2, 1); 	i1 = c1; 	i2 = c2; 	printf("整型按字符输出为：\n"); 	printf("%c,%c\n", i1, i2); 	printf("字符型按整数输出为：\n"); 	printf("%d,%d\n", c1, c2); 	return 0; }  VS2015调试  请参考《VS2015中使用scanf()不报错的设置方法》 希望能够帮到你！ 谢谢您！老师。给您添麻烦了[/quote] 老师可不敢当，大家互相学习，共同进步！[/quote] 在您面前，我就是学生，我虽是计算机本科出身，但毕业后就没从事相关工作，十年了，厌倦了管理方面的尔虞我诈，想做些技术方面的工作，干回老本行计算机，现正在复习呢，还有算法和数据结构方面的。另外，我把这个方法用在int和float上，结果程序运行不了，scanf_s指定长度只针对字符和字符串吧？


Question: 大佬们

输入num和name的地方这样改：     scanf("%d%s",&stu[i].num, stu[i].name);

引用 7 楼 寻开心的回复:你的 i循环范围 是  i=0; i<N; i++ j循环范围也要是 j=0; j<10; j++ 才行 有问题，把你改到出问题时候的代码贴出来提问 #include <stdio.h> #define N 2 struct student  { int num; char  name[10]; float score[10]; }stu[N]; int main() { struct student stu[10];   int i,j; float averscore[N],sum; for(i=0;i<N;i++) {   sum=0;     scanf("%d，%s",&stu[i].name); for(j=0;j<10;j++) { scanf("%f",&stu[i].score[j]); sum+=stu[i].score[j];    } averscore[i]=sum*1.0/10;             printf("%s学生的10门课程总平均成绩:%f\n",stu[i].name,averscore[i]);         printf("%s学生的10门课程总分是：%f\n",stu[i].name,sum); } return 0; }

引用 1 楼 寻开心的回复:struct Student {      int id;     char name[20];     int score[10]; } students[2];  还是自己写吧，都是最基础的 还是不行 输出是乱码

引用 4 楼 寻开心的回复:#include <stdio.h> #define N 2 struct student  { int num; char  name[10]; folat score[10];  // 这里怎么是 folat啊， float }  stu[N];   // 这里定一个了一个全局的变量。stu【N】 int main() { struct student stu[10];  这里又定义了同名的 局部变量； 如果要用函数实现一些子功能就不要这个定义，删掉即可   int i,j; float averscore[N],sum,highscore; for(i=0;i<=N;i++) {       sum=0;     scanf("%d%s",&stu[i].num, &stu[i].name); // 这里使用的都是局部变量     for(j=1;j<=10;j++)     {        scanf("%f",&stu[i].score[j]);        sum+=stu[i].score[j];        }     averscore[i]=sum/10;  // 这里是整数除法。 可以改成 *0.1就是浮点数了             printf("%s学生的10门课程总平均成绩:%f\n",stu[i].name,averscore[i]);         printf("%s学生的10门课程总分是：%f\n",stu[i].name,sum); } return 0; } #include <stdio.h> #define N 2 struct student  { int num; char  name[10]; float score[10]; }stu[N]; int main() { struct student stu[10];   int i,j; float averscore,sum; for(i=0;i<=N;i++) {   sum=0;     scanf("%d,%s",&stu[i].num,&stu[i].name); for(j=0;j<=10;j++) { scanf("%f",&stu[i].score[j]); sum+=stu[i].score[j];    } averscore=sum*1.0/10;             printf("%s学生的10门课程总平均成绩:%f\n",stu[i].name,averscore);         printf("%s学生的10门课程总分是：%f\n",stu[i].name,sum); } return 0; }

引用 1 楼 寻开心的回复:struct Student {      int id;     char name[20];     int score[10]; } students[2];  还是自己写吧，都是最基础的 这个怎么只能输一个人的数据 不能输两个呀

引用 1 楼 寻开心的回复:struct Student {      int id;     char name[20];     int score[10]; } students[2];  还是自己写吧，都是最基础的 #include <stdio.h> #define N 2 struct student  { int num; char  name[10]; folat score[10]; }stu[N]; int main() { struct student stu[10];   int i,j; float averscore[N],sum,highscore; for(i=0;i<=N;i++) {   sum=0;     scanf("%d%s",&stu[i].num,&stu[i].name); for(j=1;j<=10;j++) { scanf("%f",&stu[i].score[j]); sum+=stu[i].score[j];    } averscore[i]=sum/10;             printf("%s学生的10门课程总平均成绩:%f\n",stu[i].name,averscore[i]);         printf("%s学生的10门课程总分是：%f\n",stu[i].name,sum); } return 0; }


Question: C语言程序运行出现the value of ESP was not properly saved across a function call

引用 3 楼 amstelang 的回复:厉害哦！！！大佬，成功了，咋回事 你需要的元素个数是10个，int count[] 定义的时候括号里面的代表个数，当然需要10了

厉害哦！！！大佬，成功了，咋回事

0-9，应该没问题的

int count[radix]; 不是int count[radix - 1];


Question: 有一字符串，输入一个字符，若字符串包涵此字符，则删去。

for循环出来的时候i是反斜杠0的下标，对应的j也应该是i-1

因为for循环循环体中只有if语句，最后一句str[j]=‘\o’是在循环体外的

理解了，谢谢!。。。。。

引用 2 楼 林涅槃 的回复:[quote=引用 1 楼 @矛盾综合体的回复:]图片看上去有点。。。。。。。。。。。 整理一下，如果是printf打印%s，遇到\0结束是没错的 是没错，如上图删除字符c，将字符c的位置str[j]赋予'\0'，那么读取字符串时读到c位置就应该结束了，不应该还存在后面的字符串program不是吗[/quote] 单纯看这一个函数，确实没错，但是想要继续打印到后面的字符，办法很多种，至于有没有其他处理，你的图片看不出来。

引用 1 楼 @矛盾综合体的回复:图片看上去有点。。。。。。。。。。。 整理一下，如果是printf打印%s，遇到\0结束是没错的 是没错，如上图删除字符c，将字符c的位置str[j]赋予'\0'，那么读取字符串时读到c位置就应该结束了，不应该还存在后面的字符串program不是吗


Question: 萌新问题求解答 c

代码仅供参考（仅两个，其他参照写就可以写出来）  #include<stdio.h> void init_Num(int *a,int len) { 	int i; 	for(i=0;i<len;i++) 	{ 		scanf("%d",a+i); 	} } int Max_Num(int *a,int len) { 	int max,i; 	max=0; 	for(i=1;i<len;i++) 	{ 		if(a[i]>a[max]) 		{ 			max=i; 		} 	} 	return a[max]; } int main() { 	int a[10]; 	init_Num(a,10); 	printf("max=%d\n",Max_Num(a,10)); 	return 0; }   结果 运行环境：gcc 编辑环境：sources insight  如有不懂，或者其他，请私信，谢谢！


Question: 输入问题如何处理（求C语言的处理方法）

这道题应该如何输入数据

你想说什么？


Question: C程序

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html

这个题目的意思是要你自己写一个函数来调用不是调用库函数吧？

引用 2 楼 qq_46065658 的回复:[quote=引用 1 楼 壹抹尘埃的回复:]字符串分割？比较字符串长度，输出长度最大的字符串 怎么把字符串分割成几个小字符串？[/quote] char *strtok(char *s, const char *delim);  分解字符串为一组字符串。s为要分解的字符串，delim为分隔符字符串。  从s开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。

引用 1 楼 壹抹尘埃的回复:字符串分割？比较字符串长度，输出长度最大的字符串 怎么把字符串分割成几个小字符串？

字符串分割？比较字符串长度，输出长度最大的字符串


Question: C语言中struct问题

引用 楼主 wy_9434 的回复:问题描述：     本人在pid.h中定义了一个结构体，如下： 			struct     {   	float PID_Target;    	  float PID_Measure;   	  float PID_Kp;      	  float PID_Ki;        	  float PID_Kd;       	float Error;         	  float Last_Error;    	  float Prev_Error;    	  float Sum_Error;        }PIDStruct;    在源文件pid.c和main.c中均包括使用pid.h,即#include “pid.h”，这样做编译后报错：L6200E: Symbol PIDStruct multiply defined (by pid.o and main.o). 	 但是将上述结构体只定义在源文件pid.c中的相关函数中，编译通过。 	 本人接触C语言不久，请问这是为什么？谢谢。  struct     {   	float PID_Target;      float PID_Measure;     float PID_Kp;        float PID_Ki;          float PID_Kd;       	float Error;           float Last_Error;      float Prev_Error;      float Sum_Error;        }PIDStruct; 你这样定义了一个结构体变量，PIDStruct，如果多个文件包含你的这个头文件，那么每个包含的文件都会定义一次，不就重定义了嘛。不要在头文件中定义变量，只定义类型

struct pid    {    float PID_Target;      float PID_Measure;     float PID_Kp;        float PID_Ki;          float PID_Kd;        float Error;           float Last_Error;      float Prev_Error;      float Sum_Error;        }; 供参考～ 去掉PIDStruct，因为这是定义了一个变量，如果在两个源文件里定义了相同的结构体变量，就会薄这个错误。  或者按照楼上的建议，加一个typedef，这样PIDStruct就是一个类型别名，不是全局变量了，也是可以的。但是你的程序里需要注意下，这个不是一个变量，而是一个结构体类型别名，即可以简单认为是一个类型关键字

引用 1 楼 user-3 的回复:#pragma once typedef struct     {   	float PID_Target;      float PID_Measure;     float PID_Kp;        float PID_Ki;          float PID_Kd;       	float Error;           float Last_Error;      float Prev_Error;      float Sum_Error;        }PIDStruct;  你好，用这种方法编译后，仍然不能解决


Question: C++

顺便说一下这是c语言板块，应该有c++板块，尽管两个语言大相径庭

代码仅供参考，这是一行一个的  #include<iostream> using namespace std; void pr(int x) { 	int i,j; 	for(i=0;i<4*x+2;i++) 	{ 		if(x==i) 		{ 			cout<<">"; 		} 		else if(i==3*x+1) 		{ 			cout<<"<"; 		} 		else 		{ 			cout<<"-"; 		} 	} 	cout<<endl; } int main() { 	int x=0; 	while(x<=1||x>=100) 	cin>>x; 	pr(x); 	return 0; }  结果 运行环境：g++ 编辑环境：sources insight


Question: 卫星定位差分定位数据处理软件开发


Question: 大佬们帮忙改改


Question: 新手刷PTA最好吃的月饼有两个测试点怎么都过不去，请求大佬帮忙看看

引用 10 楼 遇见女神的回复:[quote=引用 9 楼 qq_46068469 的回复:] [quote=引用 8 楼 遇见女神的回复:][quote=引用 3 楼 qq_46068469 的回复:] [quote=引用 1 楼 遇见女神的回复:]按照题目要求有N<=1000，你只定义b[100]，少了个0啊。 我改成1000了 最后一个测试点还是错的 汗[/quote] 你定义的a[1000][100]，数组的行和列的数字是相反的，应是a[100][1000]。[/quote] 没反吧[/quote] 再仔细看题目，列是种类数，是N，N是<=1000，你定义的数组的列数是多少？[/quote] 通过了！非常感谢你！

引用 9 楼 qq_46068469 的回复:[quote=引用 8 楼 遇见女神的回复:][quote=引用 3 楼 qq_46068469 的回复:] [quote=引用 1 楼 遇见女神的回复:]按照题目要求有N<=1000，你只定义b[100]，少了个0啊。 我改成1000了 最后一个测试点还是错的 汗[/quote] 你定义的a[1000][100]，数组的行和列的数字是相反的，应是a[100][1000]。[/quote] 没反吧[/quote] 再仔细看题目，列是种类数，是N，N是<=1000，你定义的数组的列数是多少？

引用 8 楼 遇见女神的回复:[quote=引用 3 楼 qq_46068469 的回复:] [quote=引用 1 楼 遇见女神的回复:]按照题目要求有N<=1000，你只定义b[100]，少了个0啊。 我改成1000了 最后一个测试点还是错的 汗[/quote] 你定义的a[1000][100]，数组的行和列的数字是相反的，应是a[100][1000]。[/quote] 没反吧

引用 3 楼 qq_46068469 的回复:[quote=引用 1 楼 遇见女神的回复:]按照题目要求有N<=1000，你只定义b[100]，少了个0啊。 我改成1000了 最后一个测试点还是错的 汗[/quote] 你定义的a[1000][100]，数组的行和列的数字是相反的，应是a[100][1000]。

引用 5 楼 自信男孩的回复:你的测试点没通过，看一下有没有运行时间的要求？ 是符合运行时间要求的，就是一个测试点答案错误

#include <stdio.h>  int main() {   int N, M, A[1000] = {0}, i, j, x = 0, p = 0;    scanf("%d%d", &N, &M);   while(M--)     for (i = 0; i < N; (A[i++] += j) > x ? x = A[p = i - 1] : 0) scanf("%d", &j);   printf("%d\n%d", x, p + 1);   while (++p < N) if (A[p] == x) printf(" %d", p + 1);   puts("");        return 0; }

你的测试点没通过，看一下有没有运行时间的要求？

#include<stdio.h> #include <stdlib.h>  int main() {     int **mooncake, N, M, *amount;     int i, j;     int max, flag;      scanf("%d%d", &N, &M);       mooncake = (int **)malloc(sizeof(int *) * M);     if (!mooncake)         exit(0);     amount = (int *)malloc(sizeof(int) * N);     if (!amount)         exit(0);      for (i = 0; i < M; i++) {         mooncake[i] = (int *)malloc(sizeof(int) * N);         if (!mooncake[i])             exit(0);     }      for (i = 0; i < M; i++) {         for (j = 0; j < N; j++)             scanf("%d", &mooncake[i][j]);     }      max = -1;     for (i = 0; i < N; i++) {         amount[i] = 0;         for (j = 0; j < M; j++)             amount[i] += mooncake[j][i];         if (max < amount[i])             max = amount[i];     }      printf("%d\n", max);     flag = 0;     for (i = 0; i < N; i++) {         if (max == amount[i] && flag == 0) {             printf("%d", i+1);             flag = 1;         } else if (flag == 1) {             printf(" %d", i+1);         }     }     /*     int N, M;     scanf("%d %d", &N, &M);//N列，M行     int a[1000][100] = {0};     int i = 0;     int j = 0;     int b[100] = {0};      for (i = 0; i < M; i++) {         for (j = 0; j < N; j++) {             scanf("%d", &a[i][j]);//数据输入         }     }     for (i = 0; i < N; i++) {         for (j = 0; j < M; j++) {             b[i] += a[j][i];//b[i]为第i种月饼销量         }     }     int max = b[0];     for (i = 0; i < N; i++) //遍历数组，找出最大值     {         if (b[i] > max)max = b[i];     }     printf("%d\n", max);//输出最大值     int c = 0;     for (i = 0; i < N; i++) //求冠军是否唯一     {         if (b[i] == max)c++;     }     for (i = 0; i < N; i++) //输出冠军月饼编号     {         if (b[i] == max) {             printf("%d", i+1);             c--;             if (c > 0)printf(" ");         }     }     */     return 0; } 试一下这个 供参考～

引用 1 楼 遇见女神的回复:按照题目要求有N<=1000，你只定义b[100]，少了个0啊。 我改成1000了 最后一个测试点还是错的 汗

引用 1 楼 遇见女神的回复:按照题目要求有N<=1000，你只定义b[100]，少了个0啊。 卧槽，谢谢大佬，谢谢谢谢

按照题目要求有N<=1000，你只定义b[100]，少了个0啊。


Question: 关于PTA中用C语言编写“出生年”这个题目，为何有两个测试点不能通过

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html


Question: 求教！

如果是--a那就是你想要的10了。但是这个是a--;所以输出的是a--的值。

引用 楼主 DONOT_LAUGH的回复:#include<stdio.h> int main() { 	int a; 	scanf("%d",&a); 	if(a++>10) 		printf("%d\n",++a); 	else  		printf("%d\n",a--); 		return 0;     return 0; } 运行程序时从键盘输入10，输出为什么是11不是10？a++>10的意思不是先用a=10和10比较吗？ 这里拐了几个弯，区别a++,++a，a++是先输出，后相加，而++a是先相加，后输出。首先，10不大于10，条件不满足 ，但a后加1了，就是11了。然后再输出a--，根据之前说的，先输出后运算。所以是11

if (a++ > 10)  a++的返回值是a原本的值，所以是10，所以这个if不成立，会执行else语句，但是a实际上已经变成了11，else中a--的返回值也是a原本的值，所以是11； 记住一点，a++返回a原本的值，++a返回a加1后的值


Question: c语言

引用 5 楼 寻开心的回复:用两个参数是想把结果放到第二个参数吗？ void delchar(char *a,char *s,char c)   {      int i,j;         j=0;          for(i=0;a[i]!='\0';i++)       {                     if(a[i]!=c)    s[j++]=a[i];         }           s[j]='\0';         } 嗯嗯，这个是我自己想的，不知道怎么做，

#include<stdio.h>  //void delchar(char *a,char *s,char c);  void delchar(char *str, int c);  int main() {     char a[40]; //s[40];     //char c;     int c;     int b;     scanf("%d",&b);     getchar();     while (b--) {         fgets(a, 40, stdin);         c = getchar();         //delchar(a,s,c);         delchar(a, c);         //printf("%s",s);         printf("%s", a);         getchar();     }      return 0; }  #if 0 void delchar(char *a,char *s,char c) {     s=a;     int i,j;     j=0;     for (i=0;s[i]!='\0';i++) {         if(s[i] != c) {             s[j++]=s[i];         }         s[j]='\0';     } } #endif  void delchar(char *str, int c) {     int i, j = 0;      for (i = 0; str[i]; i++)         if (str[i] != c)             str[j++] = str[i];     str[j] = 0; }  供参考～  delchar的参数应该是用2个就好了。

引用 2 楼 m0_45847633的回复:[quote=引用 1 楼 寻开心的回复:]自己写代码呗， 出错了贴代码出来提问就好了 #include<stdio.h>    void delchar(char *a,char *s,char c);   int main()   {      char a[40],s[40];       char c;       int b;       scanf("%d",&b);       while(b--)       {          gets(a);          c=getchar();           delchar(a,s,c);   printf("%s",s);       }                                      return 0;  }    void delchar(char *a,char *s,char c)   {       s=a;        int i,j;        j=0;        for(i=0;s[i]!='\0';i++)       {          if(s[i]!=c)        {           s[j++]=s[i];       }       s[j]='\0';         }[/quote] 可以帮我看看哪里错了吗

引用 1 楼 寻开心的回复:自己写代码呗， 出错了贴代码出来提问就好了 #include<stdio.h>    void delchar(char *a,char *s,char c);   int main()   {      char a[40],s[40];       char c;       int b;       scanf("%d",&b);       while(b--)       {          gets(a);          c=getchar();           delchar(a,s,c);   printf("%s",s);       }                                      return 0;  }    void delchar(char *a,char *s,char c)   {       s=a;        int i,j;        j=0;        for(i=0;s[i]!='\0';i++)       {          if(s[i]!=c)        {           s[j++]=s[i];       }       s[j]='\0';         }

自己写代码呗， 出错了贴代码出来提问就好了


Question: icmp示例，接收端接收不到数据


Question: c计算器

我不知道怎么调啊，而且我还要有注释

不知道你所谓的简单是那种简单。你把加减乘除分别封装为四个函数，在主函数里调就行了。

有没有更简单一点的，只要计算器源码有包括四个函数就行了

#include<stdio.h> #include<math.h> #include<stdlib.h> int main() {     int number;     double a,b;     printf(".................................\n");     printf("..........加法运算请按1..........\n");     printf("..........减法运算请按2..........\n");     printf("..........乘法运算请按3..........\n");     printf("..........除法运算请按4..........\n");     printf("..........结束程序请按0..........\n");     printf(".................................\n");     while (1)     {         printf("  请输入要进行运算的编号：");         scanf("%d",&number); //#################################################################################         if(number==1)              //实现加法         {             double a[1000],sum=0;             printf("  本次是加法运算,请输入要加的数字:\n");             for(int i=0;;i++)             {                 scanf("%lf",&a[i]);                 sum=sum+a[i];                 if(getchar()=='\n')break;             }             printf("  本次加法运算的结果为:%.3lf\n",sum);          }         //continue; //#################################################################################          else if(number==2)            //实现减法         {             double a[1000],sum=0;             printf("  本次是减法运算,请输入被减数(单个数字):\n");             scanf("%lf",&sum);             printf("  请输入减数(多个数字):\n");             for(int i=0;;i++)             {                 scanf("%lf",&a[i]);                 sum=sum-a[i];                 if(getchar()=='\n')break;             }             printf("  本次减法运算的结果为:%.3lf\n",sum);          }          //continue; //#################################################################################          else if(number==3)           //实现乘法         {             double a[1000],sum=1;             printf("  本次是乘法运算,请输入要乘的数字:\n");             for(int i=0;;i++)             {                 scanf("%lf",&a[i]);                 sum=sum*a[i];                 if(getchar()=='\n')break;             }             printf("  本次乘法运算的结果为:%.5lf\n",sum);          }          //continue; //#################################################################################          else if(number==3)           //实现除法         {             double a[1000],sum;             printf("  本次是除法运算,请输入被除数(单个数字):\n");             scanf("%lf",&sum);             printf("  请输入除数(多个数字):\n");             for(int i=0;;i++)             {                 scanf("%lf",&a[i]);                 sum=sum/a[i];                 if(getchar()=='\n')break;             }             printf(" 本次除法运算的结果为:%.5lf\n",sum);             //continue;          } //#################################################################################          else if(number==0)          {              break;          }          else         {             printf("  警告！！！输入运行编号错误，请输入1~4之内的数字！\n");         }         //system ("cls");                //清屏      }  }

是c语言计算器，漏写了

提问题都不会。

这题太难了 只有大牛才能做出来


Question: 数据结构，深度优先遍历


Question: C语言文件

引用 3 楼 user-2的回复:你定义了readfile函数，并没有看到在哪里调用了啊 如果我想调用应该怎样使用

你定义了readfile函数，并没有看到在哪里调用了啊

你定义了readfile函数，并没有看到在哪里调用了啊

引用 1 楼 user-2的回复:并没有看到调用readfile呀？ 不太会用文件能详细说一下吗

并没有看到调用readfile呀？


哪里的老师？误人子弟

哪里的老师？误人子弟

急求，在线等大佬。

引用 2 楼 寻开心的回复:不明白你要做什么 if (A>B && A>D && A<C ) 输出1  这个意思吗？ 老师刚通知，题目是别人出的，他先去问清楚这题什么意思，他也没搞懂。。。。


Question: 求解。

指针就是地址，这个说法太模糊了。指针也是变量，和普通变量，比如int， char等变量不一样，指针变量里存放的是地址值。即内存中位置信息。

可以说是错的，问题关键是先问清楚，变量的指针到底指的是什么？莫名其妙的提法！

谢谢谢谢！所以是错的，对吧？

很多人想不明白指针的概念，我觉得主要是绕不过弯来。其实这种概念很简单，所有变量都有地址，也都要通过地址来读写，这是我们目前的计算机系统决定的，这样的一种存储模式。只不过呢，一般情况下我们都是直接通过地址来访问内存的，现在引入了指针，只不过是没把这个地址写死在代码里面，而是存储在另一个变量里面而已，当我们要访问一个内存的时候，总是先从这个变量（也就是所谓的指针）取到一个地址，然后再通过这个地址来访问对应的内存。 可能有些人会奇怪，我们好像并没有用到地址呀？实际上，我们引用到一个变量的时候，编译器都会帮我们翻译成地址的，这样我们平常都用变量名，比较容易理解代码的含义。当然，指针既然也是变量的一种，本身也是有地址的

一个变量的指针，这种说法有点问题，指针是一种变量，它指向一个变量，也可以指向另一个变量。同时，一个变量也可能会有多个指针指向它，也可能没有一个指针指向它，那么变量的指针指的是什么（哪个？）变量的地址都是存在的，不管有没有指针的存在

引用 5 楼 user-3的回复:可以说是错的，问题关键是先问清楚，变量的指针到底指的是什么？莫名其妙的提法！ 这不是自制的题是试卷上的判断题


Question: 请问为什么输入不了顶点，实现不了有向图，代码显示没错，但实现不了功能

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html


Question: 哥哥姐姐们帮我看下这个代码对不对呀，为啥我明明新建了文档，但是结果却总是说没办法打开呢

引用 3 楼 it_xiangqiang的回复:希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html 谢谢大佬真的网站的模板怎么做不

引用 1 楼 自信男孩的回复:#include<stdio.h> #include<stdlib.h>  //void main() int main() {     FILE*fp;     char filename[20];     int ch;   //定义为int,这样才能与EOF比较     printf("please input the filename you want to write:");     scanf("%s",filename);     //if( !(fp==fopen(filename,"wt+")) );    //为啥多一个分号, 为啥用==     if(!(fp=fopen(filename,"wt+")))     {         printf("cannot open the file!\n");         exit(0);     }     printf("please input the sentences you want to write:");     ch = getchar();     ch = getchar();     while( ch!=EOF )     {         fputc(ch,fp);         ch=getchar();     }     fclose(fp);      return 0; } 供参考～ 谢谢~~


Question: system函数头文件是#include还是#system?

引用 1 楼 @矛盾综合体的回复:头文件都是#include开头的 没有#system<stdlib.h>的？

引用 2 楼 自信男孩的回复:第二个<stdlib.h>  但是没有见过<studio.h>这样的头文件，倒是见过<stdio.h>头文件 半夜写的，可能写错了

头文件都是#include开头的


Question: 用c语言写的一个银行排队问题，有几个问题自己不能解决，求教

引用 9 楼 冷风1023 的回复：2、 ElementType DeleteQ(Queue Q，ElementType * E_next);  这个错了，应该是int DeleteQ(Queue Q，ElementType * E_next);问题差不多解决了，可以帮我测试一下程序吗，去除了一下东西，如果可以帮忙我把代码发出来

你这有两种方法修改，一种是返回指针，通过判断指针来确认成功失败，成功就返回指向元素的指针，失败返回NULL，另外一种方法返回int，成功返回0，失败返回-1，可以增加一个指针参数，通过这个指针来返回出下一个元素。 1、 ElementType * DeleteQ(Queue Q); ElementType * E_next = DeleteQ(Queue Q); if(E_next ) {} else {}  2、 ElementType DeleteQ(Queue Q，ElementType * E_next);

引用 6 楼 冷风1023 的回复：[quote=引用 4 楼 Crival 的回复:] 可是error又是必要的条件，又该怎么样改才可以正确返回error 函数的返回值只能是一种，通常队列的增加和删除操作的返回值只有成功失败，也就是0和-1，不要返回元素类型，如果你是取元素值操作才返回元素类型，这只是我人个建议。[/quote]那么在c中error怎么返回

引用 4 楼 Crival 的回复:可是error又是必要的条件，又该怎么样改才可以正确返回error 函数的返回值只能是一种，通常队列的增加和删除操作的返回值只有成功失败，也就是0和-1，不要返回元素类型，如果你是取元素值操作才返回元素类型，这只是我人个建议。

引用 3 楼 冷风1023 的回复：ElementType DeleteQ(Queue Q) { if ( IsEmpty(Q) ) { printf("队列空"); return ERROR; } else  { Q->Front =(Q->Front+1)%Q->MaxSize; return  Q->Data[Q->Front]; } } return ERROR; 这里的ERROR你定义的是的-1，但返回值是ElementTypeerror是必要的条件，该怎么修改才可以正确返回

可是error又是必要的条件，又该怎么样改才可以正确返回error

引用 1 楼 冷风1023 的回复：typedef int ElementType; typedef struct People ElementType; 这里定义两个ElementType那么如何解决delete(q)中的错误呢？

救救孩子吧，没错误了但是得不出结果，求大神们帮忙测试一下程序 #include <stdio.h> #include <stdlib.h> #include <stdbool.h>  typedef int Status;  typedef struct People ElementType; struct People{ int T; int P; };  typedef int Position; struct QNode{ ElementType *Data; Position Front, Rear; int MaxSize; }; typedef struct QNode*Queue; Queue CreateQueue(int MaxSize){ Queue Q=(Queue)malloc(sizeof(struct QNode)); Q->Data=(ElementType*)malloc(MaxSize*sizeof(ElementType)); Q->Front=Q->Rear=0; Q->MaxSize=MaxSize; return 0; } bool IsFull(Queue Q) { return((Q->Rear+1)%Q->MaxSize==Q->Front); } bool AddQ(Queue Q,ElementType X) { if(IsFull(Q)){ printf("full"); return false; } else{ Q->Rear=(Q->Rear+1)%Q->MaxSize; Q->Data[Q->Rear]=X; return true; } } bool IsEmpty(Queue Q) { return(Q->Front==Q->Rear); } ElementType DeleteQ(Queue Q) { if ( IsEmpty(Q) ) { printf("队列空"); } else  { Q->Front =(Q->Front+1)%Q->MaxSize; return  Q->Data[Q->Front]; } }  int FindNextWindow(int W[], int K, int *WaitTime) {//给定K个窗口W[]的状态，返回下一个空闲窗口的位置以及在相邻两次窗口之间所等待的时间waittime int WinAvail;//下一个空闲窗口的位置 int MaxProc; int MinW=MaxProc+1;//最短事务处理时间，初始化超过最大值 int i; for(i=0;i<K;i++)//扫描每个窗口，找到最短事务 if(W[i]<MinW) { MinW=W[i]; WinAvail=i; } *WaitTime=MinW;//最短事务处理时间就是两次空窗间的等待时间 for(i=0;i<K;i++)//刷新所有窗口的事务处理状态 W[i]-=MinW; return WinAvail;//返回下一个空闲窗口的位置 } double QueueingAtBank(Queue Q, int N) { struct People Next;//下一位顾客 int K;//窗口个数 int MaxWindow; int TotalTime;//全体顾客等待总时间 int CurrentTime;//当前时间，开门营业时为0 int Window[MaxWindow];//营业窗口需要处理事务的时间长度 int WaitTime;//相邻两次窗口空闲之间等待的时间 int WinAvail;//空闲窗口位置 int i,j; scanf("%d", &K);//读入营业窗口个数 if(N<K)return 0;//窗口比人多不用等 for(i=0;i<K;i++)//初始化 Window[i]=0; TotalTime=0; while(!IsEmpty(Q))//当队列非空时，持续处理 { WinAvail=FindNextWindow(Window, K, &WaitTime);//处理掉当前最短的事务，得到下一个空闲窗口 CurrentTime+=WaitTime; Next=DeleteQ(Q);//下一位顾客出列 if(CurrentTime>=Next.T) //如果顾客已经到达等待 TotalTime+=(CurrentTime-Next.T);//累计等待时间 else//如果顾客还没到 { WaitTime=Next.T-CurrentTime;//空闲窗口等待顾客的时间 for(j=0;j<K;j++)//刷新所有窗口至顾客到达的状态 { Window[j]-=WaitTime; if(Window[j]<0) Window[j]=0; } CurrentTime=Next.T;//更新当前时间为顾客到达的时间 } Window[WinAvail]=Next.P;//顾客NEXT到WINAVAIL窗口接受服务 } return((double)TotalTime/(double)N); //返回顾客的平均等待时间  }  int main(){ int N; Queue Q; int i; ElementType X; scanf("%d", &N); Q=CreateQueue(N); for(i=0;i<N;i++) { scanf("%d%d", &X.T, &X.P); AddQ(Q, X); } printf("平均等待时间 =%.If minute(s).\n", QueueingAtBank(Q, N)); DestroyQueue(Q); return 0; ｝


Question: 连接城市的最小生成树

希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助：https://blog.csdn.net/it_xiangqiang/category_10768339.html


Question: 以下代码怎么改成用指针数组的形式

#include <stdio.h> #define M 1000  int tem[M][M]; int a[M][M]; int* mytem[M]; int* mya[M]; void Rotation(int** a, int m, int n) { 	int i, j, k = 0; 	for (j = n - 1; j >= 0; j--) 	{ 		for (i = 0; i<m; i++) 			mytem[k][i] = a[i][j]; 		k++; 	} 	for (i = 0; i<n; i++) 		for (j = 0; j<m; j++) 			a[i][j] = mytem[i][j]; }   int main() { 	int m, n; 	int i, j;  	for (i = 0; i < M; ++i) 	{ 		mytem[i] = tem[i]; 		mya[i] = a[i]; 	} 	scanf("%d %d", &m, &n); 	for (i = 0; i<m; i++) 		for (j = 0; j<n; j++) 			scanf("%d", &mya[i][j]); 	Rotation(mya, m, n); 	for (i = 0; i<n; i++) 	{ 		for (j = 0; j<m; j++) 			printf("%d ", mya[i][j]); 		printf("\n"); 	} 	return 0; } VS2015调试  请参考 《C++中的指针数组与数组指针》 《C++中指针的数组和数组的指针》 希望能够帮到你！


Question: 编辑距离用c语言怎么写啊


Question: 我这个代码为什么输入ID后就跳过for循环了？求解

引用 11 楼 冷风1023的回复:[quote=引用 9 楼 qq_45895535 的回复:] [quote=引用 7 楼 棉猴的回复:]VS2015调试没问题   Id用英文输入，就回跳过[/quote] char s[10]; scanf("%s",s)[/quote] Ok,已经解决了  感谢

请参考《C++控制台程序判断输入的数字》 希望能够帮到你！

引用 9 楼 qq_45895535 的回复:[quote=引用 7 楼 棉猴的回复:]VS2015调试没问题   Id用英文输入，就回跳过[/quote] char s[10]; scanf("%s",s)

如果你要输入字符就应该重新定义数组来保存你的输入。

引用 7 楼 棉猴的回复:VS2015调试没问题   Id用英文输入，就回跳过

你输入的ID应该不是纯数字吧，应该带了字符这些吧。

引用 4 楼 宾灬的回复: 我的id是输入的英文

引用 4 楼 宾灬的回复: 可能我们编译器不一样吧，刚刚我把%d改为%s就可以了

引用 1 楼 宾灬的回复:没问题啊，可以运行 我运行的时候不用输入密码

引用 1 楼 宾灬的回复:没问题啊，可以运行 我运行就直接跳过了

没问题啊，可以运行


Question: c语言的问题，急，求大佬帮忙，谢谢

报错信息提示花括号不匹配，你好好检查一下。

引用 1 楼 user-3 的回复：前面的代码左右花括号不匹配吧没有吧，应该对着的

前面的代码左右花括号不匹配吧


Question: Linux原始套接字抓包程序  利用QT界面化时遇到的问题

引用 2 楼 宾灬 的回复:为什么要把int main()放到qt里？ 你直接在qt中开发，把抓到的包数据给view就行了。  请问怎么样在QT中写呢...不太懂怎么将抓到的数据传给View

图上只是我测试如何在tableview里输出内容 我自己的函数整体并未贴出，就是不知道该把自己int main()放在这个QT的哪里 以及输出时 该怎么去进行


Question: 求大佬帮帮我

给分吧 // // Created by denglibin on 2019/12/24 0024. // // 杨辉三角  #include <stdio.h> #define N 10 /**  * 打印杨辉三角  * @param n 行数  */ void show(){     int arr[N][N] = {0};     for(int i = 0; i < N; i++){         for(int j = 0; j <= i; j++){             if(j == 0 || j == i){                 arr[i][j] = 1;             } else {                 arr[i][j] = arr[i-1][j-1] + arr[i-1][j];             }             if(arr[i][j] != 0){                 printf("%d", arr[i][j]);             }         }         printf("\n");     }   } int main(){     show();     return 0; }


Question: 大一小白，求大神解答。

高级语言，比如C语言，需要先声明一个变量才可以使用它，int a; 声明变量后就会分配内存空间，这样变量名就和地址联系在一起了。就可以通过变量名来访问内存单元，比如赋值操作，a=100; 用printf("%p",&x); 就可以知道内存地址。

编译器帮你把变量名翻译成地址而已啦