【发布时间】:2014-03-13 13:52:10
【问题描述】:
我有一个只能用 C 语言制作的项目(我不允许使用 C++)。 现在我正在处理 UI(控制台中显示了一个小菜单,每个选项都有一个从 0 到 6 的数字,用户输入数字,按 Enter 等等)。
我的阅读选项功能有问题。
一开始我试过
int option;
scanf("%d", &option);
但是当我输入字符时这会导致问题。
我尝试读取一个字符:
char option;
scanf("%s", &option);
option -= '0';
这让我可以把它当作一个数字来对待,并且在第一次测试中效果很好,让我可以验证选项是否有效(它不是字母,它是 0 到 6 之间的数字)。
问题是我可以输入多个字符,并且所有字符都将存储在内存中的某个位置。这显然很糟糕。
我尝试使用"%c" 阅读,但这会显示我输入的字符串中每个字符的错误消息。
为了更清楚一点,这就是函数
int readOption(int maxOp)
{
char option = -1;
while(option < 0 || option > maxOp)
{
scanf("%c", &option);
option -= '0';
if(option < 0 || option > maxOp)
printf("Invalid option!\nTry again: \n");
}
return option;
}
如果我输入“abc”,错误信息将被打印 3 次。
那么如何确保忽略输入的任何额外字符?
【问题讨论】: