C - 如何读取输入

时间:2013-02-26 12:28:03

标签: c input while-loop scanf break

它是家庭作业的一部分,但它不是主要部分

我已经通过自己手动更改数据来完成主要功能,但我真的不知道如何正确读取用户输入。

以下是输入的内容:

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循环并说当输入[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)

1 个答案:

答案 0 :(得分:2)

抓住第一个数字应该是微不足道的,然后考虑到你想要读取空格的“数字串”,你可以简单地做一些事情,比如使用scanf()的否定扫描集:

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

或只是fgets()

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

然后正如你猜测的那样,在while循环中等待第一个数字为0。

> I believe I can use atoi to make it back to integers

如果它们都是单个数字(如您的示例所示),则只需从中减去'0'的值即可获得int