如何在单行中获取空格分隔的整数值并将其存储在数组变量中:
input:
10 20 30
我如何将其存储在
中a[0],a[1],a[3]
我的代码
#include<stdio.h>
#include<conio.h>
int main()
{
int i = 0, j, arr[100], n, x;
while(i < 100 && scanf("%d", &arr[i]) == 1)
{
i++;
}
for(j = 0; j < i; j++)
{
printf("%d\n", arr[j]);
}
return 0;
}
答案 0 :(得分:1)
我认为您的问题是您的程序在输入之后不会继续执行,如:
val[2]
原因是程序卡在10 20 30
等待更多输入。
您可以通过以下输入进行程序:
scanf
但这可能不是你想要的。
相反,您可以使用10 20 30 x
读取整行并解析该行。
类似的东西:
fgets
答案 1 :(得分:1)
我检查了你的代码,阅读部分确实有效。但我认为,你的问题是退出阅读循环......
尝试使用较小的数组(假设大小为3)并相应地输入数字,你会看到;其他变体:保留你的大数组,输入三个数字然后输入xyz(你的scanf表达式无法评估它)。
问题是,如果按Enter键,scanf只会读取一个新行字符,它被视为任何其他空格,因此scanf需要进一步输入(再次尝试使用大小为3的数组并输入三个数字,每个数字都由按回车,你会看到。)
所以你必须明确地扫描新的行字符,但这很快就会变得难看。您最好一次读取一行,然后使用sscanf扫描输入缓冲区:
char buffer[256];
fgets(buffer, sizeof(buffer), stdin);
int i = 0, j, arr[100];
char* b = buffer;
int n = 0;
while(i < 100 && sscanf(b, "%d%n", &arr[i], &n) == 1)
{
b += n;
i++;
}
for(j = 0; j < i; j++)
{
printf("%d\n", arr[j]);
}
没有行缓冲区的变体可能如下所示:
int i = 0, j, arr[3];
while(i < 3 && scanf("%d", &arr[i]) == 1)
{
char c;
do
{
scanf("%c", &c);
}
while(isspace(c) && c != '\n');
++i;
if(c == '\n')
break;
ungetc(c, stdin);
}
for(j = 0; j < i; j++)
{
printf("%d\n", arr[j]);
}