user-0 提问: 百思不得其解

回复:
user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。 看不太懂，先研究研究

user: user-0
content: 引用 5 楼 xia597289162 的回复:1、代码实现将数据存在一个文件中，下次运行的时候自动调用 写文件很简单， fopen， fwrite， fread。每次启动程序你先读文件，读取预设的值。  2、每个选项运行完了多一个返回主菜单的选项 返回很简单。goto一下，或者printf("f)Quit\n"); scanf("%c",&g); 在scanf前加个 while（1） 好久没上，先研究研究

user: user-1
content: 1、代码实现将数据存在一个文件中，下次运行的时候自动调用 写文件很简单， fopen， fwrite， fread。每次启动程序你先读文件，读取预设的值。  2、每个选项运行完了多一个返回主菜单的选项 返回很简单。goto一下，或者printf("f)Quit\n"); scanf("%c",&g); 在scanf前加个 while（1）

user: user-2
content: printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方，而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。  在每个最后不带\n的printf后面加fflush(stdout); 在每个不想受接收缓冲区旧内容影响的scanf前面加rewind(stdin); 另外请检查scanf的返回值。

user: user-0
content: 引用 2 楼 xia597289162 的回复:void assign(struct plane *p) { int number,i; printf("Pleasr input the number of the seat you want to assign"); scanf("%d",&number); if(p[i].whether==1)   i=？？？？？？？？？？？？？？？？？？？？？ 都没初始化，怎么if 厉害，解决了！ 还有两个问题能帮忙解决一下么？ 还有一个问题，怎么让这个代码实现将数据存在一个文件中，下次运行的时候自动调用？ 怎么写让每个选项运行完了多一个返回主菜单的选项？

user: user-1
content: void assign(struct plane *p) { int number,i; printf("Pleasr input the number of the seat you want to assign"); scanf("%d",&number); if(p[i].whether==1)   i=？？？？？？？？？？？？？？？？？？？？？ 都没初始化，怎么if

user: user-0
content: 发现代码有点乱 试试 #include <stdio.h>   struct plane{ 	int number; 	int whether; 	char firstname[20]; 	char lastname[20]; };  struct plane seat[12];  /*void read(struct plane *p,char* filename) { 	file *pseat; 	if((pseat=fopen(filename,"rb"))==NULL) 		printf("Cant open %s file.\n",filename); 	else 	{ 		rewind(pseat); 		while(fread(p,sizeof (struct plane),12,pseat)==1) 			continue; 		fclose(pseat); 		printf("success"); 	} }*/  void init_plane_array(void) { 	for(int i= 0;i<12;i++) 	{ 		seat[i].number = i; 		seat[i].whether = 0; /*		seat[i].firstname="Allen"; 		seat[i].lastname="Iverson";*/ 	}  }  void num_emp_sea(struct plane *p) { 	int i,n; 	for(i=0,n=0;i<12;i++) 	{ 		if (p[i].whether==0) 			n++;	 	} 	printf("The number of empty seats are %d\n",n); }  void list_emp_sea(struct plane *p) { 	int i; 	for(i=0;i<12;i++) 	{ 		if (p[i].whether==0) 			printf("Seat NO.%d is empty.\n",i+1); 	} }  void list_sea(struct plane *p) { 	int i; 	for(i=0;i<12;i++) 	{ 		printf("Seat No.%d is ",i+1); 		if (p->whether==0) 			printf("empty\n"); 		else 			printf("full"); 	} }  void assign(struct plane *p) { 	int number,i; 	printf("Pleasr input the number of the seat you want to assign"); 	scanf("%d",&number); 	if(p[i].whether==1) 		printf("This seat is assigned"); 	else 	{ 		printf("Please input your first name\n"); 		scanf("%c",&p[i].firstname); 		printf("Please input your last name\n"); 		scanf("%c",&p[i].firstname); 		printf("Success"); 	} }  void delet(struct plane *p) { 	int number,i,a; 	char last[20],first[20]; 	printf("Please input the number of the seat you want to delete"); 	scanf("%d",&number); 	if(p[i].whether==0) 		printf("The seat is empty"); 	else 	{ 		printf("Please input your first name\n"); 		scanf("%c",&p[i].firstname); 		printf("Please input your last name\n"); 		scanf("%c",&p[i].firstname); 		for(a=0;a<20;a++); 		do 		{ 			p[i].whether=0; 			printf("Success"); 		} 		while (last[a]!=p[i].lastname[a]||first[a]!=p[i].firstname[a]); 		 	} }    int main() { 	char a,b,c,d,e,f,g;  	init_plane_array();  	printf("To choose a function, enter its letter label:\n"); 	printf("a)Show number of empty seats\n"); 	printf("b)Show list of empty seats\n"); 	printf("c)Show alphabetical list of seats\n"); 	printf("d)Assign a customer to a seat assignment\n"); 	printf("e)Delete a seat assignment\n"); 	printf("f)Quit\n"); 	scanf("%c",&g); 	switch(g) 	{ 	case 'a':num_emp_sea(seat);break; 	case 'b':list_emp_sea(seat);break; 	case 'c':list_sea(seat);break; 	case 'd':assign(seat);break; 	case 'e':delet(seat);break; 	case 'f':printf("7");break; 	}; 	return(0); }