[英]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 != '\0' || errno == ERANGE)
/* ERROR, bad format */;
/* ... */
转换%d
时, scanf
不会消耗任何非数字。 由于未进行任何转换,它将返回0
,并且“错误输入”仍将在那里等待使用。 您必须以某种方式使用它才能准备好有效输入。
(还请注意, if
在switch
进行测试,则排除if
3)
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.