我想在执行期间从用户读取n
个整数,并且数字用空格分隔。最好是作为阵列接收。对于输入1 22 3 445 3
,结果为array[0]=1
,array[1]=22
,依此类推。我必须在C中完成。不能使用
scanf("%d %d %d", &var1, &var2, &var3);
因为,我不知道会插入多少这样的数字。在读取此数据之前,将从用户读取n
的值。
答案 0 :(得分:2)
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…
}
如图所示,您可以使用循环使用scanf()
读取多个数字。你不知道它们是全部出现在一条线上,还是每条线都是自己的线,或者连续数字之间是否有很多空白线(或所有这些可能性的任何排列)。
scanf()
系列函数基本上不关心换行符 - 很难强迫它们这样做。如果您关心基于行的输入,请使用fgets()
或POSIX函数getline()
来读取一行和sscanf()
- 或其他字符串解析函数 - 来处理该行。
我假设支持带有VLA(可变长度数组)的C99。没有这种支持的原则是相同的 - 机制有点不同(并且有多种选择可以做到这一点)。
答案 1 :(得分:1)
将数字作为字符串。
这是一种方法。
#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);
}
上述C程序完全符合您的要求。在for循环中,它会在屏幕上显示您从键盘输入的数字。 &#34;问题&#34;在数字之间使用输入而不是空格会更容易。
单击链接,查看有关所用功能的非常有用的详细信息。