从C中的stdin读取数字



我有一个函数可以从C中的stdin中获取一个数字。

int io_get_num(const char *q, const size_t min, const size_t max, int * num)
{ /* Get a number from the command line */
    int ret = 0;
    do {
        printf(q);
        ret = scanf(" %d", num);
        if (ret == EOF)
            return EOF;
        else if (ret == 0)
            printf("Please provide a valid number ..n%s", q);
        else if (*num > max || *num < min)
            printf("Number must be smaller than %u and larger than %un%s", (unsigned int)max+1, (unsigned int)min-1, q);
        else
            break;
        /* Flushing stdin */
        int ch;
        while ( (ch = fgetc(stdin)) != EOF && ch != 'n' );
    } while (1);
    return ret;
}

它在第一次循环运行中运行良好,之后(我注意到在使用gdb时)循环运行了两次,只是它不等待我的输入或检查任何条件(这可能与刷新流有关)。。

我该怎么办?

由于某种原因,每次迭代打印q两次:一次在开始时,然后在错误消息后再次打印。这可能会产生一种错觉,即每个输入循环迭代两次,而实际上并没有发生这种情况。在我的实验中,我无法重现这种双重迭代。

此外,scanf(" %d", num)%d之前的空间是冗余的。这不是一个错误,它将使scanf跳过任何前导空格,但%d本身已经在内部跳过了前导空格。

相关内容

  • 没有找到相关文章

最新更新