c - 阅读直到我设法输入一个整数

标签 c integer scanf

我是 C 语言的新手,我以前使用 Python,我想看看我读到的东西是否是整数。如果没有,请阅读直到我设法输入一个数字。

我做了一些研究,发现函数 scanf 实际上在读取正确完成时返回 1,否则返回 0。 所以,我写了这段代码,我不明白为什么这是一个无限循环,在控制台上写“Give an integer”

#include <stdio.h>

int main() {
    int a;
    int b = 1;
    do {
        printf("Give an integer\n");
        b = scanf("%d", &a);
    } while (b == 0);
}

最佳答案

scanf() 的问题在于,当遇到大多数说明符(如 "%d")的第一个空格时,它会停止读取,因此它会留在输入中这就是为什么如果你不丢弃这样的空白,再次阅读会导致问题,因为它会在你下次调用它时立即返回。当您按 EnterReturn 时,会引入一个强制性空格,'\n' 换行符(或换行).

如果你想读取一个整数并确保你做到了,你可以这样尝试

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int
main(void)
{
    long int value; // You can adapt this to use `int'
                    // but be careful with overflow
    char line[100];
    while (fgets(line, sizeof(line), stdin) != NULL) {
        char *endptr;
        value = strtol(line, &endptr, 10);
        if ((isspace(*endptr) != 0) && (endptr != line))
            break;
    }
    fprintf(stdout, "%ld\n", value);
    return 0;
}

阅读strtol()理解这段代码的手册

您可以按照评论中的建议,从输入中删除空白字符,但恕我直言,这更难,您仍然会遇到 scanf() 的其他问题,例如处理空输入不是直截了当的。

关于c - 阅读直到我设法输入一个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42517844/

相关文章:

java - LuaJava编译错误 "Unresolved external symbol"

c++ - 将数字求和到 N 的最快算法

Java:用整数替换字符串

c - 如何将 scanf 的输入限制为整数和 float (一般为数字)

c - 当用户输入 char 而不是预期的 int 时提示错误

c - 如何在 C 中打印字符串数组的特定部分?

c++ - 一个C/C++程序怎么叫没完没了?

c - 如何将指针指向数组的内容赋值?

c++ - 在 C++ 中将字符串乘以 int

C,我打印出随机数(不是地址)而不是扫描的数字