#include <stdio.h>
#include <math.h>
float grade, ttlgrade = 0;
int count = 0;
char opt;
void AverageGrade(float grade);
int main()
{
while(1)
{
printf("Do you want to enter another grade?(Y or N)\n");
scanf("%c", &opt);
if (opt == 121 || opt == 'Y')
{
break;
}
else if (opt == 'n' || opt == 'N')
{
printf("Program Ended.\n");
break;
}
else
{
printf("Invalid input! Please re-enter!\n");
continue;
}
}
return 0;
}
各位好!我是超级小白,遇到了问题想请求大佬帮助!这是我的代码的一部分,以提示用户选择是否要输入其他成绩。 我在第一次循环输入“ a”,如下面的截图所示,得到了正确的响应。
然后,代码应该引导用户在第二个循环中输入‘opt’ 的值; 但是,我的代码不允许我在第二个循环中输入‘opt’的值,直接跳到了第三个循环,我在下面附加了屏幕截图,
它打印了两次“ Invalid ... Do ...”。 在第三个循环中,倒允许我输入变量‘opt’的值了,我输入了’N‘。 它给了我算是正确的反馈。
有没有大神能指点下我为什么,哪些地方有问题啊,谢谢!拜谢!
在终端输入z(回车)后,scanf("%c",&ch)读取到两个字符,一个是你输出的‘N’,一个是回车符,需要修改成:
scanf("%c%*c",&ch);这样就可以了。如有帮助,请采纳一下,谢谢。
缓存导致的。scanf读取的是缓存区中的内容。
#include <stdio.h>
#include <math.h>
float grade, ttlgrade = 0;
int count = 0;
char opt;
void AverageGrade(float grade);
int main()
{
while(1)
{
printf("Do you want to enter another grade?(Y or N)\n");
scanf("%c", &opt);
if (opt == 121 || opt == 'Y')
{
break;
}
else if (opt == 'n' || opt == 'N')
{
printf("Program Ended.\n");
break;
}
else
{
printf("Invalid input! Please re-enter!\n");
continue;
}
fflush(stdin);//清除缓存
}
return 0;
}
scanf("%c", &opt);
前面加一行代码
fflush(stdio);
scanf("%c", &opt);
缓冲流里读入的是 a+换行
改成scanf(" %c",&opt);全面加个空格
或者 scanf后面加上getchar();
您的问题已经有小伙伴解答了,请点击【采纳】按钮,采纳帮您提供解决思路的答案,给回答的人一些鼓励哦~~
ps:开通问答VIP,享受5次/月 有问必答服务,了解详情↓↓↓
【电脑端】戳>>> https://vip.csdn.net/askvip?utm_source=1146287632
【APP 】 戳>>> https://mall.csdn.net/item/52471?utm_source=1146287632