【发布时间】:2015-12-10 23:52:14
【问题描述】:
我正在使用 switch 语句制作这个程序,该语句将根据用户是否输入数字 0 - 10 来分配字母等级。如果用户输入的数字不是 0-10,则程序会输出一条错误消息并显示用户重新输入。但是,如果用户输入一个字符,程序将在默认情况下循环。我希望它从默认情况下输出一次错误消息,如果他们输入一个字符,让他们重新输入。我不确定为什么在输入字符时它会循环默认大小写。
#include <stdio.h>
int main()
{
int grade;
int r;
while((r = scanf("%i", &grade)) != EOF)
{
switch(grade)
{
case 10:
case 9:
printf("Your grade is an A\n");
break;
case 8:
printf("Your grade is a B\n");
break;
case 7:
printf("Your grade is a C\n");
break;
case 6:
printf("Your grade is a D\n");
break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:
printf("Your grade is an F\n");
break;
default:
printf("Invalid score, please re-enter\n");
}
}
return 0;
}
【问题讨论】:
-
提示:如果您输入的内容无效,
scanf会返回什么? (您可以通过阅读文档找到这一点) -
您将
scanf的返回值保存到r中(这很好),但您只是在检查EOF。如果用户输入了无法转换为数字的内容,r将为零,否则为一。 -
测试应该是
== 1而不是!= EOF -
您可能应该使用
%d而不是%i。例如,%i会将010转换为8。 -
@M.M:我的错,对不起。
标签: c