读书人

关于循环语句while的有关问题

发布时间: 2013-04-20 19:43:01 作者: rapoo

关于循环语句while的问题

#include<stdio.h>

int main()
{
char a,b,c,k;
int choice,i=1;
char ch[]={"你所得积分:"};

FILE *fb;
int x;
if((fb=fopen("D:\\积分文本.txt","a+"))==NULL)
{
printf("cannot open file\n");

}
printf("============2013 上半学期 自主学习系统=================\n");

printf("============ 积分细则 ==============\n");


printf("a-------------------背诵英语单词50个(5分)\t 如果超额完成任务,加10分\n");
printf("b-------------------学习C语言一小时(3分)\n");
printf("c-------------------上机实验一小时(3分)\n");

while(i==1)
{
printf("请选择:");
scanf("%c",&k);

switch(k)
{
case 'a':
printf("请完成任务...");
x=5;
break;
case 'b':
printf("请完成任务...");
x=3;
break;

case 'c':
printf("请完成任务...");
x=3;
break;
}

printf("你完成任务了吗?");
scanf("%d",&choice);



if(choice==1)
{
fprintf(fb,"%s",ch);
fprintf(fb,"%4d",x);
fprintf(fb,"\n");

}
else
printf("请完成任务!!\n");

printf("是否要继续学习?\n");
scanf("%d",&i);
}

printf("学习结束!\n");
fclose(fb);

return 0;


}



问题:
第一次运行的时候,一切正常;
当选择继续学习的时候,编译器同时运行了“请选择”“是否继续学习”这两条语句,导致不能正常运行程序! 求解释,希望提供问题解决办法!谢谢! C
[解决办法]
感觉是缓冲问题。在获得输入后,把输入缓冲清一下。
实现:在 scanf()后面,fflush()一下。
[解决办法]
switch(){

default:...........break; 除了abc还处理其他情况
}

printf("1:完成了 0:未完成.\n");
scanf("%d",&choice);

printf("是否要继续学习?\n");
printf("1:完成了 0:未完成.\n");
scanf("%d",&i);

两个scanf若读取失败直接会导致下面的读取混乱,应该修改完整
[解决办法]
刷新一下输入缓冲
[解决办法]
不用刷缓冲这么麻烦
这里不需要读取回车空格这样的数据
那么 这样改就够了

printf("请选择:");
scanf("%c",&k);
////////////////////////////////////////////////////
printf("请选择:");
scanf(" %c",&k);//注意在%前面加一个空格

读书人网 >C语言

热点推荐