我是一位刚接触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()不能读取键盘输入。

最佳答案

因此,我从教授那里得到了一系列代码来解决此错误-我不确定它是否是特定于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()如何从根本上工作的任何其他智慧表示赞赏。

08-04 21:52