C++ scanf没有';在eclipse中,是否不能在调试模式下获取输入?

C++ scanf没有';在eclipse中,是否不能在调试模式下获取输入?,c++,c,eclipse,C++,C,Eclipse,首先,还有一个问题的标题是相同的,但这里提供的解决方案并不适合我 但在调试模式下运行时,不会打印任何内容。当我将鼠标悬停在变量上时,它们有这些值 a:56 b:6422420 c:6422420 建议的另一个解决方案是将此代码放在main方法的开头 int ch; while ((ch = getchar()) != '\n' && ch != EOF); //suggested solution #1 这篇文章中提出的两种解决方案对我都不起作用。我两个都试过了

首先,还有一个问题的标题是相同的,但这里提供的解决方案并不适合我

但在调试模式下运行时,不会打印任何内容。当我将鼠标悬停在变量上时,它们有这些值

a:56

b:6422420

c:6422420

建议的另一个解决方案是将此代码放在main方法的开头

    int ch;
    while ((ch = getchar()) != '\n' && ch != EOF); //suggested solution #1
这篇文章中提出的两种解决方案对我都不起作用。我两个都试过了

编辑

操作系统:Windows 10


编译器:MinGW

我建议在
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
在使用之前,请仔细阅读(和每个库函数)的文档

顺便说一句,Eclipse只是一个或美化的编译器,您的编译器可以是或(并且您可能可以配置IDE以向编译器传递适当的选项)。而
scanf
本身是在您的(操作系统之上)中实现的

但是您确实需要在编译器中启用所有警告和调试信息(因此使用
gcc-Wall-Wextra-g
进行编译,如果使用),并学习如何使用(断点、逐步、变量查询、回溯…)


您可能想使用,并且应该在终端中编译和运行您的程序(而不是在Eclipse下,它隐藏了许多对您有用的东西)。

我建议您在
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
在使用之前,请仔细阅读(和每个库函数)的文档

顺便说一句,Eclipse只是一个或美化的编译器,您的编译器可以是或(并且您可能可以配置IDE以向编译器传递适当的选项)。而
scanf
本身是在您的(操作系统之上)中实现的

但是您确实需要在编译器中启用所有警告和调试信息(因此使用
gcc-Wall-Wextra-g
进行编译,如果使用),并学习如何使用(断点、逐步、变量查询、回溯…)


您可能想使用,并且应该在终端中编译和运行您的程序(而不是在Eclipse下,它隐藏了许多对您有用的东西)。

我尝试了您的代码。它跳转到
perror(“scanf故障”)零件,无需输入if条件。注:工作正常。这只在调试模式下发生。但是您是否仔细阅读了
scanf
的文档?顺便说一句,我稍微改进了我的代码。我尝试了你的代码。它跳转到
perror(“scanf故障”)零件,无需输入if条件。注:工作正常。这只在调试模式下发生。但是您是否仔细阅读了
scanf
的文档?顺便说一句,我稍微改进了我的代码。你使用什么编译器(Eclipse不是编译器)和什么操作系统?我建议在命令行上编译。Eclipse只是把东西隐藏在你身上。C和C++是不同的语言,在询问你的程序时,不要同时指定它们。什么编译器(伊柯丽斯不是编译器)和你正在使用的操作系统?我建议在命令行上编译。Eclipse只是把东西隐藏在你身上。C和C++是不同的语言,在询问程序时不要同时指定。
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