Question: 请求c语言大神支支招，看一下为什么会报错，感谢！

引用 1 楼 user-1的回复:1，用了关键字命名变量。 2，无返回值函数返回int 3，这你自己写的吗  #include <stdio.h> #include <stdlib.h> #define N 30   void Readscore(int id[], int score[], int n);  int Average(int score[], int n);  void Scoresort(int id[], int score[], int n);  void Idsort(int id[], int score[], int n);  int Selectsort(int id[], int score[], int n, int x);  void Scoreclass(int score[], int n);  void Showinfo(int id[], int score[], int n);   int main() { 	int num, score[N], aver, n, sum, id[N], i, m, x, k, great = 0, better = 0, middle = 0, low = 0, lower = 0;   	while (1) { 		//首页选择项的输出  		printf("----------------\n"); 		printf("1.Input record\n"); 		printf("2.Caculate total and average score of course\n"); 		printf("3.Sort in descending order by score\n"); 		printf("4.Sort in ascending order by number\n"); 		printf("5.Search by number\n"); 		printf("6.Sta1tistic analysis\n"); 		printf("7.List record\n"); 		printf("0.Exit\n"); 		printf("Please enter your choice\n"); 		scanf("%d", &num); 		//用户输入功能键的输入输出   		switch (num) { 		case 0:  			break; 		case 1: 			printf("Input n:\n"); 			scanf("%d", &n); 			Readscore(id, score, n); 			break;  		case 2: 			sum = Average(score, n); 			printf("Sum score is %d\n", sum); 			printf("Average score is %d\n", sum / n); 			break; 		case 3: 			Scoresort(id, score, n); 			for (i = 0; i <= n - 1; i++) { 				printf("%3d%5d\n", id[i], score[i]); 			} 			break; 		case 4: 			Idsort(id, score, n); 			for (i = 0; i <= n - 1; i++) { 				printf("%3d%5d\n", id[i], score[i]); 			} 			break; 		case 5: 			printf("Input id:\n"); 			scanf("%d", &x); 			m = Selectsort(id, score, n, x); 			if (m == -1) { 				printf("查询错误\n"); 			} 			else { 				printf("----------------\n"); 				printf("id:%3d score:%3d 排名:%3d\n", id[m], score[m], m + 1); 			} 			break; 		case 6: 			Scoreclass(score, n); 			break; 		case 7: 			Showinfo(id, score, n); 			sum = Average(score, n); 			printf("----------------\n"); 			printf("Sum score is %d\n", sum); 			printf("Average score is %d\n", sum / n); 			break;   		default: 			printf("Invalid operator\n");     		} 	} } //输出分数段 void Scoreclass(int score[], int n) {  	int i, j, count, k; 	double bate, m; 	m = n; 	int begin[5] = { 0,60,70,80,90 }; 	int end[5] = { 59,69,79,89,100 }; 	char re[][10] = { "不及格","及格","中等","良好","优秀" };  	for (i = 0, j = 0; i <= n, j < 5; i++, j++) { 		count = 0; 		bate = 0; 		for (k = 0; k < n; k++) { 			if ((begin[i] <= score[k]) && (end[i] >= score[k])) { 				count += 1; 				bate = (100 * count) / m; 			}  		}  		printf("%s的学生人数为:%d ,所占百分比为%.2f\n", re[j], count, bate / 100);  	}  } //输出每个学生的学号和成绩 void Showinfo(int id[], int score[], int n) { 	int i; 	for (i = 0; i <= n - 1; i++) { 		printf("id:%3d score:%3d\n", id[i], score[i]); 	} } //根据学号查询学生成绩 int Selectsort(int id[], int score[], int n, int x) { 	int temp_score, i, j, temp_id, k; 	for (i = 0; i < n - 1; i++) { 		for (j = i + 1; j < n; j++) { 			if (score[i] < score[j]) { 				temp_score = score[i]; 				score[i] = score[j]; 				score[j] = temp_score; 				temp_id = id[i]; 				id[i] = id[j]; 				id[j] = temp_id; 			} 		} 	} 	for (k = 0; k < n; k++) { 		if (id[k] == x) 			return k;  	}return -1;     } //根据学号从小到大打印成绩 void Idsort(int id[], int score[], int n) { 	int temp_score, i, j, temp_id; 	for (i = 0; i < n - 1; i++) { 		for (j = i + 1; j < n; j++) { 			if (id[i] > id[j]) { 				temp_score = score[i]; 				score[i] = score[j]; 				score[j] = temp_score; 				temp_id = id[i]; 				id[i] = id[j]; 				id[j] = temp_id; 			} 		} 	}   } //从高到低打印成绩 void Scoresort(int id[], int score[], int n) { 	int temp_score, i, j, temp_id; 	for (i = 0; i < n - 1; i++) { 		for (j = i + 1; j < n; j++) { 			if (score[i] < score[j]) { 				temp_score = score[i]; 				score[i] = score[j]; 				score[j] = temp_score; 				temp_id = id[i]; 				id[i] = id[j]; 				id[j] = temp_id; 			} 		} 	}   } //计算班级平均分 int Average(int score[], int n) { 	int i, sum = 0; 	for (i = 0; i < n; i++) { 		sum += score[i]; 	} 	return sum; } //录入学生成绩 void Readscore(int id[], int score[], int n) {   	int i; 	for (i = 0; i < n; i++) { 		printf("Input student's id and score:"); 		scanf("%d %d", &id[i], &score[i]); 		if (score[i] < 0) { 			printf("成绩输入错误\n"); 			return; 		} 	} 	system("pause"); }  #include <stdio.h> #include <stdlib.h> #define N 30   void Readscore(int name[],int id[],int score[],int period[],int credit[],int n);  int Average(int name[],int id[],int score[],int period[],int credit[],int n);  void Scoresort(int name[],int id[],int score[],int period[],int credit[],int n);  int Selectsort(int name[],int id[],int score[],int period[],int credit[],int n,int x);  void Scoreclass(int name[],int id[],int score[],int period[],int credit[],int n);  void Showinfo(int name[],int id[],int score[],int period[],int credit[],int n);   int main() { 	int num,score[N],aver,n,sum,name[N],period[N],credit[N],id[N],i,m,x,k,great=0,better=0,middle=0,low=0,lower=0;   while(1){ 									//首页选择项的输出      printf("----------------\n");     printf("1.输入学生的课程信息\n");     printf("2.计算课程总分和平均分\n");     printf("3.按成绩降序输出成绩表\n");     printf("4.按学号查询学生信息\n");     printf("5.列出分数段分数\n");     printf("选择功能\n");     scanf("%d",&num); 									//用户输入功能键的输入输出       switch(num){         case 1:             printf("输入班级学生人数 n:\n");             scanf("%d",&n);              			Readscore(name,id,score,period,credit,n);             break;          case 2:             sum=Average(name,id,score,period,credit,n);             printf("总分是： %d\n",sum);             printf("平均分是： %d\n",sum/n);             break;         case 3:             Scoresort(name,id,score,period,credit,n);             for(i=0;i<=n-1;i++){                 printf("%5d%3d%%3d%3d5d\n",name[i],id[i],score[i],period[i],credit[i]);             }             break;                  case 5:             printf("输入学号：\n");             scanf("%d",&x);             m=Selectsort(name,id,score,period,credit,n,x);             if(m==-1){                 printf("查询错误\n");             }else{                 printf("----------------\n");                 printf("姓名：%5d 学号：%3d 分数：%3d 学时：%3d 学分：%3d 排名：%3d\n",id[m],score[m],m+1);             }             break;                case 7:             Showinfo(name,id,score,period,credit,n);             sum=Average(name,id,score,period,credit,n);             printf("----------------\n");             printf("总分是： %d\n",sum);             printf("平均分是： %d\n",sum/n);             break;           default:             printf("Invalid operator\n");       } } } //输出分数段 void Scoreclass(int name[],int id[],int score[],int period[],int credit[],int n){      int i,j,count,k;     double bate,m;     m=n;     int begin[5]={0,60,70,80,90};     int end[5]={59,69,79,89,100};     char classs[]={"不及格,及格,中等,良好,优秀"};      for(i=0,j=0;i<=n,j<5;i++,j++){             count =0;             bate=0;        for(k=0;k<n;k++){           if((begin[i]<=score[k])&&(end[i]>=score[k])){              count+=1;              bate=(100*count)/m;           }         }         printf("%s的学生人数为:%d ,所占百分比为%.2f\n",classs[1],count,bate/100);      }  } //输出每个学生的学号和成绩 void Showinfo(int name[],int id[],int score[],int period[],int credit[],int n){     int i;     for(i=0;i<=n-1;i++){         printf("姓名：%5d 学号：%3d 分数：%3d 学时：%3d 学分：%3d\n",name[i],id[i],score[i],period[i],credit[i]);     } } //根据学号查询学生成绩 int Selectsort(int name[],int id[],int score[],int period[],int credit[],int n,int x){     int temp_score,i,j,temp_id,k;     for(i=0;i<n-1;i++){         for(j=i+1;j<n;j++){             if(score[i]<score[j]){                     temp_score = score[i];                     score[i]=score[j];                     score[j]=temp_score;                     temp_id=id[i];                     id[i]=id[j];                     id[j]=temp_id;             }         }     }     for(k=0;k<n;k++){         if(id[k]==x)             return k;      }return -1;     }  //从高到低打印成绩 void Scoresort(int name[],int id[],int score[],int period[],int credit[],int n){     int temp_score,i,j,temp_id;     for(i=0;i<n-1;i++){         for(j=i+1;j<n;j++){             if(score[i]<score[j]){                     temp_score = score[i];                     score[i]=score[j];                     score[j]=temp_score;                     temp_id=id[i];                     id[i]=id[j];                     id[j]=temp_id;             }         }     }   } //计算班级平均分 int Average(int name[],int id[],int score[],int period[],int credit[],int n){     int i,sum=0;     for(i=0;i<n;i++){         sum+=score[i];     }     return sum; } //录入学生成绩 void Readscore(int name[],int id[],int score[],int period[],int credit[],int n){       int i;     for(i=0;i<n;i++){         printf("输入学生的姓名，学号，分数，学时，学分");         scanf("%d %d %d %d %d",&name[i],&id[i],&score[i],&period[i],&credit[i]);         if(score[i]<0){             printf("成绩输入错误\n");                      }     } 		system("pause"); }       这是我用了改过后的，但是编译运行后，陷入了一个死循环，能帮帮我吗

