【问题标题】:C - How to read inputsC - 如何读取输入
【发布时间】:2013-02-11 21:43:42
【问题描述】:

这是作业的一部分,但不是主要部分

我已经通过自己手动更改数据制作了main函数,但我真的不知道如何正确读取用户输入。

下面是输入的样子:

3

1 2 9

6

1 1 3 4 4 6

0

所以基本上第一个输入是下一个输入的 # 的大小。所以对于 3,数组大小为 3,其中元素为 [1,2,9],对于 6,数组大小为 6,元素为 [1,1,3,4,4,6]

当输入为0时,程序终止。

我认为通过使用 while 循环并说当 input[0] = '0' 并中断时,我可以终止程序,但我不知道如何将其他输入放入 char 数组中。

如您所见,有空格,因此 scanf 会将每个整数以不同的方式读取到 char 数组中。

在我得到 char 的输入后,我相信我可以使用 atoi 将其恢复为整数...

所以,请帮助我如何编写代码以正确获取用户输入...

也许这太模糊了:这是我想要的版本:

while(1)
{
    scanf("%d", &ui);

    if(ui == 0)
    {
        break;
    }
    else
    {   
        size = ui;
        int temp[size];

        for(c = 0; c < size; c++)
        {
            scanf("%d", &input);
            temp[c] = input;
        }
    }
}

第一个数组的输出很好,但之后由于 temp[size],它输出了一些奇怪的东西。有任何解决这个问题的方法吗?我希望数组的大小是用户想要的大小。 (例如,对于我上面写的输入:3 和 6)

【问题讨论】:

  • 你已经标记了scanf,那有什么问题呢?请向我们展示您的代码
  • 您可以使用 scanf() 直接读取整数值。使用"%d" 转换说明符。

标签: c input while-loop scanf break


【解决方案1】:

获取第一个数字应该是微不足道的,然后对于“数字字符串”考虑到您想要读取空格,您可以简单地执行类似使用scanf() 的否定扫描集的操作:

char input[100];
scanf("%99[^\n]", input);

或者只是fgets()

char input[100];
fgets(input, sizeof input, stdin);

然后,正如您猜想的那样,将其放入 while 循环中,等待第一个数字为 0。

&gt; I believe I can use atoi to make it back to integers

如果它们都是单个数字(如您的示例),您可以简单地从它们中减去 '0' 的值以获得 int

【讨论】:

    猜你喜欢
    • 2022-01-01
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多