如何在C语言中读取以空格分隔的n个数字
我想在执行过程中从用户那里读取如何在C语言中读取以空格分隔的n个数字,c,arrays,input,scanf,C,Arrays,Input,Scanf,我想在执行过程中从用户那里读取n整数,数字之间用空格分隔。最好将其作为阵列接收。对于输入12234453,结果是,array[0]=1,array[1]=22,依此类推。我必须用C写,不能用 scanf("%d %d %d", &var1, &var2, &var3); 因为,我不知道会插入多少这样的数字。在读取此数据之前,将从用户处读取n的值。使用,然后使用 将数字作为字符串 这里有一种方法 #include <stdio.h> #include <
n
整数,数字之间用空格分隔。最好将其作为阵列接收。对于输入12234453
,结果是,array[0]=1
,array[1]=22
,依此类推。我必须用C写,不能用
scanf("%d %d %d", &var1, &var2, &var3);
因为,我不知道会插入多少这样的数字。在读取此数据之前,将从用户处读取n
的值。使用,然后使用
将数字作为字符串
这里有一种方法
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char numbers[100];
int myn[100];
printf("Give me numbers..\n");
fgets(numbers,100,stdin);
const char s[2] = " ";
char *token;
token = strtok(numbers, s);
int i=0;
myn[i]=atoi(token);
while( token != NULL )
{
i++;
printf( " %s\n", token );
token = strtok(NULL, s);
myn[i]=atoi(token);
}
printf("You gave me: ");
for (int j=0; j<i; j++){
printf ("%d, ", myn[j]);
}
return(0);
}
#包括
#包括
#包括
int main()
{
字符数[100];
int myn[100];
printf(“给我数字…\n”);
FGET(数字,100,标准输入);
常量字符s[2]=“”;
字符*令牌;
令牌=strtok(数字,s);
int i=0;
myn[i]=atoi(令牌);
while(令牌!=NULL)
{
i++;
printf(“%s\n”,标记);
令牌=strtok(空,s);
myn[i]=atoi(令牌);
}
printf(“你给了我:”);
对于(int j=0;jenum{MAX_NUMBERS=1000000};//选择适当的上限
int n;
如果(scanf(“%d”,&n)==1&&n>0&&n
您可以使用scanf()
读取多个数字,如图所示,使用循环。您不知道这些数字是否全部显示在一行中,或者每个数字都在自己的行中,或者连续数字之间是否有许多空行(或者所有这些可能性的任何排列)
scanf()
函数系列基本上不关心换行符-很难强制它们这样做。当您关心基于行的输入时,使用或POSIX函数读取行,或使用其他字符串解析函数处理行
我假设支持带有VLA(可变长度阵列)的C99。没有这种支持,原理是一样的-机制有点不同(并且有多种选项可供选择).你听说过循环吗?我不认为循环可以用来读取同一行上用空格分隔的数字。循环运行时每个值需要不同的语句,对吗?如果我错了,请更正。如果你不知道循环中可以使用多少元素,可以使用固定长度的a类数组int arr[MAX_ELEMS]
存储这些值,或realloc
,或链接列表…有几种方法。@NirmalScaria您可以,但我们需要使用类似atoi
或strtol
的方法将这些字符串转换为int
,不是吗?是的;在使用strtok
将字符串拆分为单个值后,您将使用such一个将单个值字符串转换为int
s的函数。不需要使用strtok()
;使用strtol()
更好。它告诉您每个转换的数字的结尾在哪里;它还进行范围检查等。
enum { MAX_NUMBERS = 1000000 }; // Choose appropriate upper bound
int n;
if (scanf("%d", &n) == 1 && n > 0 && n < MAX_NUMBERS)
{
int array[n];
for (int i = 0; i < n; i++)
{
if (scanf("%d", &array[i]) != 1)
…process error — terminate loop?…
}
…use array…
}