user-0 提问: 求助！！C语言仓库管理相关

回复:
user: user-1
content: void input() {     struct Info info;     FILE *fp1,*fp2;     char f,ch[10];     fp1=fopen("1.dat","rb");//已存在只读二进制文件     fp2=fopen("2.dat","wb+");// 新建文件，允许读写 ，储存更新后的货物信息     printf("请输入货物编号:");     //scanf("%s",&ch);     scanf("%s", ch);     while(!feof(fp1))//读完fp1中的进库货物     {         if(fread(&info,sizeof(info),1,fp1))//从fp1中可以读1个对象到info中         {             if(strcmp(ch,info.num)==0)//如果该货物已经存在             {                 printf1();                 printf2(info);//查看目前库存                 printf("请输入货物数量：");                 scanf("%d",&info.amount);                 printf("\n");                 fwrite(&info,sizeof(info),1,fp2);//更新库存信息                 while(!feof(fp1))                 {                     if(fread(&info,sizeof(info),1,fp1))                         fwrite(&info,sizeof(info),1,fp2);                 }                 break;             }         }         else//出现新商品种类         {             printf("请输入新的信息：\n");             printf("请输入货物名称：");             scanf("%s",&info.name);             printf("\n");             printf("请输入货物数量：");             scanf("%d",&info.amount);             printf("\n");             printf("请输入货物编号:");             scanf("%s",&info.num);             fwrite(&info,sizeof(info),1,fp2);//更新库存信息         }     }     fclose(fp1);     fclose(fp2);     remove("1.dat");     rename("2.dat","1.dat");     printf("按任意键返回菜单");     getchar();     system("cls");     menu(); } 楼主的input函数没看出有问题吗？  最外层是判断fp1,但是内层while还是判断fp1。另外判断fp1和while循环里的else 输入有啥关系吗？  建议楼主还是把逻辑搞清楚了。

user: user-0
content: void output()//出库函数 { 	struct Info info; 	FILE *fp1,*fp2; 	int a; 	char ch[20]; 	printf("请输入需要出库的编号"); 	scanf("%s",ch); 	while(!feof(fp1)) 	{ 		if(fread(&info,sizeof(info),1,fp1)) 			if(strcmp(ch,info.num)==0)//是否存在该商品  			{ 				printf1(); 				printf2(info); 				printf("请输入需要出库的数量"); 				scanf("%d",&a); 				if(a<=info.amount)//判断库存是否大于需求  				{ 					info.amount-=a; 				    fwrite(&info,sizeof(info),1,fp2); 					printf("出库成功!\n"); 					if(info.amount==0){ 						zero(ch); 					}//库存为零时删除该货物  				} 				else 				{ 					printf("货物不足！您的请求被拒绝\n"); 				} 				while(!feof(fp1)) 				{ 					if(fread(&info,sizeof(info),1,fp1)) 					fwrite(&info,sizeof(info),1,fp2); 					break; 				} 			} 			else 				fwrite(&info,sizeof(info),1,fp2); 	} 	fclose(fp1);fclose(fp2); 	remove("1.dat"); 	rename("2.dat","1.dat"); 	system("pause"); 	printf("按任意键返回菜单"); 	getchar(); 	system("cls"); 	menu(); } void zero(char ch[10])          //删除货物信息  { 	struct Info info; 	FILE *fp1,*fp2; 	while(!feof(fp1)) 		{ 			if(fread(&info,sizeof(info),1,fp1)) 			{ 	 				printf("删除成功！\n");										 			} 		} 		fclose(fp1); 		fclose(fp2); 		remove("1.dat");//删除  		rename("2.dat","1.dat");  	printf("按任意键返回菜单"); 	getchar(); 	system("cls"); 	menu(); }

user: user-0
content: void input() {     struct Info info;     FILE *fp1,*fp2; 	char f,ch[10];     fp1=fopen("1.dat","rb");//已存在只读二进制文件  	fp2=fopen("2.dat","wb+");// 新建文件，允许读写 ，储存更新后的货物信息      printf("请输入货物编号:"); 	scanf("%s",&ch);     while(!feof(fp1))//读完fp1中的进库货物  	{ 		if(fread(&info,sizeof(info),1,fp1))//从fp1中可以读1个对象到info中   		{ 			if(strcmp(ch,info.num)==0)//如果该货物已经存在  			{ 				printf1(); 			    printf2(info);//查看目前库存  				printf("请输入货物数量："); 				scanf("%d",&info.amount); 				printf("\n"); 				fwrite(&info,sizeof(info),1,fp2);//更新库存信息  				while(!feof(fp1)) 				{ 				    if(fread(&info,sizeof(info),1,fp1)) 					fwrite(&info,sizeof(info),1,fp2); 				} 				break; 			}  		} 		else//出现新商品种类  		{ 			printf("请输入新的信息：\n");             printf("请输入货物名称："); 			scanf("%s",&info.name); 			printf("\n"); 			printf("请输入货物数量："); 			scanf("%d",&info.amount); 			printf("\n"); 			printf("请输入货物编号:"); 			scanf("%s",&info.num); 			fwrite(&info,sizeof(info),1,fp2);//更新库存信息 		} 	} 	fclose(fp1); 	fclose(fp2); 	remove("1.dat");     rename("2.dat","1.dat"); 	printf("按任意键返回菜单"); 	getchar(); 	system("cls");     menu(); }