我输入的每一行都以一个字母开头,然后根据字母我必须准确读取 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,与上面相同的问题)。
最佳答案
如我所见,您需要从 scanf()
格式字符串中删除 \n
,例如
scanf("%d", &args[0]);
只读取一个int
。
也就是说,在第二种情况下,你需要像这样修改
filled = scanf("%d %d %d", &args[0], &args[1], &args[2]);
然而,一个更优雅和稳健的解决方案是使用 fgets()
一次读取完整的一行,然后根据要求进行标记化。
关于c - 如何读取这种格式的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35316219/