引用 1 楼 user-1的回复:1，用了关键字命名变量。 2，无返回值函数返回int 3，这你自己写的吗  #include <stdio.h> #include <stdlib.h> #define N 30   void Readscore(int id[], int score[], int n);  int Average(int score[], int n);  void Scoresort(int id[], int score[], int n);  void Idsort(int id[], int score[], int n);  int Selectsort(int id[], int score[], int n, int x);  void Scoreclass(int score[], int n);  void Showinfo(int id[], int score[], int n);   int main() { 	int num, score[N], aver, n, sum, id[N], i, m, x, k, great = 0, better = 0, middle = 0, low = 0, lower = 0;   	while (1) { 		//首页选择项的输出  		printf("----------------\n"); 		printf("1.Input record\n"); 		printf("2.Caculate total and average score of course\n"); 		printf("3.Sort in descending order by score\n"); 		printf("4.Sort in ascending order by number\n"); 		printf("5.Search by number\n"); 		printf("6.Sta1tistic analysis\n"); 		printf("7.List record\n"); 		printf("0.Exit\n"); 		printf("Please enter your choice\n"); 		scanf("%d", &num); 		//用户输入功能键的输入输出   		switch (num) { 		case 0:  			break; 		case 1: 			printf("Input n:\n"); 			scanf("%d", &n); 			Readscore(id, score, n); 			break;  		case 2: 			sum = Average(score, n); 			printf("Sum score is %d\n", sum); 			printf("Average score is %d\n", sum / n); 			break; 		case 3: 			Scoresort(id, score, n); 			for (i = 0; i <= n - 1; i++) { 				printf("%3d%5d\n", id[i], score[i]); 			} 			break; 		case 4: 			Idsort(id, score, n); 			for (i = 0; i <= n - 1; i++) { 				printf("%3d%5d\n", id[i], score[i]); 			} 			break; 		case 5: 			printf("Input id:\n"); 			scanf("%d", &x); 			m = Selectsort(id, score, n, x); 			if (m == -1) { 				printf("查询错误\n"); 			} 			else { 				printf("----------------\n"); 				printf("id:%3d score:%3d 排名:%3d\n", id[m], score[m], m + 1); 			} 			break; 		case 6: 			Scoreclass(score, n); 			break; 		case 7: 			Showinfo(id, score, n); 			sum = Average(score, n); 			printf("----------------\n"); 			printf("Sum score is %d\n", sum); 			printf("Average score is %d\n", sum / n); 			break;   		default: 			printf("Invalid operator\n");     		} 	} } //输出分数段 void Scoreclass(int score[], int n) {  	int i, j, count, k; 	double bate, m; 	m = n; 	int begin[5] = { 0,60,70,80,90 }; 	int end[5] = { 59,69,79,89,100 }; 	char re[][10] = { "不及格","及格","中等","良好","优秀" };  	for (i = 0, j = 0; i <= n, j < 5; i++, j++) { 		count = 0; 		bate = 0; 		for (k = 0; k < n; k++) { 			if ((begin[i] <= score[k]) && (end[i] >= score[k])) { 				count += 1; 				bate = (100 * count) / m; 			}  		}  		printf("%s的学生人数为:%d ,所占百分比为%.2f\n", re[j], count, bate / 100);  	}  } //输出每个学生的学号和成绩 void Showinfo(int id[], int score[], int n) { 	int i; 	for (i = 0; i <= n - 1; i++) { 		printf("id:%3d score:%3d\n", id[i], score[i]); 	} } //根据学号查询学生成绩 int Selectsort(int id[], int score[], int n, int x) { 	int temp_score, i, j, temp_id, k; 	for (i = 0; i < n - 1; i++) { 		for (j = i + 1; j < n; j++) { 			if (score[i] < score[j]) { 				temp_score = score[i]; 				score[i] = score[j]; 				score[j] = temp_score; 				temp_id = id[i]; 				id[i] = id[j]; 				id[j] = temp_id; 			} 		} 	} 	for (k = 0; k < n; k++) { 		if (id[k] == x) 			return k;  	}return -1;     } //根据学号从小到大打印成绩 void Idsort(int id[], int score[], int n) { 	int temp_score, i, j, temp_id; 	for (i = 0; i < n - 1; i++) { 		for (j = i + 1; j < n; j++) { 			if (id[i] > id[j]) { 				temp_score = score[i]; 				score[i] = score[j]; 				score[j] = temp_score; 				temp_id = id[i]; 				id[i] = id[j]; 				id[j] = temp_id; 			} 		} 	}   } //从高到低打印成绩 void Scoresort(int id[], int score[], int n) { 	int temp_score, i, j, temp_id; 	for (i = 0; i < n - 1; i++) { 		for (j = i + 1; j < n; j++) { 			if (score[i] < score[j]) { 				temp_score = score[i]; 				score[i] = score[j]; 				score[j] = temp_score; 				temp_id = id[i]; 				id[i] = id[j]; 				id[j] = temp_id; 			} 		} 	}   } //计算班级平均分 int Average(int score[], int n) { 	int i, sum = 0; 	for (i = 0; i < n; i++) { 		sum += score[i]; 	} 	return sum; } //录入学生成绩 void Readscore(int id[], int score[], int n) {   	int i; 	for (i = 0; i < n; i++) { 		printf("Input student's id and score:"); 		scanf("%d %d", &id[i], &score[i]); 		if (score[i] < 0) { 			printf("成绩输入错误\n"); 			return; 		} 	} 	system("pause"); }  不是我自己写的，这是我们教导老师所给一个程序模板，根据模板修改一下，实现自己要求


Question: 用英文单词模拟数学计算系统

这个得先对0到9的英文进行定义，然后转化为数字，得到计数结果后再转化为英文


Question: c语言

标准答案.c

#include<iostream.h> #include<春夏秋冬.h> void main(){   printf("Hello,生长情况\n\r"); }

#include<iostream.h> #include<stdlib.h> void main(){   printf("Hello,春夏秋冬\n\r"); }


Question: 大佬帮忙看看哪里有问题

