关于循环语句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);//注意在%前面加一个空格