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

标签 c input scanf

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

相关文章:

c - 制作arduino备用功能

关于 IEC 60559 附录的说明

c - Makefile 未定义引用

ios - 如何使用 Storyboard或 xibs 在 Swift 中使用 iOS 自定义键盘扩展作为可编程自定义输入 View

c++ - while 循环不提示用户输入 (c++)

c - 在C中从文件到文件的读取和写入

c - 从外部函数中释放指针

javascript - 按住 'ctrl+enter' 会为按键事件提供与直接 'enter' 不同的键码 - 但仅限于 Windows

c - 为什么此 scanf 语句会导致段错误?

c - fscanf 循环无法正常工作