C – 如何读取输入

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

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

以下是输入的内容:

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)

抓住第一个数字应该是微不足道的,然后考虑到你想要读取空格的“数字串”,你可以简单地做一些像使用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