2017-05-25 108 views
0

首先,还有一个问题是同一个标题,但提供的解决方案并不适合我。 Other questionscanf不在eclipse中的调试模式下输入?

#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 

但是,当我在调试模式下运行没有打印。当我将鼠标悬停在变量上时,它们具有这些值。

一个:56

B:6422420

C:6422420

另一种解决方案建议是把这个代码在主方法的开始。

int ch; 
    while ((ch = getchar()) != '\n' && ch != EOF); //suggested solution #1 

这篇文章中提出的两种解决方案都不适合我。我分别尝试了他们。

编辑

操作系统:Windows 10

编译:MinGW的

+0

什么编译器(Eclipse是*不是*编译器)以及您正在使用什么操作系统? –

+0

我建议在命令行上编译。 Eclipse只是向你隐瞒事情。 –

+0

C和C++是不同的语言,在询问您的程序时不会同时指定。 –

回答

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(和每个库函数)的文档是先用它吧。

BTW,Eclipse是只是一个IDE或荣耀source code editor,你的编译器可能是GCCClang(你也许可以配置IDE通过相应的选项,你的编译器)。而scanf本身是在您的C standard library(在您的操作系统kernel之上)实施的。

但你真的需要启用的编译器中的所有警告&调试信息(与gcc -Wall -Wextra -g所以如果编译使用GCC),并学习如何使用您的debugger gdb(断点,分步实施,变量查询,回溯...)

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

+0

我试过你的代码。 它跳到'perror(“scanf失败”);'部分没有进入if条件。 注意:作品正常发现。这只发生在调试模式下。 – Enzio

+0

但您是否仔细阅读过'scanf'的文档?顺便说一句,我稍微改进了我的代码。 –

相关问题