如何收到用户输入(以逗号分隔的数字列表,例如3455,564,23435),并将其存储到数组中?
我提前知道我将从用户那里收到20个值。
我试过直接传递用户输入""到大小为20的数组,但我收到错误消息:format指定类型' int '但是论证有类型 ' int()[10]' [-Wformat]
我也看过使用strtok函数,虽然我不希望分隔符(')仍在数组中。
非常感谢任何想法,
谢谢。答案 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
,只需进行少量更改。例如,为了使用它来从用户获取浮点输入;
int array[20]
替换为float array[20]
scanf("%d,",&(array[i]));
替换为scanf("%f,",&(array[i]));
在打印数组中的值时,也不要忘记使用正确的格式。