【问题标题】:How can I read a varying amount of integer input in C?如何在 C 中读取不同数量的整数输入?
【发布时间】:2015-11-08 23:40:59
【问题描述】:

我将获得三行输入。第一行将给我 2 个整数,第三行将给我 1 个整数。但是第二行可以给我从 1 到 100 之间的任意数量的整数。例如,输入可以是:

2 1
5 6 1 9 2
10

或者可能是:

10 4
5 6
9

对于固定数量的整数,我可以将第二行整数输入读入整数数组,但对于不同数量的整数,我不能这样做。我想,在这种情况下,我应该使用一个 while 循环,当scanf() 找到一个换行符时它会中断。我该如何编码?

【问题讨论】:

标签: c input


【解决方案1】:
  1. 使用 fgets()getline() 将行读入缓冲区 (@John Coleman)。

  2. 解析字符串以查找可能包含'\n' 的空格,如果找到则退出循环。然后拨打strtol()sscanf()读取1号。检查该函数的返回值是否有错误。

  3. 重复上述步骤。

【讨论】:

    【解决方案2】:

    我实际上是编程新手,对大部分功能一无所知。我知道的唯一字符串函数是strlen()strcmp()。而我的i\o函数知识仅限于printf()scanf()

    无论如何,我用这种方式解决了我的问题:

    int a[101];
    int i, num;
    char ch;
    
    for (i = 0; i < 101; i++)
        a[i] = 0;
    
    while (1)
    {
        scanf("%d%c", &num, &ch);
        i = num;
        a[i] = num;
        if (ch == '\n')
            break;
    }
    

    这行得通! num 的值必须等于 i 的值,因为我的程序需要它。

    【讨论】:

    • 注意:1) for (i = 0; i &lt; 101; i++) a[i] = 0; 写在a[] 之外,这是未定义的行为 2) scanf("%d%c", &amp;num, &amp;ch); 不检查scanf() 的结果,所以代码不检查知道numch 的值是有效的。
    • @chux 感谢您指出这些事情。我修复了你提到的第一件事。接下来,我没有检查numch 是否有效,因为这是竞争性编程问题,我们只得到整数输入。但是,您的洞察力将有助于解决现实生活中的问题。我很感激。
    • @chux 我按照你的建议修好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    相关资源
    最近更新 更多