【问题标题】:Trying to make scanf not go to a new line in a for loop (C Programming)试图使 scanf 不在 for 循环中换行(C 编程)
【发布时间】:2017-04-24 09:10:23
【问题描述】:

对不起,如果我的英语很差。我想要做的是让 scanf 在同一行输入。例如Enter value: 1 6 8 9 4 1 2 8 5 并用空格分隔。然后将数字存储在数组中。这是我的代码:

#include <stdio.h>

int main(void)
{
    int a[10], smallest, i;

    printf("Random\n");

    for (i = 0; i < 9; i++)
        scanf("%d", &a[i]);

    smallest = a[0];

    for (i = 0; i < 9; i++) 
    {
        if (a[i] < smallest)
        {
            smallest = a[i];
        }
    }
    printf("\nSmallest Element : %d\n", smallest);

}

感谢您的帮助!

编辑:我试图让用户输入 9 个数字,这些数字使用 scanf 存储在数组中,但是当输入数字时,scanf 会换行,例如:

&gt; 5

&gt; 6 等等我想要的是让他们在同一行输入数字,中间有一个空格,就像这样Enter value: 1 6 8 9 4 1 2 8 5

【问题讨论】:

  • 你遇到了什么问题?
  • for (i = 0; i &lt; 9; i++) --> for (i = 0; i &lt; 10; i++)
  • 你的问题需要解释什么
  • 用户将输入值并按 Enter 键终止输入。按 Enter 后,终端将向程序提供该行。程序现在处理该行,就像你正在做的那样(但可能使用" %d" 格式 - 注意%d之前有一个空格@
  • 您的程序将按照您想要的方式进行输入。如果你输入数字,空格分隔,它已经可以了。 %d 修饰符忽略 ' '(空格)和 '\n'(新行)

标签: c arrays


【解决方案1】:

Scanf 将等待一个完整的行。我建议您将输入作为字符串,然后使用strtok 提取值然后分配。

编辑:你可以这样使用scanf:

scanf( "%d %d ...", &a[0], &a[1]...); //as many values you're to assign

但是,我更喜欢我最初提出的方法。请记住,scanf 源自“扫描格式化”。您还必须处理 scanf 的结果,它返回成功填充的值的数量。

【讨论】:

  • 那么有没有办法例如将每个 scanf 移动到同一行?
【解决方案2】:

您可以scanf 一个语句中的所有数字:scanf("%d %d %d %d %d %d %d %d %d %d", &amp;a[0], &amp;a[1], &amp;a[2], &amp;a[3], &amp;a[4], &amp;a[5], &amp;a[6], &amp;a[7], &amp;a[8], &amp;a[9]); 这将让您扫描 10 个数字,它们之间有空格,而无需每次都按 Enter 键

请注意,我扫描了 10 个整数,因为您的数组可以存储 10 个整数,而您的循环仅扫描 9...(要修复它,请将 i 正如 Sourav Ghosh 建议的那样)

【讨论】:

  • 我试过这样做,但我没有得到 getchar() 位
  • @ReganKelly 这里有一个更好的解释:stackoverflow.com/a/13473734/3512538
  • 我看了看还是不明白。
  • @ReganKelly 没关系。我编辑了我的答案。忽略最后一部分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 2016-12-17
  • 1970-01-01
相关资源
最近更新 更多