首先,还有另一个问题具有相同的标题,但那里提供的解决方案并不适用于我。 Other question
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, b, c;
fflush(stdout);//suggested solution in other question
scanf("%d%d%d", &a, &b, &c);
printf("Values entered: %d %d %d\n", a, b, c);
return 0;
}
当我正常运行时,代码工作正常。
输出
1 2 3
Values entered: 1 2 3
但是当我在调试模式下运行时,没有打印出来。当我将鼠标悬停在变量上时,它们具有这些值。
a:56
b:6422420
c:6422420
建议的另一个解决方案是将此代码放在main方法的开头。
int ch;
while ((ch = getchar()) != '\n' && ch != EOF); //suggested solution #1
这篇文章中提出的两个解决方案对我都没有用。我分别尝试了它们。
修改
操作系统:Windows 10
编译器:MinGW
答案 0 :(得分:0)
我建议您使用scanf
格式的空格,并测试其返回次数,以便:
a = b = c = 0; // better to clear variables, helpful for debugging at least
int cnt = 0;
if ((cnt=scanf(" %d %d %d", &a, &b, &c)) == 3) {
/// successful input
printf("Values entered: %d %d %d\n", a, b, c);
}
else {
/// failed input
printf("scanf failure cnt=%d error %s\n", cnt, strerror(errno));
}
fflush(NULL); // probably not needed, at least when stdout is a terminal
在使用之前,请仔细阅读 3> scanf(以及每个库函数)的文档。
顺便说一下,Eclipse只是IDE或荣耀source code editor,您的编译器可能是GCC或Clang(您可能可以配置IDE以将适当的选项传递给你的编译器)。scanf
本身已在C standard library中实施(在操作系统kernel之上)。
但是你真的需要启用所有警告&amp;在编译器中调试信息(如果使用GCC,则使用gcc -Wall -Wextra -g
进行编译)并学习如何使用debugger gdb
(断点,分步,变量查询,回溯...)< / p>
你可能想要使用fflush,你应该在终端中编译和运行你的程序(不是在Eclipse下面,这会隐藏很多有用的东西)。