【发布时间】:2016-02-10 13:09:56
【问题描述】:
我输入的每一行都以一个字母开头,然后根据字母,我必须准确读取 1 个数字,或者 0 到 3 之间的任意数量的数字。这是我尝试这样做的方法:
#include <stdio.h>
int main()
{
int args[3] = { 0, 0, 0 };
char cmd;
int filled;
for(;;)
{
scanf("%c", &cmd);
switch(cmd)
{
case 'a':
scanf("%d\n", args);
break;
case 'b':
filled = scanf("%d %d %d\n", args, args+1, args+2);
printf("Read %d\n", filled);
break;
}
printf("Args is: %d %d %d\n", args[0], args[1], args[2]);
}
return 0;
}
a 的问题是,在我写完a 1 之后,由于某种原因,它又等待了 1 个字符,例如a 1 2 输出“Args is: 1 0 0”,它这样做了两次。我完全不知道这里发生了什么。
b 选项也不起作用,我的程序正在等待正好 4 个数字(4,而不是 3,与上述相同的问题)。
【问题讨论】:
-
如果您的输入格式是面向行的,通常最好读取整行(使用
fgets()),然后在内存中解析一次。由于FILE *流的状态,这消除了隐藏的复杂性。