繁体   English   中英

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 != '\0' || errno == ERANGE)
  /* ERROR, bad format */;

/* ... */

转换%d时, scanf不会消耗任何非数字。 由于未进行任何转换,它将返回0 ,并且“错误输入”仍将在那里等待使用。 您必须以某种方式使用它才能准备好有效输入。

(还请注意, ifswitch进行测试,则排除if 3)

  1. 使用iostream-请参阅http://www.cplusplus.com/reference/iostream/
  2. 话虽如此,如果您坚持使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM