gpt4 book ai didi

c - 如何读取这种格式的数据?

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:24 25 4
gpt4 key购买 nike

我输入的每一行都以一个字母开头,然后根据字母我必须准确读取 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com