2011-10-31 117 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