scanf()从哪里读取输入,如果不是从键盘读取?

时间:2017-09-06 19:42:39

标签: c eclipse keyboard mingw scanf

我是一名新手程序员,他介绍了C,我遗漏了一些关于scanf()工作原理的基本信息。我想从键盘上读取一个int,代码如下:

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

int main(void) {
    int userBookSelection;
    scanf("%i", &userBookSelection);
    printf("Printing userBookSelection: %i", userBookSelection);

    return EXIT_SUCCESS;
}

当我运行代码时,控制台保持黑色,直到我停止调试。从来没有光标等待键盘输入。当我停止调试时,我可以在控制台中看到此输出,每次都相同:

打印userBookSelection:2130567168

我正在使用Windows上的MinGW GCC编译器在Eclipse中进行调试。代码语法似乎是正确的 - 我的构建路径中是否可能出现错误以实现此目的?我需要知道为什么scanf()没有读取键盘输入。

1 个答案:

答案 0 :(得分:0)

所以我从我的教授处获得了一行代码来处理这个错误 - 它是否是Eclipse和/或MinGW特有的必要解决方案我不确定。在任何情况下,这里都是带有附加行的代码:

int main(void) {
    int userBookSelection;
    setvbuf (stdout, NULL, _IONBF, 0);//<---The magic line

    scanf("%i", &userBookSelection);
    printf("Printing userBookSelection: %i", userBookSelection);

    return EXIT_SUCCESS;
}

我很欣赏任何有关正在发生的事情的更多智慧,setvbuf()正在做什么以及scanf()如何从根本上发挥作用。