C++ 用户为整数变量输入非整数值
C++ User enters a non-integer value for integer variable
我正在开发向用户显示选项列表的程序,然后他将输入一个整数来指定他要选择的选项。现在我已经抢占了用户可能输入除有效值之外的整数值的情况。但是,如果他输入任何其他值,例如字符或字符串,程序将进入无限循环,无限打印选项列表。我该如何纠正这种情况?我的意思是,当预定义的整数变量输入一个不是整数的值时,我应该能够给我的用户一个错误。
任何帮助表示赞赏。下面是一个示例代码。
do{
printf("Select appropriate option.n");
printf("Press 1 to do this");
printf("Press 2 to do that.n");
printf("Press 3 to exit the program.n");
scanf("%d",&choice);
if(choice!=1 && choice!=2 && choice!=3)
printf("You entered an invalid choice. Please enter again.n");
switch(choice){
case 1:
//do this
break
case 2:
//do that
break;
case 3:
exit(1);
}}
while(choice!=3);
所以基本上当用户输入非整数值时choice
我希望程序通知用户并要求他输入另一个。
它不能通过直接scanf
到整数变量来完成。这样的scanf
不仅接受1.23
,还会接受1abcde
和其他输入。 scanf
(和其他转换函数)根据请求的格式尽可能多地读取。当它发现不满足格式要求的内容时,它会停止,并且只是保持原样。
如果要执行此类分析,则必须将输入读取为字符串,然后手动解析和分析该字符串。
C 风格的代码草图(因为你坚持使用 C 风格的代码,尽管它被标记为 [C++])可能如下所示
char buffer[100]; /* 100 should be enough for everyone :) */
int n = scanf("%s", buffer);
if (n < 1)
/* ERROR, can't read */;
char *end;
long choice = strtol(buffer, &end, 10);
if (end == buffer || *end != ' ' || errno == ERANGE)
/* ERROR, bad format */;
/* ... */
scanf
在转换%d
时不会消耗任何非数字。 它将返回0
,因为它没有转换任何内容,并且"错误输入"仍将在那里等待被消耗。 您必须以某种方式使用它才能为有效输入做好准备。
(另请注意,在switch
中测试之前,您在if
中排除了 3 个)
- 使用 iostream - 请参阅 http://www.cplusplus.com/reference/iostream/
- 话虽如此,如果您坚持使用
scanf
- 检查返回值 - 即读取 http://linux.die.net/man/3/scanf
>isdigit
将检查任何数字(数字)类型的输入。为此,包括标头 ctype.h。
如果输入不正确,还可以使用 exit(0)
终止程序。为此,包括标头 stdlib.h。
#include<ctype.h>
#include<stdlib.h>
char c;
scanf("%c", &c);
if (isdigit(c))
{
case statement...
...
...
}
else
{
printf("Wrong input");
exit(0);
}
相关文章:
- 正在验证c++中用户的整数输入
- 如何用字符终止整数输入循环?
- 以C++为单位将已知数量的整数输入正确读取到向量中
- C++ - 重复 std::getline() 作为用户整数输入?
- C++程序,将整数输入转换为字符的问题
- 将整数输入数组的方法比 scanf() 或 cin 更快?
- 程序终止,而不是继续整数输入验证循环
- 如何在C 中输入未知数的整数输入
- 在C 中遇到了如何从用户输入直到输入的整数输入
- C++ 通过 range for 循环将整数输入到矢量中;随机 0
- 如何在 C++ 中包含整数输入的前面的 0
- 仅接受整数输入
- 拒绝用户整数输入 c++ 中的某个值
- 我想通过scanf将字符和整数输入到结构中
- 此代码段如何验证整数输入
- 验证整数输入C++?
- 循环直到整数输入在所需范围内无法处理非数字字符输入
- 整数输入 拒绝非整数输入并在C++中请求另一个输入
- 如何保存用户的整数输入,并返回字符串值?
- 除 "6" 作为最右边数字的整数输入外,任何整数输入都可以使用,但任何数字(如 ...6.导致分段错误,为什么?