将用户输入传递到数组中

时间:2018-05-10 00:59:03

标签: c

如何收到用户输入(以逗号分隔的数字列表,例如3455,564,23435),并将其存储到数组中?

我提前知道我将从用户那里收到20个值。

我试过直接传递用户输入""到大小为20的数组,但我收到错误消息:format指定类型' int '但是论证有类型       ' int()[10]' [-Wformat]

我也看过使用strtok函数,虽然我不希望分隔符(')仍在数组中。

非常感谢任何想法,

谢谢。

1 个答案:

答案 0 :(得分:2)

您可以使用scanf()功能来实现此目的。

scanf函数的声明如下:

int scanf(const char *format, ...)

这意味着在使用scanf()功能时,您可以指定接收的输入格式。与printf()函数类似,scanf("%c",&character)例如可用于从用户获取字符输入。 scanf()函数返回成功读取的次数。

注意:您可以通过声明例如:{/ p>来检查scanf()函数是否成功读取了预期数据

if (scanf("%d",&intNum)==1){
    //all is ok, proceed
}
else{
    //EOF or conversion failure
}

同样,如果您要扫描多个变量,则可以使用if(scanf("%d %d",&intNum1,&intNum2)==2)。您可以使用以下任何一种(以及更多)来代替%c,以便读取和存储不同类型的输入。

其中一些:

c:字符
  d:十进制整数
  f:浮动   o:八进制整数
  s:字符串
  等...

此外;例如,如果使用scanf("%d %f",&integerNum,&floatNum);,则将以 int float(int SPACE float)格式读取用户输入,并将值分别存储到integerNum和floatNum变量中。 "%d %f"之间的空格字符是格式的一部分。

第二个参数(在我的例子中是&character)是要将值存储到的地址scanf()。有关scanf()scanf()的详细信息。您可以在循环中使用scanf()将用户输入存储到数组中。

以下是一份工作样本:

#include <stdio.h>

int main(){
    int array[20];
    int i;
    printf("Enter value to be stored in array> ");
    for (i=0;i<20;i++){
        //printf("Enter value to be stored in array[%d]> ",i);
        scanf("%d,",&(array[i]));
        //scanf("%d,",(array+i));
    }
    for (i=0;i<20;i++){
        if (i==19){
            printf("%d\n",array[i]);
            //printf("%d\n",*(array+i));
        }
        else{
            printf("%d, ",array[i]);
        }
    }
    return 0;
}

在这个例子中,我使用scanf("%d,",&(array[i]));,因为用户输入的格式如下: int,int,int,int,...(int COMMA int COMMA int COMMA .. 。)

注意array如何返回数组第一个元素的地址。 通过使用指针,您可以将scanf("%d,",&(array[i]));重写为scanf("%d,",(array+i));

您可以使用此代码存储其他类型的数据,例如float,只需进行少量更改。例如,为了使用它来从用户获取浮点输入;

  1. int array[20]替换为float array[20]
  2. scanf("%d,",&(array[i]));替换为scanf("%f,",&(array[i]));
  3. 在打印数组中的值时,也不要忘记使用正确的格式。