首页 > 解决方案 > C语言,如何检查给定的输入是字符还是正整数

问题描述

我想知道如何在这种情况下继续从键盘输入:如果给定的输入是正数,它会继续使用代码如果给定的输入是负数或字母,它必须打印“插入正数"然后再次询问另一个输入,直到它有正确的输入。关于消极和积极的输入,我写的代码效果很好,但是当我写信时它会出错。我尝试的检查如下

chk=isalpha(n);
while(!chk || n<0)
{
    printf("Inserire un intero positivo \n");
    scanf("%d", &n);
    chk=isalpha(n);
}
printf("%d\n%d\n", t1, t2);

在这种情况下,如果我输入一个负数,它会正常工作,但如果我输入一个字母,printf 就会循环。我也尝试过while(isalpha(n) || n<0)还有一堆其他的代码,我会为你跳过。请帮我解决这个问题

标签: cwhile-loop

解决方案


您可以检查返回值scanf是否char返回 0,以及您需要清除缓冲区以停止scanf使用相同的字符。

例子:

int ret = 0;
do
{
     char c;
     while ((c = getchar()) != '\n' && c != EOF) { } /* to clear the bad characters*/

     printf("Inserire un intero positivo \n");
     ret = scanf("%d", &n);
}while(!ret || n<0);

推荐阅读