在Eclipse中,scanf不会在调试模式下输入?

时间:2017-05-25 11:41:28

标签: c++ c eclipse

首先,还有另一个问题具有相同的标题,但那里提供的解决方案并不适用于我。 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

1 个答案:

答案 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

在使用之前,请仔细阅读 scanf(以及每个库函数)的文档。

顺便说一下,Eclipse只是IDE或荣耀source code editor,您的编译器可能是GCCClang(您可能可以配置IDE以将适当的选项传递给你的编译器)。 scanf本身已在C standard library中实施(在操作系统kernel之上)。

但是你真的需要启用所有警告&amp;在编译器中调试信息(如果使用GCC,则使用gcc -Wall -Wextra -g进行编译)并学习如何使用debugger gdb(断点,分步,变量查询,回溯...)< / p>

你可能想要使用fflush,你应该在终端中编译和运行你的程序(不是在Eclipse下面,这会隐藏很多有用的东西)。