小弟求助,解决C语言中一循环结构的问题
void del()
{
int i,s,n;
char num[10],name[10];
char choice;
if((fp=fopen("WorkerInput.txt","r+"))==NULL)//将文本中的数据读到缓冲区
{
printf("\n\t\t Read ERROR!\n");
exit(0);
}
for(i=0;i<10;i++)
{
fscanf(fp,"%s %s %c %d %s %s %s %s %s %s %s",person[i].num,person[i].name,&person[i].sex,
&person[i].age,person[i].job,person[i].post,person[i].politic,person[i].edu_level,
person[i].period,person[i].start_time,person[i].type);
}printf("请输入您要删除的方式:1.按编号删除,2.按姓名删除。\n");
while(1)
{
scanf("%d",&n);
if(n==1||n==2)
break;
else printf("\n输入有错,请重新输入:");
}
if(n==1) {
printf("请输入您要删除的编号:");
scanf("%s",num);
for(i=0;person[i].num!=0;i++)
{
if(strcmp(person[i].num,num)==0) {s=i;break;}
}
if(strcmp(person[i].num,num)!=0)
printf("您所要查询的%s的员工的相关信息未能查询到,请检查输入的编号是否正确?",num);
else printf("编号|姓名|性别|年龄|职务|职称|政治面貌|最高学历|任职时间|来院时间|人员类别\n%s %-6s %-6s %-6d %-6s %-6s %-6s %-6s %-6s %-6s %-6s\n",
person[i].num,person[i].name,&person[i].sex,person[i].age,person[i].job,person[i].post,person[i].politic,person[i].edu_level,
person[i].period,person[i].start_time,person[i].type);
fclose(fp);
printf("请问你是否要删除编号为%s的员工信息?确认请输入Y,取消删除请输入N\n",num);
while(1)
{
scanf("%c",&choice);
if(choice=='Y'||choice=='y'||choice=='N'||choice=='n')
break;
else printf("\n输入有错,请重新输入:");
}
if((fp=fopen("WorkerInput.txt","w"))==NULL){
printf("\n\t\t Read ERROR!\n");
exit(0);
}
if(choice=='y'||choice=='Y') {
for(i=0;i<s;i++) {
fprintf(fp,"%s %-6s %-6s %-6d %-6s %-6s %-6s %-6s %-6s %-6s %-6s\n",person[i].num,person[i].name,
&person[i].sex,person[i].age,person[i].job,person[i].post,person[i].politic,
person[i].edu_level,person[i].period,person[i].start_time,person[i].type);
}
fclose(fp);
if((fp=fopen("WorkerInput.txt","a+"))==NULL){
printf("\t\t\tRead ERROR!\n");
exit(0);
}
for(i=s+1;i<5;i++)
{
fprintf(fp,"%s %-6s %-6s %-6d %-6s %-6s %-6s %-6s %-6s %-6s %-6s\n",person[i].num,person[i].name,
&person[i].sex,person[i].age,person[i].job,person[i].post,person[i].politic,
person[i].edu_level,person[i].period,person[i].start_time,person[i].type);
}
fclose(fp); }
if(choice=='n'||choice=='N') {
for(i=0;i<5;i++)
fprintf(fp,"%s %-6s %-6s %-6d %-6s %-6s %-6s %-6s %-6s %-6s %-6s\n",person[i].num,person[i].name,
&person[i].sex,person[i].age,person[i].job,person[i].post,person[i].politic,
person[i].edu_level,person[i].period,person[i].start_time,person[i].type);
fclose(fp); }
}
if(n==2)
{
printf("请输入您要删除的姓名:");
scanf("%s",name);
for(i=0;person[i].name!=0;i++)
{
if(strcmp(person[i].name,name)==0) {s=i;break;}
}
if(strcmp(person[i].name,name)!=0)
printf("您所要查询的%s的员工的相关信息未能查询到,请检查输入的编号是否正确?",name);
else printf("编号|姓名|性别|年龄|职务|职称|政治面貌|最高学历|任职时间|来院时间|人员类别\n%s %-6s %-6s %-6d %-6s %-6s %-6s %-6s %-6s %-6s %-6s\n",
person[i].num,person[i].name,&person[i].sex,person[i].age,person[i].job,person[i].post,person[i].politic,person[i].edu_level,
person[i].period,person[i].start_time,person[i].type);
fclose(fp);
printf("请问你是否要删除编号为%s的员工信息?确认请输入Y,取消删除请输入N\n",name
while(1)
{
scanf("%c",&choice);
if(choice=='Y'||choice=='y'||choice=='N'||choice=='n')
break;
else printf("\n输入有错,请重新输入:");
} if((fp=fopen("WorkerInput.txt","w"))==NULL){
printf("\n\t\t Read ERROR!\n");
exit(0);
}
if(choice=='y'||choice=='Y')
{
for(i=0;i<s;i++) {
fprintf(fp,"%s %-6s %-6s %-6d %-6s %-6s %-6s %-6s %-6s %-6s %-6s\n",person[i].num,person[i].name,
&person[i].sex,person[i].age,person[i].job,person[i].post,person[i].politic,
person[i].edu_level,person[i].period,person[i].start_time,person[i].type);
}
fclose(fp);
if((fp=fopen("WorkerInput.txt","a+"))==NULL){
printf("\t\t\tRead ERROR!\n");
exit(0);
}
for(i=s+1;i<5;i++)
{
fprintf(fp,"%s %-6s %-6s %-6d %-6s %-6s %-6s %-6s %-6s %-6s %-6s\n",person[i].num,person[i].name,
&person[i].sex,person[i].age,person[i].job,person[i].post,person[i].politic,
person[i].edu_level,person[i].period,person[i].start_time,person[i].type);
}
fclose(fp); }
if(choice=='n'||choice=='N') {
for(i=0;i<5;i++)
fprintf(fp,"%s %-6s %-6s %-6d %-6s %-6s %-6s %-6s %-6s %-6s %-6s\n",person[i].num,person[i].name,
&person[i].sex,person[i].age,person[i].job,person[i].post,person[i].politic,
person[i].edu_level,person[i].period,person[i].start_time,person[i].type);
fclose(fp); }
}
}
这里面有段 : while(1)
{
scanf("%c",&choice);
if(choice=='Y'||choice=='y'||choice=='N'||choice=='n')
break;
else printf("\n输入有错,请重新输入:");
}
最后我调试的时候,第一次循环会绕过scanf的语句直接跳到了else语句,倘若我输入的不是Y N y n,则会执行两次输出语句才会执行scanf的语句,请问是怎么回事?
[解决办法]
读到了回车键。。。。不信可以打出来看看,不是10就是13
while(1)
{
scanf("%c",&choice);
printf("%d\n", choice);
if(choice=='Y'
[解决办法]
choice=='y'
[解决办法]
choice=='N'
[解决办法]
choice=='n')
break;
else printf("\n输入有错,请重新输入:");
}
------解决方案--------------------
在scanf函数后面加上getchar();试试