2017-05-25 87 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'的文檔?順便說一句,我稍微改進了我的代碼。 –

相關問題