你的链表没有连接到一块，按下面代码修改下。另外你malloc的内存没有free掉，在打印后free下。  while(flag!='N')     { 		printf(" please in put name\n"); 		scanf("%s",str); 		getchar(); 		p2=(struct student *)malloc(sizeof(struct student)); 		strcpy(p2->name,str); 		p2->next = NULL; 		p1->next=p2; //新来的链表，放在尾指针p1的next 		printf("continuing?"); 		scanf("%c",&flag); 		p1 = p2; //p1指向链表最后一个     }  void main() {     struct student *head,*p;     head=creat(); 		 	p = head; 	struct student *temp;     while(p!=NULL)     { 		printf("name is %s\n",p->name); 		temp = p;         p=p->next; 		 		free(temp); //使用完毕要释放内存     } }


Question: 哈夫曼树的编码译码

引用 2 楼 动力风暴的回复:建议粘贴代码用格式  #include<stdio.h> #include <stdlib.h> #include <string.h>  #define maxval 100000000.0  typedef struct { char ch; float weight; int lchild,rchild,parent; }hufmtree; typedef struct { char bits[100];    int start;     char ch;       }codetype; int n, m; char *values; float *weights;  👍哈哈哈哈哈哈哈哈哈哈哈哈哈


Question: c程序折半查找法

网上有很多的资料，算法讲解，比只要代码要丰富的多，一下是一个博客的链接  https://blog.csdn.net/qq_40365941/article/details/81485607


Question: while (scanf_s("%d", &temp)==1)循环以外的语句无法执行，这是为什么啊？

while (scanf_s("%d", &temp)==1)执行条件是scanf_s的返回值等于1，并不是temp等于1,scanf_s的返回值是读取的个数，你的刚刚好读取一个数，不会跳出的

引用 1 楼 此生注定孤独的回复:你的while陷入了死循环啊---后面的没执行~ 我在while(scanf_s)中scanf_s的前面加上fflush(stdin)，也试着在条件中加了getchar()，虽然这两个办法都不会再让我继续输入了，但是还是不执行printf，按下enter之后直接闪退，这是为什么呢？

你的while陷入了死循环啊---后面的没执行~


Question: C语言题目

引用 4 楼 来不及的如果 的回复:我C语言初学啊！我真的看不懂啊 这不是看得懂看不懂的问题。编程需要实践。既然入了C语言的坑，那肯定写过hello world吧。既然写过hello world，print应该会用吧。把你问的问题复制到vs（vc6或者turbo c，不清楚现在用到ide是哪种），这个不难吧。直接编译跑一遍是最基础的吧。哪里不会或者不懂的，用print打印下，不难吧。 等你把上面那些都搞明白了。实在不理解数组的内存分布，再来问问，或者问问老师，应该就能理解了吧。

引用 3 楼 轻箬笠的回复:楼主也太懒了吧。这种题直接放到vs里面跑一遍就知道了。如果不确定num[0]和num[1]里面的数值，std::cout打印下就知道了。再不清楚，看看什么叫数组，数组的内存排列顺序和数组的初始化也能懂。直接问，就算给了你答案，除了应付了这道题目，你还得到什么了 我C语言初学啊！我真的看不懂啊

这不是共用体的问题，共用体应该是union关键字，而不是struct

其实主要是把num[0].y, num[0].x， num[1].x的值打出来就可以知道为啥结果为6了 3/1 × 2 = 6  struct  complex { int x; int y; }num[2]={ {1,3},{2,7}};


Question: C语言问题

这张清楚些

这是输出结果。

应该是24吧,j分配的是一个内存，每加一次都自加先运算括号内的三次 j就等于8了 8+8+8=24


Question: 大神们，这个怎么弄啊

楼上版主正解

8进制，除8取余，然后倒序一下就是转换为8进制的数据，十六进制一样，除16取余


Question: VS 2019 的操作问题

按键盘上的ins键

引用 1 楼 user-2的回复:文件输入有插入模式和替换模式，切换按键Insert 问题已解决 多谢！！！！

文件输入有插入模式和替换模式，切换按键Insert


Question: 编写程序

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


Question: 求大神帮过

（二）超市总营业额分析程序 要求：  输出每天的销售记录，包括：  ①每笔销售记录存储3个数据，例如：得力固体胶 2 2。 ②它们代表：品名，数量（个） 单价（元）。 ③将每天的销售记录通过文件进行存储。 ④每周末进行盘存，从文件读取数据，并汇总出周销售额。 就是这个题目


Question: linux c求助

把代码贴全，看目前的代码没发现问题。

typedef放前面，结构数组另起一行定义，初始化结构数组用memset简单点


Question: 使用灰狼优化算法对svr进行参数寻优，做回归预测，使用matlab编写，工具包是libsvm,预测结果却是一条直线

现在结果怎么样？？？

我也是，你不是一个人。

有一点平衡了。。。。。。。。


Question: devc++运行C语言程序中sleep()函数。

你好  会写操作系统的c语言代码吗

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

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

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

sleep的参数就是毫秒级的，sleep（1） 休眠1ms

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

1/5==0  1/5000==0


Question: C语言

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

你这是结构体数组

链表要包含数据和指针，指针用于指向下一个结构，但是你的Student只有数据没有指针，因此不能算是链表


Question: 请大神帮我看看，为什么会一直报错，C语言的程序设计

引用 2 楼 顾球球循环的回复:#include <stdio.h> #include <stdlib.h> #define N 3 //定义学生人数 N 为 3  struct student //建立结构体类型 struct student   {  int num; //学生的学号  char name[10]; //学生的姓名  float score[3]; //三门课程的成绩  float aver; //课程平均成绩  };  void input(struct student stu[])  //定义input()函数，用于输入学生的信息 { int i; printf("请输入各学生的信息：学号、姓名、三门课程的成绩：\n"); for (i=0; i<N; i++) { scanf("%d %s %f %f %f", &stu [i].num,stu [i].name,&stu [i].score[0],&stu [i].score[1],&stu [i].score[2]); stu[i].aver=(stu [i].score[0]+stu [i].score[1]+stu [i].score[2])/3.0; //求课程的平均成绩 stu[i].aver  } }   void student_max(struct student stu[])  //错误在这里，不过因为我也是个半吊子不太会改了orz你看看你会不会改。  {   int i, m = 0; for(i=1; i<N; i++) if(stu[i].aver > stu[m].aver)  m=i; return stu[m]; }  void print_aver_max(struct student stud) { printf("\n成绩最高的学生是：\n"); printf("学号 姓名 成绩1 成绩2 成绩3 平均成绩\n"); printf("%5d %20s %5.1f %5.1f %5.1f %6.2f\n",stud.num, stud.name, stud.score[0], stud.score[1], stud.score[2], stud.aver);  }   void  print_all(struct student stud[]) { int i; printf("\n所有学生是：\n"); printf("学号 姓名 成绩1 成绩2 成绩3 平均成绩\n"); for(i=0; i<N; i++) printf("%5d %10s %5.1f %5.1f %5.1f %6.2f\n",stud[i].num, stud[i].name, stud[i].score[0], stud[i].score[1], stud[i].score[2],stud[i].aver);  }  void print_aver(struct student stu[])//sort改成print  { int i,j,k; struct student t; for(i=0;i<N-1;i++) printf("%5d %10s %5.1f %5.1f %5.1f %6.2f\n",stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2],stu[i].aver);  }  void sort_aver(struct student stu[]) { int i,j,k; struct student t; for(i=0;i<N-1;i++) { k = i; for(j = i + 1; j < N; j++) if(stu[j].aver > stu[k].aver) k = j; t = stu[k]; stu[k] = stu[i]; stu[i] = t;   } }  int main() { struct student stu[N],stumax,*p; p = stu;  input(p); student_max(p); print_aver_max(stumax); sort_aver(p); print_all(p);  system("pause"); return 0;   }   我只会改到这了orz其实没改啥都是细节问题，编译完了好好检查下啊喂。 结构体忘得差不多了，标出来的那个地方，你可以查一下关于“函数返回值是数组”的帖子，我基础知识忘太多了看不懂了TvT 谢谢谢谢，谢谢谢谢，谢谢

第3行define写错了，第19行漏了分号，第53行结构体名称写错。其他的我再看看。


Question: 随机函数

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

为啥，不能在最后加上吗

为啥，不能在最后加上吗

肯定不能了，这代码都是写死了，只找0-8


Question: 函数调用

先学学语文，语句都不通顺，还让别人怎么回答

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

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

每一次调用都会返加，当时的返回值就会返回到调用他的地方。


Question: C语言问题

不适用strcat，那就自己实现一下：

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

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

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

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


Question: 有谁知道龙曲线啊啊啊啊啊


Question: 改程序，这个c++能改成c语言程序吗

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

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


Question: 菜鸟求助

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

一般情况会赋初始值

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

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

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

即静态区会初始化，动态区则不会

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

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

定义结构体后，一般情况会赋初始值。

定义结构体后，一般情况会赋初始值。


Question: 求助：为什么我的while（1）里面的代码不运行啊？

引用 4 楼 李文强liwq 的回复:看代码添加的描述   void hero_init() //英雄初始化  { int ch; int time = 0;  printf("请输入您的名字：\n"); scanf("%s",&player.name); //这里有个回车，还在输入缓冲区没有读出来  //1.可以在这在调用下getchar把回车符读出去  player.delay = 0; do { //2.添加清空输入缓冲区代码 fflush(stdin);  if(time!=0) if(_kbhit) { ch = _getch(); if(ch==13) {break;}  //输入name时的回车在这里读取到，直接break跳出循环了 else if(ch!=32) {continue;} }   感谢hhhh  已经解决啦，只是一直没结帖orz 问题其实是有几个画图的for循环里作死写了break，导致程序没法运行。删掉基本就好了hhhh

调试是吧主函数里东西都清空了，单独打印别的东西都ok，但调用paint_dragon9（）就不行了。开始以为是因为里头的break，但把switch改成了if，else if还是不行。

哦对主函数里循环改成for循环饿orz

代码，预想的功能是一个打怪的小游戏，按W跳跃闪避，按E攻击。怪定时攻击。  #include <stdio.h>  #include <conio.h>  #include <time.h> #include <stdlib.h>  #include <windows.h> /* 设定： 玩家： 攻击力，生命值，技能效果，CD； 敌人： 攻击力，生命值，CD； //跳跃怎么做？如果我想要子弹打在敌人身上才算攻击成功，怎么做？结构体：玩家，敌人。 子函数：画布初始化。 玩家初始化。 敌人初始化。//需要么？  绘制玩家。 绘制敌人。 绘制玩家技能。 绘制敌人技能。 绘制玩家跳跃动画（5帧） 玩家行为函数。 敌人行为函数。  //尝试敌人攻击频率随机。*/ void fun(int ch); //用于控制英雄的行为模式  void fun2(); //用于控制敌人的行为模式  void hero_init(); //初始化英雄 √  int random(); //产生随机数 √  void paper_print(); //画纸打印到命令行界面上 √  void paint_dragon(int x,int y); //把大龙画到画纸上 √  void paint_hero(int x,int y); //把英雄画到画纸上 √  void paint_dragon_health(); //把大龙生命条画到画纸上 //能不能做到攻击敌人敌人生命条递减？ √（理论上递减）  void paint_hero_skill_e(); //绘制技能动画 √  void paint_hero_skill_w(); //跳跃动画  void paint_dragon_skill(); //把大龙技能画到画纸上 √  void paper_init(); //清空画纸 √ char paper[25][110];int mode1=0; int mode2=0; int protect=0; struct hero  { char name[100]; int health; int attack; int delay; };struct dragon { char name[100]; int health; int attack; int delay; };struct hero player;struct dragon enemy;void dragon_init() { // enemy.name = "dragon"; enemy.health = 50; enemy.attack = 20; enemy.delay = 10; }int main(int argc, char *argv[]) //主函数  {  int ch,i,j; srand((unsigned int)time(NULL)); hero_init(); dragon_init(); paper_init(); for(;;) {  if(enemy.health<0||player.health<0) // {break;} // system("cls"); if(_kbhit) { ch = _getch(); } paper_init(); paint_dragon_health(); fun(ch); fun2(); ch = 0; paint_dragon(106,23); paper_print(); printf("\n"); printf("玩家： 姓名：%s 生命值：%d 攻击力：%d 技能CD：%d s\n",player.name,player.health,player.attack,player.delay); printf("%d",ch); sleep(50); printf("%d",1); } system("cls"); if(player.health < 0) { printf("DEAD\n"); } if(enemy.health < 0) { printf("WIN\n"); } return 0; } void paper_init() //画纸初始化  { int i,j; for(i=0;i<25;i++){ for(j=0;j<110;j++){ paper[i][j] = ' '; } } }void paper_print() //绘制函数  { int i,j; for(i=0;i<25;i++) { for(j=0;j<110;j++){printf("%c",paper[i][j]);} printf("\n"); } }void paint_dragon_skill() //绘制敌人技能动画  { int i,j; for(i = 99;i >5; i--){ for(j=23;j>22;j--){ paper[j][i] = '-'; } }  }void paint_hero_skill_e(int x) //绘制玩家技能动画  { int i,j; for(i = 24;i > 22; i--){ for(j=x;j<x+5;j++){ paper[i][j] = '|'; } } }void paint_hero_skill_w() //绘制玩家跳跃动画  { switch(player.delay) { case 3: paint_hero(2,22); protect=1; break; case 2: paint_hero(2,21); protect=1; break; case 1: paint_hero(2,22); protect=1; break; case 0: paint_hero(2,23); protect=0; break; }  } void paint_hero(int x,int y) //绘制玩家  { paper[y-1][x] = '@'; paper[y][x-1] = '/'; paper[y][x] = '|'; paper[y][x+1] = '-'; paper[y+1][x-1] = '/'; paper[y+1][x] = ' '; paper[y+1][x+1] = '|'; }void paint_dragon(int x,int y) //绘制敌人  { switch(mode2) { case 0://正常  paper[y][x] = ')'; paper[y][x-1] = ' '; paper[y][x-2] = ' '; paper[y][x-3] = '0'; paper[y][x-4] = 'w'; paper[y][x-5] = '0'; paper[y][x-6] = '('; break; case 1://被击中  paper[y][x] = ')'; paper[y][x-1] = ' '; paper[y][x-2] = ' '; paper[y][x-3] = '<'; paper[y][x-4] = 'a'; paper[y][x-5] = '>'; paper[y][x-6] = '('; break; case 2://攻击  paper[y][x] = ')'; paper[y][x-1] = ' '; paper[y][x-2] = ' '; paper[y][x-3] = '='; paper[y][x-4] = 'W'; paper[y][x-5] = '='; paper[y][x-6] = '('; break; case 3: paper[y][x] = ')'; paper[y][x-1] = ' '; paper[y][x-2] = ' '; paper[y][x-3] = '>'; paper[y][x-4] = 'w'; paper[y][x-5] = '<'; paper[y][x-6] = '('; break; } }void paint_dragon_health() //绘制大龙血条  { int i,j; for(i=110;i>(110-enemy.health);i--) for(j=2;j<3;j++) { paper[j][i] = '*'; } }int random() { return rand(); }void hero_init() //英雄初始化  { int ch; int time = 0;  printf("请输入您的名字：\n"); scanf("%s",&player.name);  player.delay = 0; do { if(time!=0) if(_kbhit) { ch = _getch(); if(ch==13) {break;} else if(ch!=32) {continue;} } else {continue;} system("cls"); printf("自动生成数据如下：\n"); printf("玩家姓名：%s\n生命值：%d\n攻击力：%d\n攻击CD：%d s\n",player.name,player.health = random()%20+90,player.attack = random()%5+15,1); printf("按 回车 键继续，按 空格 键重新生成数据。");  time = 1; }while(1); }  void fun(int ch) //玩家行动函数  { if(player.delay == 0) { switch(ch) { case 119: player.delay = 3; mode1 = 1; break; case 101: player.delay = 5; mode1 = 2; if(paper[24][99] == '|') { mode2 = 1; paint_dragon(106,23); enemy.health = enemy.health - player.attack;  } break; } } switch(mode1) { case 0: paint_hero(2,23); break; case 1: paint_hero_skill_w(); break; case 2: paint_hero(2,23);  paint_hero_skill_e(3 + 20*(5 - player.delay));  break; } if(player.delay > 0) { player.delay--; } else {player.delay = 0;} }void fun2() //敌人行动函数  { if(enemy.delay == 0) { mode2 = 2; paint_dragon(106,23); paint_dragon_skill(); if(protect == 0) {player.health = player.health - enemy.attack;} } else if(enemy.delay == 3) { mode2 = 3; paint_dragon(106,23); } else {paint_dragon(106,23);} if(enemy.delay > 0) { enemy.delay--; } else {enemy.delay = 0;} }


Question: c语言实训

既然是初级的，那就做个控制台程序呗

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


Question: 求大神指教

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

int tsSXHBitsCntGet(int iNum) { 	int iBitsCnt = 0; 	int iNumber = iNum; 	int iRemainder = 0; 	int iQuotNum = 0; 	 	while(1) 	{ 		iRemainder = iNumber%10; 		iQuotNum = iNumber/10; 		if(iRemainder == 0 && iQuotNum == 0) 		{ 			break; 		} 		iBitsCnt++; 		iNumber = iQuotNum; 	} 	 	return iBitsCnt; }  int  tsSXHCheck(int iNum) { 	int iBitsCnt = tsSXHBitsCntGet(iNum); 	int iNumber = iNum; 	int iRemainder = 0; 	int iCalcNum = 1; 	int iTotalNum = 0; 	 	int i = 0; 	int j = 0; 	 	for(i = 0;i<iBitsCnt;i++) 	{ 		iRemainder = iNumber%10; 		iCalcNum = 1; 		for(j = 0;j<iBitsCnt;j++) 		{			 			iCalcNum = iCalcNum * iRemainder; 		} 		iTotalNum += iCalcNum; 		iNumber = iNumber/10; 	} 	 	if(iTotalNum == iNum) 	{ 		printf("shui xian hua shu ju is [%d] \n",iNum); 	} }


Question: 菜鸟程序字符串倒输出

递归函数：逆序输出字符串；根据栈的特性：先进后出，所以输出的也是逆序的

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


Question: 为什么别人的代码复制粘贴在自己的vc2010上会报错

代码发出来看看，报错信息是嘛？

运行环境不同~


Question: c语言 怎么比较两个储存在字符数组里的日期

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

c语言怎么做啊…能不能教教我呀大佬

我一般设计把比较时间丢给数据库里执行。

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

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

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

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

7l已经给你答案了

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

char s1[]="2019/6/12", char s2[]="2019/10/1"; char *p; int year1, month1, day1; int year2, month2, day2;  p = strtok(s1, "/"); if (p) year1 = atoi(p); p = strtok(NULL, "/"); if (p) month1 = atoi(p); p = strtok(NULL, "/"); if (p) day1 = atoi(p);  p = strtok(s2, "/"); if (p) year2 = atoi(p); p = strtok(NULL, "/"); if (p) month2 = atoi(p); p = strtok(NULL, "/"); if (p) day2 = atoi(p);


Question: C语言中i++与++i的区别

值计算结果不同 副作用相同

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

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


Question: 求助大神，谢谢大神

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

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

控制台让用户手输入就可以


Question: 求求大佬，江湖救急！

谁画的流程图都有问题，打开失败到关闭文件，66


Question: 关于网络编程中通讯socket的数量控制

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

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

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

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

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

虎头蛇尾是俗人的习惯， 有始有终是君子的操守。

子进程有2处地方，父进程有1处调用 close(iConnSocket);

前者close 后有return 所以这说明永远只有一个close执行了

我觉得就是为了防止资源没有释放，多关闭几次。


Question: 求大神帮我看看这个题  c语言链表的

引用 1 楼 宾灬的回复:你要的答案：  #include <stdio.h> #include <stdlib.h> typedef struct node{ 	int sno; //学号 	char sex[3];//性别 	char sname[20]; //姓名 	float grade; //成绩 	struct node * nextNode; }Node;  /**  * [createNode 创建节点返回指针]  * @return [description]  */ Node * createNode(){ 	Node * node = (Node *)calloc(1, sizeof(Node)); 	node->nextNode = NULL; 	return node; } /**  * [insert 插入节点]  * @param  h [头节点指针]  * @param  s [要插入的节点]  * @return   [头节点]  */ Node * insert(Node * h, Node * s){ 	if(h == NULL){ //插入第一个节点时 没有头节点 		printf("插入成功\n"); 		return s;//s作为头节点 	} 	if(s->sno < h->sno){ //s节点的学号比头节点小 		s->nextNode = h; //s作为头节点 		printf("插入成功\n"); 		return s; 	}  	Node * tempNode = h; //中间变量 用于遍历 	Node * preNode = tempNode;//中间变量的前一个节点 	while(tempNode != NULL){ 		if(s->sno > tempNode->sno){ //要插入的节点的学号比当前节点大 			preNode = tempNode; 			tempNode = tempNode->nextNode; 			continue; 		} 		//插入到中间 		preNode->nextNode = s;  		s->nextNode = tempNode; 		break; 	} 	if(tempNode == NULL){ //插入的节点比已有的节点都大 		preNode->nextNode = s; 	} 	printf("插入成功\n"); 	return h; } /**  * [locate 根据学号查找目标节点]  * @param  h  [头节点指针]  * @param  no [学号]  * @return    [目标节点,没找到返回NULL]  */ Node * locate(Node * h, int no){ 	Node * tempNode = h; //中间变量 用于遍历 	for(; tempNode != NULL && tempNode->sno != no; tempNode=tempNode->nextNode){} 	if(tempNode == NULL){ 		printf("查无此学生\n"); 	} 	return tempNode;  }  /**  * [deleteNode 根据学号删除节点]  * @param  h  [头节点]  * @param  no [学号]  * @return    [头节点]  */ Node * deleteNode(Node * h, int no){ 	Node * tempNode = h; //中间变量 用于遍历 	Node * preNode = tempNode;//中间变量的前一个节点 	if(no == h->sno){ 		tempNode = h->nextNode; 		free(h); 		return tempNode; 	}  	 	while(tempNode != NULL){ 		if(no != tempNode->sno){ 			preNode = tempNode; 			tempNode = tempNode->nextNode; 			continue; 		} 		preNode->nextNode = tempNode->nextNode; 		free(tempNode); 	} 	return h; }  /**  * [printNode 打印节点]  * @param tempNode [节点]  */ void printNode(Node * tempNode){ 	if(tempNode == NULL){ 		return; 	} 	printf("%d \t%s \t%s \t%f\n",tempNode->sno, tempNode->sname, tempNode->sex, tempNode->grade); } /**  * [printLink 打印所有节点]  * @param h [头节点]  */ void printLink(Node * h){ 	printf("学号  \t姓名  \t性别  \t成绩\n"); 	Node * tempNode = h; //中间变量 用于遍历 	while(tempNode != NULL){ 		printNode(tempNode); 		tempNode = tempNode->nextNode; 	}	 }  /**  * [freeLink 释放空间]  * @param h [头节点]  */ void freeLink(Node * h){ 	Node * freeNode = h; //要释放的节点 	Node * nextNode = NULL; //要释放的节点的下一个节点 	while(freeNode != NULL){ 		nextNode = freeNode->nextNode; 		printf("释放学号为%d的空间\n",freeNode->sno); 		free(freeNode); 		freeNode = nextNode; 	} }  /**  * [main 主函数]  * @return [description]  */ int main(){ 	Node * head = NULL;//头节点 	while(1){ 		Node * node = createNode();//创建节点 		printf("请输入学号:"); 		scanf("%d",&(node->sno)); 		if(node->sno == -1){ 			free(node); 			break; 		} 		printf("%d\n", node->sno); 		printf("\n请输入姓名:"); 		scanf("%s",&(node->sname)); 		printf("%s\n", node->sname);  		printf("\n请输入性别:"); 		scanf("%s",&(node->sex)); 		printf("%s\n", node->sex);  		printf("\n请输入成绩:"); 		scanf("%f",&(node->grade)); 		printf("%f\n", node->grade); 		head = insert(head, node); 	} 	printf("\n======================您输入的学生信息如下=======================\n"); 	printLink(head);  	int sno; //学号 	printf("\n请输入要查找到的学生的学号:"); 	scanf("%d",&sno); 	printNode(locate(head, sno));  	printf("\n请再次输入要查找到的学生的学号:"); 	scanf("%d",&sno); 	printNode(locate(head, sno));  	printf("\n请输入要删除的学生的学号:"); 	scanf("%d",&sno); 	head = deleteNode(head, sno); 	printf("\n======================删除后的学生信息如下=======================\n"); 	printLink(head); 	printf("======================释放所有节点=======================\n"); 	freeLink(head); 	printf("释放空间完成\n"); 	return 0; }  谢大佬帮忙

数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

直接上码，呵呵，牛


Question: c语言的问题，想了好久

楼主想问一下怎么提问呢/

引用 1 楼 曹佑之的回复:#include <stdio.h>  #define MAX 10  int main() { 	int arr[MAX]; 	int  i = 0; 	int j = 0; 	int temp = 0; 	int key = 0;  	printf("please input the %d number:", MAX); 	for(i = 0; i < MAX; i++){ 		scanf("%d", &arr[i]); 	}  	while(1){ 		printf("please input your key(1/2/3):"); 		scanf("%d", &key); 		if(key >= 1 && key <= 3){ 			break; 		} 	} 	 	switch(key){ 	case 1 :  		for(i = 0; i < MAX - 1; i++){ 			for(j = 0; j < MAX - i - 1; j++){ 				if(arr[j] < arr[j + 1]){ 				temp = arr[j]; 				arr[j] = arr[j + 1]; 				arr[j + 1] =temp; 				} 			} 		} 		for(i = 0; i < MAX; i++){ 		printf("%4d", arr[i]); 		} 		printf("\n");  		break; 	case 2 : 		for(i = 0; i < MAX - 1; i++){ 			for(j = 0; j < MAX - i - 1; j++){ 				if(arr[j] > arr[j + 1]){ 				temp = arr[j]; 				arr[j] = arr[j + 1]; 				arr[j + 1] =temp; 				} 			} 		} 		for(i = 0; i < MAX; i++){ 			printf("%4d", arr[i]); 		} 		printf("\n"); 		break; 	case 3 : 		for(i = 0; i < MAX; i++){ 			printf("%4d", arr[i]); 		} 		printf("\n"); 		break; 	} 	return 0; }//请参考 谢谢哥，我试试，啦啦啦


Question: 在for死循环中，不断用getchar读取键盘输入字符串流 试编程，解析字符串中含有AA开头，后面跟4个数字的串，

挺好的   有一点是不可以循环输入

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

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

一个多if思路

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

求救🆘 急救啊😱 大神们帮帮孩子吧


Question: 输入五名考生的数据信息（准考证号，姓名，性别，年龄，成绩）并编写函数，通过调用函数实现。1、找出成绩最高的考生信息，并输出。2、按考生成绩从大到小排序

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

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

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

每个scanf()后面紧随调用fflush(stdin)或setbuf(stdin,NULL)清空输入区缓存，否则引起混乱


Question: c语言题目

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

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

呃这个问题。。。。。 if(x) ｛y++;｝ y=y+1; 是不是这样就能看懂了？


Question: 有没有大神指导一下

要用这个Dosbox做 刚刚入门 不怎么会


Question: 新手求回答！

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

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

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

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

for (j = 0; j<4; j++) 		printf("%d", r[i][j]); //输出矩阵 你这里循环时，i没有变化


Question: 求各位大佬帮帮忙 实验周要设计一个程序，平时没怎么学习实验周又和考试周重叠 所以请各位大佬帮帮忙谢谢啦

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

你这工作量有点大

可以帮我修改一下代码吗

你这是课程设计啊，代码量有点大。 这里估计没人会专门写一个这，所以你赶紧换题目或者自己写吧   哈哈


Question: 菜鸟题c语言编写抓交通肇事犯

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

楼上牛，运行得到车牌：7744

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

(i != k)

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

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

你if后面应该还有个花括号吧{}，number和下面的for应该是同一级


Question: 这个代码如何添加使用外部文件储存通讯录信息，请大神赐教！谢谢！

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

去了解一下C语言的文件流，把结构体存起来就行了


Question: C语言实训求解 一个修改函数没错运行有问题

这个难道不能在帖子下回复嘛 忘记去看惹  来晚了就是这个错误我真是太傻了 已经改好交作业了 谢谢ni

你这scanf是个什么用法.  	printf("请重新输入该员工信息"); 	printf("工号："); 	scanf("%s,st[changeIndex].num"); 	printf("姓名："); 	scanf("%s,st[changeIndex].name"); 	printf("工龄："); 	scanf("%d,st[changeIndex].gl"); 	printf("基本工资："); 	scanf("%d,st[changeIndex].jbgz"); 	printf("奖金："); 	scanf("%d,st[changeIndex].jj"); 	printf("应发工资："); 	scanf("%d,st[changeIndex].yfgz"); 	printf("五险一金："); 	scanf("%d,st[changeIndex].wxyj"); 	printf("实发工资："); 	scanf("%d,st[changeIndex].yfgz");

拜托拜托大家

#include<stdio.h> #include<stdlib.h>//包含常用系统函数 #include<string.h>//常用的头文件 struct employee { char num[30];//工号 char name[30];//姓名 int gl;//工龄 int jbgz;//基本工资 int glgz;//工龄工资 int jj;//奖金 int yfgz;//应发工资 int wxyj;//五险一金 int sfgz;//实发工资 }; int read_file(struct employee st[]); void menu(); int write_file(struct employee st[]); void select();//查看员工信息 void num_modify();//修改员工信息 void fh();//返回主菜单 void save(); struct employee st[30]; int Number=0;//记录总的员工人数 int main() { 	int choose=0;     FILE *fp=NULL; 	char yesorno; 	if((fp=fopen("manage.txt","rb+"))==NULL) 	{ 		printf("\n=======>提示：文件不存在，是否要创建一个(y/n)\n"); 		scanf("%c",&yesorno); 		if(yesorno=='y'||yesorno=='Y') 		{ 			fp=fopen("manage.txt","wb+"); 			fclose(fp);//关闭fp所指的文件，释放文件缓冲区 		} 		else 			exit(0); 	} 	else 	{ 		Number=read_file(st);//要是文件已经有数据 将数据初始化到数组中 } 	system("cls"); 	while(true) 	{ 		menu(); 		printf("\t\t=======>请选择："); 		scanf("%d",&choose); 		system("cls"); 		switch(choose) 		{ 			case 0: 			exit(0);//退出系统 			break; 			case 1:             select();//查看员工信息 			fh(); 			break; 			case 2: 			num_modify();//修改员工信息 			fh(); 			break; 			case 3: 			;// 			fh(); 			break; 			case 4: 			;// 			fh(); 			break; 			case 5: 			;// 			fh(); 			break; 			case 6: 			;// 			fh(); 			break; 			case 7: 			;// 			fh(); 			break; 			case 8: 			save();// 			fh(); 			break; 			default: 			break; 		} 		fflush(stdin); 		getchar(); 		system("cls"); 	} }  void select() { 	printf("%d",Number);     printf("以下是全部员工信息:\n");     printf("工号\t姓名\t工龄\t基本工资\t工龄工资\t奖金\t应发工资\t五险一金\t实发工资\n");     for(int i=0;i<Number;i++)      printf("%s\t%s\t%d\t%d\t\t%d\t\t%d\t%d\t\t%d\t\t%d\n",st[i].num,st[i].name,st[i].gl,st[i].jbgz, 	    	st[i].glgz,st[i].jj,st[i].yfgz,st[i].wxyj,st[i].sfgz);  }  void fh() { 	printf("\t=================>按Enter返回主菜单\n"); } void save() { 	printf("\t=================程序在运行时已自动保存\n"); }  void num_modify()//修改员工信息 { FILE *fp=NULL; char xh[100];     int i=0; 	int changeIndex;//changeIndex改变标记 	int index=0; 	printf("请输入要修改的职工编号："); 	scanf("%s",xh); 	   for(i=0;i<Number;i++) 	   { 		   if(strcmp(xh,st[i].num)==0)//比较输入工号和数组中已有工号 		   { 			   changeIndex=i;//保存要修改的人的下标 			   break; 		   } 	   } 	   printf("工号\t姓名\t工龄\t基本工资\t基本工资\t奖金\t应发工资\t五险一金\t实发工资\n"); 	   printf("\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",st[changeIndex].num,st[changeIndex].name, 		   st[changeIndex].gl,st[changeIndex].jbgz,st[changeIndex].glgz,st[changeIndex].jj, 		   st[changeIndex].yfgz,st[changeIndex].wxyj,st[changeIndex].sfgz); 	   printf("请重新输入该员工信息");     	printf("工号："); 		scanf("%s,st[changeIndex].num");     	printf("姓名："); 		scanf("%s,st[changeIndex].name");     	printf("工龄："); 		scanf("%d,st[changeIndex].gl");     	printf("基本工资："); 		scanf("%d,st[changeIndex].jbgz");     	printf("奖金："); 		scanf("%d,st[changeIndex].jj");     	printf("应发工资："); 		scanf("%d,st[changeIndex].yfgz");     	printf("五险一金："); 		scanf("%d,st[changeIndex].wxyj");     	printf("实发工资："); 		scanf("%d,st[changeIndex].yfgz");         //信息修改后重新更新文件里面的数据以保持数据一致性 		fp=fopen("manage.txt","wb+"); 		for(i=0;i<Number;i++) 		{ 			fwrite(&st[i],sizeof(struct employee),1,fp); 			//把ptr所指向n*size个字节输入到fp所指向的文件中 		} 		fclose(fp); 		printf("\t=================>修改成功\n"); }  int read_file(struct employee st[]) {     FILE *fp=NULL; 	int i=0; 	 if ((fp=fopen("manage.txt","rb+")) == NULL) 	 { 		printf("文件打开错误"); } 	while(1) { 		if (fscanf(fp, "\t%s\t%s\t%d\t%d\t\t%d\t\t%d\t%d\t\t%d\t\t%d\n",st[i].num,st[i].name,&st[i].gl,&st[i].jbgz,   	    	&st[i].glgz,&st[i].jj,&st[i].yfgz,&st[i].wxyj,&st[i].sfgz)== EOF) 		{ 			break; 		} 		i++; 	} 	fclose(fp); 	return i; }  void menu()//菜单 { printf("\t***************************************\n"); printf("\t*                                     *\n"); printf("\t*      欢迎进入职工工资管理系统       *\n"); printf("\t*           1.查看员工信息            *\n"); printf("\t*           2.修改员工信息            *\n"); printf("\t*           3.查找员工信息            *\n"); printf("\t*           4.删除员工信息            *\n"); printf("\t*           5.增加员工信息            *\n"); printf("\t*           6.员工总工资进行排序      *\n"); printf("\t*           7.查看所有员工信息        *\n"); printf("\t*           8.文件保存到硬盘上        *\n"); printf("\t*           9.员工按奖金进行排序      *\n"); printf("\t*           10.工龄超过10年的人       *\n"); printf("\t*           11.工龄不足3年的人        *\n"); printf("\t*           0.退出程序                *\n"); printf("\t*                                     *\n"); printf("\t***************************************\n"); }


Question: 大神可以教一下怎么写这个·程序吗？

通过随机数种子生成一个字符串用作打字模板，再用循环 getchar输入字符 直到接受到换行符 得到一个字符串 ，然后循环比较一下就能得到正确率了


Question: 求解答：谢谢！

谢谢，谢谢解答，

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

为什么我的打印输出会这样子


Question: C语言编写

有需求吗？编程不能随便写，得看你要的要求是什么，另外最好自己先写写


Question: 求助

眼泪哭干了可能就会有人帮你了

好像已经迟了


Question: 数据结构(c语言完成)

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

厉害了，大佬又来出题了


Question: c语言课程设计

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


Question: 小白学生管理系统求解 20分 谢谢

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

if (head = NULL) -> if (head == NULL)

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


Question: 怎么把他写成函数形

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


Question: c语言

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


Question: 急求大佬~

请移步C#区

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

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

文件访问控制是什么意思？对某一个文件读写权限的控制？


Question: c语言求助！

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

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

好像并没看到图


Question: 学校OJ上里的练习题（渣渣求助！题目超时不知道怎么解决

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

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


Question: 写入文件乱码

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

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

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

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

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

召唤水怪 召唤混分巨兽


Question: C语言程序设计

第二题帮帮忙啊啊啊啊


Question: c语言菜鸟请大佬解答，c语言杀我

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

伸手党是要被C语言杀了的


Question: 为什么printf("j=%d,k=%d,f=%f\n",j),k,f;  可以通过编译?

谢谢,学习了.

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

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

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

printf("<格式化字符串>", <参量表>)。printf解析格式化字符串是在函数内部分解的，编译器并不参与分解格式化字符串，所以不会在编译时出错。 ,也是表达式 	int a,b,c; 	a,b,c; 	a+b,a+c,b+c; 这样是可以的，而且不会有问题 a=(b,c);结果是a=c


Question: C语言

参考《小马过河》


Question: [求助]在一个非降序列中，查找与给定值最接近的元素。(麻烦大神看一下我写的代码哪里错了)

在oj平台上运行有两组结果时间超限


Question: 24点游戏结果无法去重，求大佬指点！

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

细看赵老师发的贴子，精髓

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

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

我是想在我的原有代码上改一些东西，实现结果去重，我先在只学了c，还不会c++。


Question: 课设，急，有哪个大佬帮一下吗（C语言）

引用 1 楼 吖如 的回复：#include <iostream> #include <ctime> const int SIZE = 100; const int MAX = 1000; using namespace std;  //交换数据 void Swap(int &a, int &b) {     int temp = a;     a = b;     b = temp; }  //冒泡排序 void BubbleSort(int *arr, int size) {     int i, j;     for(i=0;i<size-1;i++)         for(j=size-1;j>i;j--)             if(arr[j] < arr[j-1])                 Swap(arr[j], arr[j-1]); }  //选择排序 void SelectionSort(int *arr, int size) {     int i, j, min;     //找出从a[i]到a[size-1]的最小元素的位置     for(i=0;i<size-1;i++)     {         min = i;         for(j=i+1;j<size;j++)             if(arr[min] > arr[j])                 min = j;         //将a[i]与a[min]的数据交换         Swap(arr[i], arr[min]);     } }  //插入排序 void InsertSort(int *arr, int size) {     int fOut, loc, temp;     for(fOut=1;fOut<size;fOut++)         if(arr[fOut] < arr[fOut-1])         {             temp = arr[fOut];             loc = fOut;             do             {                 arr[loc] = arr[loc-1];                 loc--;             }while(loc>0 && arr[loc-1]>temp);             arr[loc] = temp;         } }  //快速排序 int Partition(int *arr, int first, int last) {     int i, small, x;     //为了减少最差情况的出现频率而作的一种优化     swap(arr[first], arr[ (first+last)/2 ]);     x = arr[first];     small = first;     for(i=first+1;i<=last;i++)         if(arr[i] < x)         {             small++;             swap(arr[small], arr[i]);         }         swap(arr[first], arr[small]);          return small; }  void RecQuick(int *arr, int first, int last) {     int pivotLoc;     if(first < last)     {         pivotLoc = Partition(arr, first, last);         RecQuick(arr, first, pivotLoc-1);         RecQuick(arr, pivotLoc+1, last);     } }  void QuickSort(int *arr, int size) {     RecQuick(arr, 0, size-1); }  //计数排序 void CountSort(int *arr, int size) {     int temp[MAX] = {0};     int i, j;     for(i=0;i<size;i++)         temp[arr[i]]++;     j = 0;     for(i=0;i<MAX;i++)     {         while(0 != temp[i])         {             arr[j] = i;             temp[i]--;             j++;         }     } }  //归并排序 void Merge(int *arr, int start, int mid, int end) {     int temp1[SIZE], temp2[SIZE];     int n1, n2;     int i, j, k;     n1 = mid - start + 1;     n2 = end - mid;     //拷贝前半部分数组     for(i=0;i<n1;i++)         temp1[i] = arr[start + i];     //拷贝后半部分数组     for(i=0;i<n2;i++)         temp2[i] = arr[mid + i + 1];     //把后面的元素设置的很大     temp1[n1] = temp2[n2] = INT_MAX;     i = j = 0;     // 逐个扫描两部分数组然后放到相应的位置去     for(k=start;k<=end;k++)     {         if(temp1[i] <= temp2[j])         {             arr[k] = temp1[i];             i++;         }         else         {             arr[k] = temp2[j];             j++;         }     } }  void RecMerge(int *arr, int start, int end) {     int i;     if(start < end)     {         i = (start + end) / 2;         RecMerge(arr, start, i);         RecMerge(arr, i+1, end);         Merge(arr, start, i, end);     } }  void MergeSort(int *arr, int size) {     RecMerge(arr, 0, size-1); }  //堆排序 void Heapify(int *arr, int low, int high) {     int large;     int temp = arr[low];     large = 2 * low + 1;     while(large <= high)     {         if(large<high && arr[large]<arr[large+1])             large = large + 1;         if(temp > arr[large])             break;         else         {             arr[low] = arr[large];             low = large;             large = 2 * low + 1;         }     }     arr[low] = temp; }  void BuildHeap(int *arr, int size) {     int i;     for(i=size/2-1;i>=0;i--)         Heapify(arr, i, size-1); }  void HeapSort(int *arr, int size) {     int i;        //lastOfOrder     BuildHeap(arr, size);     for(i=size-1;i>=0;i--)     {         swap(arr[0], arr[i]);         Heapify(arr, 0, i-1);     } }  //希尔排序 void ShellSort(int *arr, int size) {     int i, j, k, temp;     //i为增量     for(i=size/2;i>0;i/=2)     {         for(j=i;j<size;j+=i)         {             temp = arr[j];             k = j;             while(k-i>=0 && temp<arr[k-i])             {                 arr[k] = arr[k-i];                 k -= i;             }             arr[k] = temp;         }     } }  //输出数组里的数据 void Print(int *arr, int size) {     int i;     for(i=0;i<size;i++)     {         printf("%6d ", arr[i]);          if(0 == (i+1) % 10)             cout << endl;     }     cout << endl; }  //主函数 //先随机选择100个整型数据放入数组中，并输出 //然后将其从小到大排序，并输出 int main() {     int arr[SIZE], i;     cout << "The array is: " << endl;     srand((unsigned)time(0));     for(i=0;i<SIZE;i++)         arr[i] = rand() % MAX;     Print(arr, SIZE);      //请选择其中一个排序算法，以运行该程序     //BubbleSort(arr, SIZE);     //SelectionSort(arr, SIZE);     //CountSort(arr, SIZE);     //InsertSort(arr, SIZE);     //SelectionSort(arr, SIZE);     //QuickSort(arr, SIZE);     //MergeSort(arr, SIZE);     //HeapSort(arr, SIZE);     ShellSort(arr, SIZE);      cout << "After sorting, the array is:" << endl;     Print(arr, SIZE);     return 0; }  这是几种排序法    你可以借鉴一下好的，谢谢，我试试


Question: c语言题目

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

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

这种问题最好是自己去看教材，在这里问到答案了也没什么用


Question: 求解

int  fun(int n) {  	int i, j = 0, a[20], sum = 0; //前20个不能被2,3,5,7整除的数保存在a数组中，它们的和保存在sum中。 		/**********Program**********/  	for ( i = 1; i < 1000; i++) 	{ 		if (i % 2 != 0 && i % 3 != 0 && i % 5 != 0 && i % 7 != 0 ) 		{ 			a[j] = i; 			j++; 			sum += i; 		} 		if (j == n) 			break; 	}   	/**********  End  **********/ 	return sum;  }


Question: 做一个学生信息成绩管理系统，要求在内容里。

new B Plus

引用 2 楼 weixin_44723916 的回复:是个小作业冒犯您了吗 没，您走好~~

是个小作业冒犯您了吗

你这是老板给员工布置任务？

大部分的功能已经帮你弄好了，剩下的几个你自己完成吧，既然是课程设计，多少也要学点东西的，不能完全靠别人呀。 #include<stdio.h> #include<string.h> #include<stdlib.h> struct Student {     char name[20];     int num;     char sex;     int age;     char home[20];     char major[20];     char classroom[20];  };  Student stu[5] = {     { "王恒", 1801, 'F', 19, "河南省", "计算机与信息工程", "通信工程" },     { "张泰", 1802, 'F', 19, "河北省", "计算机与信息工程", "通信工程" },     { "李天", 1803, 'F', 18, "浙江省", "计算机与信息工程", "物联网工程" },     { "孙涵", 1804, 'M', 18, "广西省", "计算机与信息工程", "大数据工程" },     { "梦玲", 1805, 'M', 19, "上海省", " 艺术设计", "艺术设计" } };  int count = sizeof(stu) / 92; void  SaveInfo(); void Login() {     //系统登陆功能 自己去做吧 } void WriteInfo() {     //student的信息被赋值了，这边就不写了     printf("请输入姓名、学号、性别、年龄、籍贯、系别、专业");     int i_count = 0;     scanf("%s%d%c%d%s%s%s", stu[i_count].name, stu[i_count].num, stu[i_count].sex, stu[i_count].age,           stu[i_count].home, stu[i_count].major, stu[i_count].classroom);     i_count++; } void ChangeInfo() {     int i_num;     printf("请输入要修改的信息");     scanf("%d", &i_num);      for (int j = 0; j < count; j++)     {         if (stu[j].num == i_num)         {             stu[j] = stu[j + 1];         }     } } void DeleteInfo() {     int i_num;     printf("请输入要删除的学号");     scanf("%d", &i_num);      for (int j = 0; j < sizeof(stu) / sizeof(stu[0]); j++)     {         if (stu[j].num == i_num)         {             for (; j < sizeof(stu) / sizeof(stu[0]); j++)             {                 stu[j] = stu[j + 1];             }              count--;         }         else         {             continue;         }     }      SaveInfo(); } void DisplayInfo() {     if (count == 0)     {         printf("数据为空！");     }     else     {         for (int i = 0; i < count; i++)         {             printf("%s\t", stu[i].name);             printf("%d\t", stu[i].num);             printf("%c\t", stu[i].sex);             printf("%d\t", stu[i].age);             printf("%s\t", stu[i].home);             printf("%s\t", stu[i].major);             printf("%s\n", stu[i].classroom);         }     } } void SearchInfo() {     //通过学号查询学生信息     printf("请输入你要查询的学号：");     int i_num;     scanf("%d", &i_num);      for (int i = 0; i < count; i++)     {         if (i_num == stu[i].num)         {             printf("%s\t", stu[i].name);             printf("%d\t", stu[i].num);             printf("%c\t", stu[i].sex);             printf("%d\t", stu[i].age);             printf("%s\t", stu[i].home);             printf("%s\t", stu[i].major);             printf("%s\n", stu[i].classroom);         }         else         {             continue;         }     } } void ChangeCode() {     //系统密码修改功能   自己去做吧 } void SaveInfo() {     FILE *fp;      if ((fp = fopen("student.txt", "wb")) == NULL)     {         printf("不能打开该文件");     }      fprintf(fp, "\n姓名\t学号\t性别\t年龄\t籍贯\t系别\t专业\r\n");      for (int i = 0; i < count; i++)     {         fprintf(fp, "%s\t", stu[i].name);         fprintf(fp, "%d\t", stu[i].num);         fprintf(fp, "%c\t", stu[i].sex);         fprintf(fp, "%d\t", stu[i].age);         fprintf(fp, "%s\t", stu[i].home);         fprintf(fp, "%s\t", stu[i].major);         fprintf(fp, "%s\r\n", stu[i].classroom);         fprintf(fp, "\n");     }      fclose(fp);     printf("保存成功\n"); } void main() {     int i;      while (1)     {         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("请输入你的选择：");         scanf("%d", &i);          if (i > 8 || i <= 0)         {             printf("输入有误，请重新输入！\n");         }         else         {             switch (i)             {                 case 1:                     Login();                     break;                  case 2:                     WriteInfo();                     break;                  case 3:                     ChangeInfo();                     break;                  case 4:                     DeleteInfo();                     break;                  case 5:                     DisplayInfo();                     break;                  case 6:                     SearchInfo();                     break;                  case 7:                     ChangeCode();                     break;                  case 8:                     SaveInfo();                     break;                  default:                     break;             }         }     } }


Question: 求问大神为什么csv打开文件是乱码，急急急

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

看着里我的回复，字符集问题 https://bbs.csdn.net/topics/392690168


Question: 求C程序设计课设

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

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

信息都不给全？


Question: 求问输出二维数组到文件的问题

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

输入  file.out文件内容

你没有把数组输入到文件里

你输入了啥


Question: C语言  求指导

暴力遍历，记录符合条件的包厢和家庭人数的差值，最后输出差值小，且编号大的包厢，并且将此包厢值改为0


Question: 此程序每一行的意思详细一点

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

伸手党万岁~~~~~


Question: C #    求指导

C语言，C++，C++ Builder，C#


Question: 输出老是出错大神帮忙看下

注意中间是逗号','，你输入的是点？改成逗号试试； 注意输入的格式要和scanf中引号里的一致


Question: help

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


Question: C程序的函数类型

函数若果没有返回值类型，编译器默认是int类型。

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

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

B,不确定吧，返回了y得看函数怎么定义的，并不是问y是什么类型 你定义成 int fun(float x)返回就是int； 定义成float fun(float x)返回就是float


Question: <求助>大佬们，这题我是真的不知到怎么做。（瑟瑟发抖尔康手）

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

谢谢各位大佬，我再试试

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

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

浮点数取余数用 fmod 函数

略崩

自己捞一捞，新手


Question: c语言

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

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

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

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

C++ string.replace自己搜索下


Question: 求大佬

那就挂科重修吧


Question: Stack around the variable was corrupted

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

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

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


引用 1 楼 user-1的回复:fscnaf(fp,"%d,%s",studeng1_id[i],password1); zhanghao==studeng1_id[i] 好的，我去试一试。。。。。


Question: 求教！！！

简单点的办法sprintf输出到临时字符串，再sscanf格式化为你需要的格式读入


Question: strlen函数计算值不对

这有什么不理解的ch[40]没有初始化，里面的内容不定，你每次只改一个字符，有可能下个字符不是0就不是结束符，strlen是以'\0'结束的，所以你8,9,10,11长度都是11


Question: 求助C语言编程：编写函数对字符数组中的输入字母，按由大到小的字母顺序进行排序。

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

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

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

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

我试了，它最后输出的是“烫烫烫烫”四个字，

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


Question: c语言题目 Fat Mouse Trade

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

h=c[i];c[i]=c[j];c[j]=h;       	h=a[i];a[i]=a[j];a[j]=h;    	h=b[i];b[i]=b[j];b[j]=h; } h 是int ，你用来做 double数组元素交换的临时变量，会丢精度 最后结果不对


Question: c语言题目 集合元素

重复数字判断逻辑有点问题 for(s=0;s<h;s++) if(b[h]==b[s]) { h--; break; }


Question: 求助，如何用C语言如何在子函数中对主函数中的二维数组值进行修改

二维数组如果是全局变量，直接改就行了。如果不是，给子函数传递数组名，一样可以修改


Question: 关于未经处理的异常

好的好的，谢谢

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

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

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

引用 1 楼 636f6c696e的回复:time是字符串类型么？如果不是字符串类型请用memcpy 如果是字符串类型，说明有内存越界，建议贴出完整代码 这个代码有两千多行，不好贴


Question: 求C语言大佬教我怎么弄这种类型的题目

大佬又来出题了


Question: EOF要输入两次，字符统计错误

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


Question: 求教，如何用C语言分行读取CSV文件内容

libcsv

读取行fgets ,一次读取一行 字符串分割strtok 分割符自定义


Question: 怎么用C语言编程输出数组a中没有重复数字的前5个最大的整数。

用大根堆就可以，

降序排序，从第一个开始，只要与相邻的不相同就满足你说的条件，找5个最大的就行


Question: 求大神给小白解惑

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


Question: 关于枚举

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

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


Question: 想问一下这个程序有什么问题吗？

引用 1 楼 拥抱Linux 的回复:（1）你把加密、解密的函数本体的名字写反了。 （2）变量n对应的输入函数scanf会留下一个回车符在输入缓冲区，这个回车符被下面的SS的gets函数吸收了，所以看起来像是程序跳过了SS的gets函数。 （3）反正编译器遇到gets会提示这个函数比较危险，所以俺一般都不用，而是用scanf，需要输入包含空格的字符串时也有办法。 下面是调整之后的代码，供参考：  #include <stdio.h>  void jiami(char a[100],int n); void jiemi(char a[100], int n);  int main(void) { 	char sr[100], SS[100]; 	int n, m; 	printf("你想加密的内容：\n"); 	scanf("%[^\n]",sr); 	printf("约定的密钥："); 	scanf("%d", &n); 	jiami(sr, n);  	getchar(); // 吸收上一个scanf最后留在输入缓冲区的回车符  	printf("你想解密的内容：\n"); 	scanf("%[^\n]",SS); 	printf("约定的密钥："); 	scanf("%d", &m); 	jiemi(SS, m); }  void jiemi(char a[100], int n) { 	int i = 0, j = 0; 	char b[100]; 	while (a[i] != '\0') { 		b[j] = a[i] - n; 		i++; 		j++; 	} 	b[j] = '\0'; 	printf("解密后："); 	puts(b); 	printf("\n\n"); 	//return 0; }  void jiami(char a[100], int n) { 	int i = 0, j = 0; 	char b[100]; 	while (a[i] != '\0') { 		b[j] = a[i] + n; 		i++; 		j++; 	} 	b[j] = '\0'; 	printf("加密后："); 	puts(b); 	printf("\n\n"); 	//return 0; }  运行截图：  谢谢大佬！


Question: 6.7作业 用字符数组实现删除字符串中的所有空格

#include<stdio.h> #include<string.h>  void fun(char *a) {     int i=0, j=0;     for (i = 0; i < strlen(a); i++) {         if (a[i] != ' ')             a[j++] = a[i];     }     a[j] = 0; }  int main() {     char a[] = "D x s 独   家  放  送";     fun(a);     printf("finally：\n%s",a);     getchar();     return 0; } 可以把代码再精简一些

#include<stdio.h> #include<string.h> void fun(char *a) { 	int i=0, j=0; 	for (i = 0; i < strlen(a); i++) { 		if (a[i] != ' ') { 			a[j++] = a[i];                		} 		else if(a[i]==' '){ 			continue; 		} 	} 	a[j] = '\0';                          //在数组最后面加上字符串结束符'\0' } int main() { 	char a[] = "D x s 独   家  放  送"; 	fun(a); 	printf("finally：\n%s",a); 	getchar(); 	return 0; }

#include <stdio.h> #include <string.h>  char* DeleteBlank(char* src) { 	int i = 0, len = 0; 	do { 		if (src[i] != ' ') 			src[len++] = src[i]; 	} while (src[i++] != '\0'); 	return src; } int main(){ 	char s[128] = { 0 }; 	scanf("%[^\n]", s); 	printf("%s\n", DeleteBlank(s)); 	return 0; }


Question: 如何提取字符串中IP并换成整数或十六进制

TCHAR String[] = TEXT("+QIACT: 1,1,1,\"10.32.183.184\""); 	IN_ADDR IpAddr = { 0 }; 	_stscanf_s(String, TEXT("%*[^\"]\"%d.%d.%d.%d"), &IpAddr.S_un.S_un_b.s_b1, &IpAddr.S_un.S_un_b.s_b2, &IpAddr.S_un.S_un_b.s_b3, &IpAddr.S_un.S_un_b.s_b4);

主机IP地址可以用标准的点型字符串来表示，如“192.168.1.1”，也可以用一个四个字节的整数或IN_ADDR结构来表示。可以使用inet_addr()函数和inet_ntoa()函数来实现这两种格式的转换，也可以使用新版本的inet_ntop()函数和inet_pton()函数来进行转换。 请参考《VS2015中IP地址转换函数》  希望能够帮到你

正则没必要吧！双引号及小数点足够了

使用正则表达式进行匹配


Question: 向数组指针输入不确定长度的字符串

这个是运行结果：

对于字符串的存储需要注意后面需要手动在末尾加一个'\0'表示结束，所以长度加1

%s得遇到'\0'才能停，那未被分配的内存内是'\0'

长度应该+1，并在最后赋值'\0'，你这个printf %s能正常输出?

引用 2 楼 Italink 的回复:我觉得应该+1，strlen不考虑\0，这样的话使用strcpy（不安全）都直接访问到指针外的地址了  是的，我也找到了相关的资料：  感谢你的及时回复！


Question: 大佬看看哪儿错了

只要能顺利编译成exe就是没有错误的，如果说没达到你要的效果，那只能说设计有问题

你这个跟去看医生时直接跟医生说‘我哪儿有问题’一样啊？


Question: 新手急求！！C语言加减乘除混合运算的编程代码

非常非常非常感谢这个很详细很高级了，但是对于我来说可能有那么一点点超纲了拜托大神能不能精简一点，暂时只接触到的头文件是include<stdio.h>这样的，然后就只考虑整数的加减乘除就可以了

引用 3 楼 liups的回复: 电脑上看本论坛，右边都是这种帖子，其中也有提供完整程序的 自己完全是个渣渣我们暂时才学到最简单的那种，那里面的有很多都看不懂

电脑上看本论坛，右边都是这种帖子，其中也有提供完整程序的

引用 1 楼 liups的回复:本贴右边就有很多帖子，不知道看一下吗？ 刚刚下载这个软件，还不太了解，谢谢引导

本贴右边就有很多帖子，不知道看一下吗？

#pragma warning(disable:4996) /*--------------------------------------- 函数型计算器(VC++6.0,Win32 Console) 功能： 目前提供了10多个常用数学函数: ⑴正弦sin ⑵余弦cos ⑶正切tan ⑷开平方sqrt ⑸反正弦arcsin ⑹反余弦arccos ⑺反正切arctan ⑻常用对数lg ⑼自然对数ln ⑽ｅ指数exp ⑾乘幂函数^ ⑿向上取整ceil ⒀向下取整floor ⒁四舍五入取整round 用法： 如果要求2的32次幂，可以打入2^32<回车> 如果要求30度角的正切可键入tan(Pi/6)<回车> 注意不能打入：tan(30)<Enter> 如果要求1.23弧度的正弦，有几种方法都有效： sin(1.23)<Enter> sin 1.23 <Enter> sin1.23  <Enter> 如果验证正余弦的平方和公式,可打入sin(1.23)^2+cos(1.23)^2 <Enter>或sin1.23^2+cos1.23^2 <Enter> 此外两函数表达式连在一起,自动理解为相乘如：sin1.23cos0.77+cos1.23sin0.77就等价于sin(1.23)*cos(0.77)+cos(1.23)*sin(0.77) 当然你还可以依据三角变换，再用sin(1.23+0.77)也即sin2验证一下。 本计算器充分考虑了运算符的优先级因此诸如：2+3*4^2 实际上相当于：2+(3*(4*4)) 另外函数名前面如果是数字,那么自动认为二者相乘. 同理，如果某数的右侧是左括号，则自动认为该数与括弧项之间隐含一乘号。 如：3sin1.2^2+5cos2.1^2 相当于3*sin2(1.2)+5*cos2(2.1) 又如：4(3-2(sqrt5-1)+ln2)+lg5 相当于4*(3-2*(√5 -1)+loge(2))+log10(5) 此外，本计算器提供了圆周率Pi键入字母时不区分大小写,以方便使用。 16进制整数以0x或0X开头。 ----------------------------------------*/ #include <iostream> #include <iomanip> #include <cstdlib> #include <cstring> #include <cctype> #include <cmath> #include <stdio.h> #include <string.h> #include <windows.h> using namespace std; const char Tab = 0x9; const int  DIGIT = 1; const int MAXLEN = 16384; char s[MAXLEN], *endss; int pcs = 15; double round(double dVal, short iPlaces) {//iPlaces>=0 	char s[30]; 	double dRetval;  	sprintf(s, "%.*lf", iPlaces, dVal); 	sscanf(s, "%lf", &dRetval); 	return (dRetval); } double fun(double x, char op[], int *iop) { 	while (op[*iop - 1]<32) //本行使得函数嵌套调用时不必加括号,如 arc sin(sin(1.234)) 只需键入arc sin sin 1.234<Enter> 		switch (op[*iop - 1]) { 		case  7: x = sin(x);    (*iop)--; break; 		case  8: x = cos(x);    (*iop)--; break; 		case  9: x = tan(x);    (*iop)--; break; 		case 10: x = sqrt(x);   (*iop)--; break; 		case 11: x = asin(x);   (*iop)--; break; 		case 12: x = acos(x);   (*iop)--; break; 		case 13: x = atan(x);   (*iop)--; break; 		case 14: x = log10(x);  (*iop)--; break; 		case 15: x = log(x);    (*iop)--; break; 		case 16: x = exp(x);    (*iop)--; break; 		case 17: x = ceil(x);   (*iop)--; break; 		case 18: x = floor(x);  (*iop)--; break; 		case 19: x = round(x, 0); (*iop)--; break; 		} 	return x; } double calc(char *expr, char **addr) { 	static int deep; //递归深度 	static char *fname[] = { "sin","cos","tan","sqrt","arcsin","arccos","arctan","lg","ln","exp","ceil","floor","round",NULL }; 	double ST[10] = { 0.0 }; //数字栈 	char op[10] = { '+' }; //运算符栈 	char c, *rexp, *pp, *pf; 	int ist = 1, iop = 1, last, i, n; 	__int64 i64;  	if (!deep) { 		pp = pf = expr; 		do { 			c = *pp++; 			if (c != ' '&& c != Tab) 				*pf++ = c; 		} while	(c != '\0'); 	} 	pp = expr; 	if ((c = *pp) == '-' || c == '+') { 		op[0] =	c; 		pp++; 	} 	last = !DIGIT; 	while ((c =	*pp) !=	'\0') { 		if (c == '(') {//左圆括弧 			deep++; 			ST[ist++] =	calc(++pp, addr); 			deep--; 			ST[ist - 1]	= fun(ST[ist - 1], op, &iop); 			pp = *addr; 			last = DIGIT; 			if (*pp	== '(' || isalpha(*pp) && strnicmp(pp, "Pi", 2)) {//目的是：当右圆括弧的右恻为左圆括弧或函数名字时，默认其为乘法 				op[iop++] =	'*'; 				last = !DIGIT; 				c =	op[--iop]; 				goto operate; 			} 		} 		else if	(c == ')') {//右圆括弧 			pp++; 			break; 		} 		else if	(isalpha(c)) { 			if (!strnicmp(pp, "Pi", 2)) { 				if (last ==	DIGIT) { 					wcout <<	L"π左侧遇）" << endl; exit(1); 				} 				ST[ist++] =	3.14159265358979323846264338328; 				ST[ist - 1]	= fun(ST[ist - 1], op, &iop); 				pp += 2; 				last = DIGIT; 				if (!strnicmp(pp, "Pi", 2)) { 					wcout <<	L"两个π相连" << endl; exit(2); 				} 				if (*pp	== '(') { 					wcout <<	L"π右侧遇（" << endl; exit(3); 				} 			} 			else { 				for	(i = 0;	(pf	= fname[i])	!= NULL; i++) 					if (!strnicmp(pp, pf, strlen(pf))) break; 				if (pf != NULL)	{ 					op[iop++] =	07 + i; 					pp += strlen(pf); 				} 				else { 					wcout <<	L"陌生函数名" << endl; exit(4); 				} 			} 		} 		else if	(c == '+' || c == '-' || c == '*' || c == '/' || c == '%' || c == '^') { 			char cc; 			if (last !=	DIGIT) { 				wcout <<	L"运算符粘连" << endl; exit(5); 			} 			pp++; 			if (c == '+' || c == '-') { 				do { 					cc = op[--iop]; 					--ist; 					switch (cc)	{ 					case '+':  ST[ist - 1] += ST[ist]; break; 					case '-':  ST[ist - 1] -= ST[ist]; break; 					case '*':  ST[ist - 1] *= ST[ist]; break; 					case '/':  ST[ist - 1] /= ST[ist]; break; 					case '%':  ST[ist - 1] = fmod(ST[ist - 1], ST[ist]); break; 					case '^':  ST[ist - 1] = pow(ST[ist - 1], ST[ist]); break; 					} 				} while	(iop); 				op[iop++] =	c; 			} 			else if	(c == '*' || c == '/' || c == '%') { 			operate:		cc = op[iop	- 1]; 				if (cc == '+' || cc == '-') { 					op[iop++] =	c; 				} 				else { 					--ist; 					op[iop - 1]	= c; 					switch (cc)	{ 					case '*':  ST[ist - 1] *= ST[ist]; break; 					case '/':  ST[ist - 1] /= ST[ist]; break; 					case '%':  ST[ist - 1] = fmod(ST[ist - 1], ST[ist]); break; 					case '^':  ST[ist - 1] = pow(ST[ist - 1], ST[ist]); break; 					} 				} 			} 			else { 				cc = op[iop	- 1]; 				if (cc == '^') { 					wcout <<	L"乘幂符连用" << endl; exit(6); 				} 				op[iop++] =	c; 			} 			last = !DIGIT; 		} 		else { 			if (last ==	DIGIT) { 				wcout <<	L"两数字粘连" << endl; exit(7); 			} 			if (pp[0] == '0' && (pp[1] == 'x' || pp[1] == 'X')) { 				sscanf(pp +	2, "%I64x%n", &i64, &n); 				rexp = pp +	2 +	n; 				ST[ist++] =	(double)i64; 			} 			else ST[ist++] = strtod(pp,	&rexp); 			ST[ist - 1]	= fun(ST[ist - 1], op, &iop); 			if (pp == rexp)	{ 				wcout <<	L"非法字符" << endl; exit(8); 			} 			pp = rexp; 			last = DIGIT; 			if (*pp	== '(' || isalpha(*pp)) { 				op[iop++] =	'*'; 				last = !DIGIT; 				c =	op[--iop]; 				goto operate; 			} 		} 	} 	*addr =	pp; 	if (iop	>= ist)	{ 		wcout <<	L"表达式有误" << endl; exit(9); 	} 	while (iop)	{ 		--ist; 		switch (op[--iop]) { 		case '+':  ST[ist - 1] += ST[ist]; break; 		case '-':  ST[ist - 1] -= ST[ist]; break; 		case '*':  ST[ist - 1] *= ST[ist]; break; 		case '/':  ST[ist - 1] /= ST[ist]; break; 		case '%':  ST[ist - 1] = fmod(ST[ist - 1], ST[ist]); break; 		case '^':  ST[ist - 1] = pow(ST[ist - 1], ST[ist]); break; 		} 	} 	return ST[0]; } int main(int argc, char **argv) { 	int	a;  	wcout.imbue(locale("chs")); 	if (argc<2)	{ 		//if (GetConsoleOutputCP() != 936) system("chcp 936>NUL");//中文代码页 		wcout <<	L"计算函数表达式的值。" << endl << L"支持(),+,-,*,/,%,^,Pi,sin,cos,tan,sqrt,arcsin,arccos,arctan,lg,ln,exp,ceil,floor,round" << endl; 		while (1) { 			wcout <<	L"请输入表达式："; 			fgets(s,16384,stdin); 			if ('\n' == s[strlen(s)-1]) s[strlen(s) - 1] = 0; 			if (s[0] ==	0) break;// 			cout <<	s << "="; 			cout <<	setprecision(15) <<	calc(s,	&endss)	<< endl; 		} 	} 	else if	(argc == 2 && 0	== strcmp(argv[1], "/?")) { 		//if (GetConsoleOutputCP() != 936) system("chcp 936>NUL");//中文代码页 		wcout <<	L"计算由≥1个命令行参数给出的函数表达式的值。\n" 			"最后一个参数是.0～.15表示将计算结果保留小数0～15位\n" 			"最后一个参数是x表示将计算结果以16进制正整数格式输出\n" 			"支持(),+,-,*,/,%,^^,Pi,sin,cos,tan,sqrt,arcsin,arccos,arctan,lg,ln,exp,ceil,floor,round\n" 			"16进制整数以0x或0X开头\n"; 	} 	else { 		strncpy(s, argv[1],	MAXLEN - 1); s[MAXLEN -	1] = 0; 		if (argc>2)	{ 			for	(a = 2;	a<argc - 1;	a++) strncat(s,	argv[a], MAXLEN	- 1);//将空格间隔的各参数连接到s 			if (1 == sscanf(argv[a], ".%d", &pcs) && 0 <= pcs && pcs <= 15) {//最后一个参数是.0～.15表示将计算结果保留小数0～15位 				printf("%.*lf\n", pcs, calc(s, &endss)); 			} 			else if	(argv[a][0]	== 'x' || argv[a][0] == 'X') {//最后一个参数是x表示将计算结果以16进制正整数格式输出 				printf("0x%016I64x\n", (__int64)calc(s, &endss)); 			} 			else { 				strncat(s, argv[a],	MAXLEN - 1); 				printf("%.15lg\n", calc(s, &endss)); 			} 		} 		else { 			printf("%.15lg\n", calc(s, &endss)); 		} 	} 	return 0; }


Question: 求解c语言问题

填 	char *strcat (char *str1,char *str2); 对不对


Question: 优先级与结合性的困惑

楼上是正解。。

优先级和结合性 不影响求值顺序 优先级高 不等于先求值 右结合 不等于右边先求值

原 C/C++逻辑运算符 | | 和 && 的优先级误区——优先级决定运算顺序吗？ https://blog.csdn.net/qq_40946921/article/details/88323975

～ 语句或者表达式是有执行顺序的，凡事都要一步一步地来，哪能同一时刻把几个表达式都给执行了呢？ 转一篇文章给你，自己看看吧，看不懂也没关系，相信编译器的结果比相信自己的猜测更有合理性。 【C语言】优先级，结合方向和执行顺序 https://www.jianshu.com/p/47433961c3f0


Question: 求大神指导

（1）变量有一个属性叫【生命周期】，也就是变量 从 “因为被定义而产生” 到 “因为被释放而消失” 的生命期。 （2）你的两个代码里的变量 j 的生命周期是不一样的。 （2-1）上面的代码里变量 j 的生命周期是 整个 main 函数的范围，也就是说 main 函数没有结束的话，变量 j 就存在。 （2-2）下面的代码里的变量 j 的生命周期是 循环体 while(i <= 9){} 的范围之内，也就是说 只要程序运行出了 循环体 while(i <= 9){} 的右花括号， 变量 j 就从内存中被释放而消失了，所以 每一次新的 while(i <= 9){} 的循环，变量 j 都是一个全新的变量了，它的名字还是 j ，但是已经不是前一次循环剩下的 j 了。 （3）更深入和详细的内容，你可以上网搜索C语言的变量的名字空间、生命周期 / 生存期 等进行了解。

不懂说的啥


Question: c语言中指针函数程序

猜数字的A和B的含义，你可能理解反了A前面的数字指的是有几个数你猜对了，而且位置也对了，B前面的数字指的是有几个数你猜对了，但是位置是个错的。 #include<stdio.h> #include<time.h> #include<stdlib.h> int main() { 	int stime, a, z, t, i, c, m, g, s, k, l[3], j; 	time_t ltime = time(NULL); 	stime = (unsigned int)ltime / 2; 	srand(stime); 	if ((rand() % 10000) >= 1000 && (rand() % 10000) <= 9999) 		z = rand() % 1000; 	printf("机器入三位数***\n"); 	printf("\n"); 	for (c = 1; ; c++) 	{ 		printf("请输入你猜的三位数:"); 		scanf("%d", &g); 		a = z; 		j = 0; 		k = 0; 		l[0] = l[1] = l[2] = 0; 		for (i = 1; i<4; i++) 		{ 			s = g; 			m = 1; 			for (t = 1; t<4; t++) 			{ 				if (a % 10 == s % 10) 				{ 					if (m && t != l[0] && t != l[1] && t != l[2]) 					{ 						j++; 						m = 0; 						l[j - 1] = t; 					} 					if (i == t) 					{ 						k++; 					} 				} 				s /= 10; 			} 			a /= 10; 		}  		printf("你猜的结果是"); 		printf("%dA%dB\n", k, j-k); 		if (k == 3) 		{ 			printf("***你赢了***\n"); 			printf("\n~~******~~\n"); 			break; 		} 	} 	printf("你总共猜了%d次.\n", c); 	system("pause"); 	return 0; }

你可真是个小天才，猜三位数，却生成一个四位随机数，猜得到有鬼了

指针还是是指函数指针？没看出题目和函数指针的关系

引用 1 楼 user-2的回复:指针还是是指函数指针？没看出题目和函数指针的关系 可以帮我改正吗，谢谢！了

引用 2 楼 weixin_45185599的回复:[quote=引用 1 楼 user-2的回复:]指针还是是指函数指针？没看出题目和函数指针的关系 include<stdio.h> #include<time.h> #include<stdlib.h> int main(){ int stime,a,z,t,i,c,m,g,s,k,l[3]; ltime=time(NULL); stime=(unsigned int)ltime/2; srand(stime); if( (rand()%10000) >= 1000&&~d (rand()%10000) <= 9999 ) z=rand()%10000; printf("机器入三位数***\n"); printf("\n"); for(c=1; ; C++) { printf("请输入你猜的三位数:"); scanf("%d", &g); a=z; j=0; k=0; l[0]=[1]=l[2]=0; for(i=1; i<4; i++) { S=g; m=1; for(t=1; t<4; t++) { if(a%10 == s%10) { if(m && t!=l[0] && t!=l[1] && t!=l[2]) { j++; m=0; l[j-1]=t; } if(i==t) k++; } S/=10; } a/=10; }  printf("你猜的结果是");  printf("%dA%dB\n", j, k); if(k==3) {  printf("***你赢了***\n");  printf("\n~~******~~\n"); break; } } printf("你总共猜了%d次.\n",c); return 0; } 可[/quote] 可以帮帮我改正，谢谢了！

引用 1 楼 user-2的回复:指针还是是指函数指针？没看出题目和函数指针的关系 include<stdio.h> #include<time.h> #include<stdlib.h> int main(){ int stime,a,z,t,i,c,m,g,s,k,l[3]; ltime=time(NULL); stime=(unsigned int)ltime/2; srand(stime); if( (rand()%10000) >= 1000&&~d (rand()%10000) <= 9999 ) z=rand()%10000; printf("机器入三位数***\n"); printf("\n"); for(c=1; ; C++) { printf("请输入你猜的三位数:"); scanf("%d", &g); a=z; j=0; k=0; l[0]=[1]=l[2]=0; for(i=1; i<4; i++) { S=g; m=1; for(t=1; t<4; t++) { if(a%10 == s%10) { if(m && t!=l[0] && t!=l[1] && t!=l[2]) { j++; m=0; l[j-1]=t; } if(i==t) k++; } S/=10; } a/=10; }  printf("你猜的结果是");  printf("%dA%dB\n", j, k); if(k==3) {  printf("***你赢了***\n");  printf("\n~~******~~\n"); break; } } printf("你总共猜了%d次.\n",c); return 0; } 可


Question: C语言

应该是这样，思维导图还不熟，上面的错误示意图不好意思啊！

引用 6 楼 拥抱Linux 的回复: 不对，上面这幅图没画对，不好意思！ 应该是case 1，case 2，case 3都不进入的时候才去 default标签，刚刚画着急了。

为1就执行1后面的语句呀

引用 2 楼 袁君元的回复:说明k为2和3都执行n+=k这条语句 那case为1呢？怎么执行

感谢大佬的讲解，应该是答案有问题

引用 9 楼 小宝贝の☞任性☜ 的回复:但是这个题最后答案的值是6 运行出来是7。

引用 8 楼 拥抱Linux的回复:应该是这样，思维导图还不熟，上面的错误示意图不好意思啊！  但是这个题最后答案的值是6

说明k为2和3都执行n+=k这条语句

这说明：case 2和case 3执行相同的代码块。


Question: 求c语言大佬救救我

我觉得求值的可以改成这种统一的接口  int month = 0；  while（num） {     month += num%10;     num  = num/10; }    还有在打印和判断的时候应该取month - 1的值  引用 2 楼 我209426 的回复:#include <stdio.h> const char *Month[]={"January", "February", "March","April", "May", "June", "July", "August", "September", "October", "November","December"};  void CountNumber() { 	int num,first,second,thrid, month; 	scanf("请输入一个3位数: %d \r\n", num); 	while((num < 99)||(num >999)) 	{ 		scanf("请重新输入: %d \r\n", num); 	} 	first = num/100; 	second = (num-first*100)/10; 	thrid = num - first*100 -second*10;  	month = first + second + thrid;  	if (month >12) 	{ 		printf("*** \r\n"); 	} 	else 	{ 		printf("%s \r\n", Month[month]); 	} }

二楼高人！！我的构思比你的逊色，都不好意思贴出来了

引用 楼主 雾里窥探爱意的回复:第二题 跪求各位大佬帮帮忙哇 输入一个三位数，计算该数各位上的数字之和，如果在1到12内，则输出与和数对应的月份的英文名称，否则输出***


Question: 搞不明白 求给解决问题

#include <stdio.h> struct date {     int year;     int month;     int day; }  ; int main(void) {     struct  date d;     scanf("%d%d%d", &d.year, &d.month, &d.day);     printf("%d,%d,%d", d.year, d.month, d.day); }


Question: 求大佬给位运算的代码，刚学

引用 2 楼 user-3 的回复:[quote=引用 1 楼 我209426的回复:]unsigned short x; x=x&0x0F; printf("%02x", x); 不对呀，输入eea6答案是06 与题意不和呀[/quote] 感觉可能是抄我的另一个帖子的回复，可是我那回复确实是错了。3、4楼的才是正确的

引用 2 楼 user-3 的回复:[quote=引用 1 楼 我209426的回复:]unsigned short x; x=x&0x0F; printf("%02x", x); 不对呀，输入eea6答案是06 与题意不和呀[/quote]  x=x&0xFF

引用 1 楼 我209426的回复:unsigned short x; x=x&0x0F; printf("%02x", x); 不对呀，输入eea6答案是06 与题意不和呀


Question: 新手，还不太明白，求帮助

#include <stdio.h> struct student {     char name[20];     int  score; }; int main(void) {     struct student stu[10],temp;     int i,j;     for(i=0; i<10; i++)         scanf("%s%d",stu[i].name,&stu[i].score);     for(i=0; i<9; i++)         for(j=0; j<9-i; j++)             if(stu[j].score<stu[j+1].score)             {                 temp=stu[j];                 stu[j]=stu[j+1];                 stu[j+1]=temp;             }     for(i=0; i<10; i++)         printf("%s %d\n",stu[i].name,stu[i].score);     return 0; }


Question: 求c语言大神帮写一下程序 编写带有函数的程序，函数fun功能是将字符串拷贝到字符数组s1中。拷贝时，’\0’也拷贝过去。

百度strcpy实现源码


Question: 大一C语言题求大佬解答!!!

这图谁看啊，，，，脖子都断了


Question: 关于C语言scanf输入字符串

引用 1 楼 自信男孩的回复:如果输入5个0，并且数组的长度定为5，那么就会导致越界了，%s输出时是遇到'\0'停止。 数组长度是5，输入5个，就没有'\0'的位置了。 所以scanf_s("%s", x[i].xuehao, 5);是scanf的安全版本 那为什么会把空格后面的都读进去呢，按理说遇到空格不就结束了


Question: 已知int　a=5,b=5;　则表达式：　++a>b?a:b-->++a?++b:a的值为6

关于C,C++表达式求值顺序 http://blog.csdn.net/fefe82/article/details/37833767，http://bbs.csdn.net/topics/370153775

引用 7 楼 令空 的回复:结合性不应该从右到左吗，为什么先++a>b，而不是先后边结合性和求值顺序没有关系  ?: 要求从左向右求值

结合性不应该从右到左吗，为什么先++a>b，而不是先后边

如果你把最前面的++a > b改成++a < b的话就是7了

原来是这个啊,建议楼主有写空格的习惯  ++a > b ? a : b-- > ++a ? ++b : a   这样的话由于？：是从右往左结合的所以应该变成这样   ++a > b ? a :      b-- > ++a ? ++b : a  ++a > b取a的值，后面结合的就不取了，所以是6

++a得到是6,6>5为真，因此返回a，返回6

引用 楼主 令空 的回复:已知int　a=5,b=5;　则表达式：　++a>b?a:b-->++a?++b:a的值为6。为什么，怎么算，我得7错哪。我自己编看，确实得6，但是怎么算++a>b 求值结果是1 直接得到最终结果 a :后面全部不用执行

引用 1 楼 devilbuqi 的回复:我想知道-->是啥意思?      ++a>b?a:b; //     ++a?++b:a;//++a成功取++b的值  b-->++a ( b-- ) > ( ++a )


Question: C语言

敲一遍应该能看出来答案 调用f()函数时，把x的地址传给了*y，在函数里又给*y赋了值，所以函数结束时x的值会改变