如何获取空间单独的数组值并将其存储在数组中?示例:输入格式10 20 30输出:a [0] = 10 a [2] = 20 a [3] = 30

时间:2017-03-21 10:09:18

标签: c

如何在单行中获取空格分隔的整数值并将其存储在数组变量中:

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;
}

2 个答案:

答案 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]);
}