我正在cygwin环境中开发一个简单的编译器,使用flex和bison生成C代码作为输出,我已经生成了一系列代码,用于读取两个整数,后跟一个char。
虽然我以为我知道基本的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;
}
答案 0 :(得分:0)
您没有消耗输入缓冲区中剩余的换行符。更改如下:
scanf("%d\n",&a);
scanf("%d\n",&b);
f = getchar();
答案 1 :(得分: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);
。