2011-10-31 108 views
1

我正在cygwin環境中使用flex和bison生成一個簡單的編譯器,生成C代碼作爲輸出,並且生成了一串代碼,用於讀取兩個整數,後面跟着一個char。使用C讀取輸入使用C

雖然我以爲我知道基本的C代碼,但我在下面的代碼中遇到了一個問題,我輸入了兩個整數,但它在讀取整數之後從不要求字符!

這樣處理生成代碼的最好方法是什麼?我應該在執行掃描還是getchar()之前總是清除字符緩衝區,或者我只是在某處犯了一個錯誤!

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char **argv) { 

    int a = 0; 
    int b = 0; 
    char f = '\0'; 

    scanf("%d",&a); 

    scanf("%d",&b); 

    f = getchar(); 
    fflush(stdin); 

    return EXIT_SUCCESS; 

} 
+1

沒有編譯這個,我猜想鍵盤上_enter_的最後按下被'getchar()'消耗掉了。 – stacker

回答

0

如果你想在新的一行讀取輸入的每個部分,更改scanf格式字符串,使其消耗'\n',因爲此刻f = '\n'。即。使用"%d\n"而不是"%d"

然後你就可以打印值,以確保(printf("a: %d, b: %d, f: %c\n", a, b, f);

$ ./test 
2 
4 
b 
a: 2, b: 4, f: b 

另一種方法是也更換兩個scanf報表及getchar用單scanf聲明:scanf("%d\n%d\n%c", &a, &b, &f);

+0

非常感謝! – CDrnly

0

您不使用輸入緩衝區中留下的換行符。這些變化有以下幾種:

scanf("%d\n",&a); 

scanf("%d\n",&b); 

f = getchar(); 
+0

對不起,其他人先回答。 – CDrnly