使用C读取输入

时间:2011-10-31 12:06:53

标签: c

我正在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;

}

2 个答案:

答案 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语句和scanfscanf("%d\n%d\n%c", &a, &b, &f);