关于循环语句while的问题

绯红女王 2013-04-12 09:01:13
#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;


}



问题:
第一次运行的时候,一切正常;
当选择继续学习的时候,编译器同时运行了“请选择”“是否继续学习”这两条语句,导致不能正常运行程序! 求解释,希望提供问题解决办法!谢谢!
...全文
88 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin5161678 2013-04-12
  • 打赏
  • 举报
回复
不用刷缓冲这么麻烦 这里不需要读取回车空格这样的数据 那么 这样改就够了

        printf("请选择:");
        scanf("%c",&k);
////////////////////////////////////////////////////
        printf("请选择:");
        scanf(" %c",&k);//注意在%前面加一个空格
starytx 2013-04-12
  • 打赏
  • 举报
回复
刷新一下输入缓冲
大极张三疯 2013-04-12
  • 打赏
  • 举报
回复
switch(){ default:...........break; 除了abc还处理其他情况 } printf("1:完成了 0:未完成.\n"); scanf("%d",&choice); printf("是否要继续学习?\n"); printf("1:完成了 0:未完成.\n"); scanf("%d",&i); 两个scanf若读取失败直接会导致下面的读取混乱,应该修改完整
阿麦 2013-04-12
  • 打赏
  • 举报
回复
感觉是缓冲问题。在获得输入后,把输入缓冲清一下。 实现:在 scanf()后面,fflush()一下。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