繁体   English   中英

检查用户输入是否是 C 中的 integer

[英]check whether user input is an integer in C

我在之前的讨论中读到

#include <stdio.h>

int main ()
{
    int num;

    printf("\nPlease enter an integer:\n");
    scanf("%d",&num);

//   Let us check whether the user input is in integer        //

    while ((num = getchar()) != '\n' && num != EOF)
    {
         printf("\n\nError in input\n");
         printf("Please enter valid integer\n");
         scanf("%d",&num);
    } 

}

将检查输入是否为 integer。 该代码有效。 但我不明白什么

while ((num = getchar()) != '\n' && num != EOF)

是在做。 任何人都可以帮忙吗?

scanf("%d",&num); 将解析标准输入缓冲区中存在的stdin如果确实可解析,则不可解析的字符将保留在缓冲区中。

此代码中的技巧是在scanf之后检查缓冲区中存在的字符是否为换行符( \n ),如果是,则该值已正确解析,在这种情况下,请求新输入的循环将不会执行,如果没有,未解析的字符仍将在缓冲区中,将由getchar读取,这将验证它确实不是\n ,并且将执行循环。

这样做的问题是,如果您输入诸如"aadd"之类的内容,则循环将执行 4 次,即输入缓冲区中剩余的字符数。

尽管它或多或少有效,但它不是最好的方法,如评论中所述,最好使用fgets之类的内容从缓冲区中读取该行,例如使用sscanfstrtol对其进行解析,如果失败,请询问新的输入。

while ((num = getchar()) != '\n' && num != EOF)

只是一种不必要的混淆写作方式:

num = getchar();
while((num != '\n') && (num != EOF)) // inner parenthesis not necessary, just for readability
{
  ...
  num = getchar();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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