我是一位刚接触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()如何从根本上工作的任何其他智慧表示赞赏。