如何扫描一行n个整数?

时间:2014-04-07 09:49:49

标签: c

在c中,我可以使用scanf来读取由标准输入空格分隔的3个整数,如下所示:

#include <stdio.h>

int main() {
    int a, b, c;
    scanf("%d %d %d", &a, &b, &c);
}

如果我不知道前一行中有多少个整数怎么办?假设用户提供了整数:

#include <stdio.h>

int main() {
    int howManyIntegersToRead;
    scanf("%d", &howManyIntegersToRead);
    // Read in the integers with scanf( ... );
}

我需要malloc一个大小为sizeof(int) * howManyIntegersToRead字节的数组。如何将标准输入数据实际读入分配的内存?我无法使用howManyIntegersToRead%ds构建格式化字符串。嗯,我可以,但必须有一个更好的方法。

4 个答案:

答案 0 :(得分:6)

您可以尝试使用for循环:

int i, size;
int *p;
scanf("%d", &size);
p = malloc(size * sizeof(int));
for(i=0; i < size; i++)
    scanf("%d", &p[i]);

答案 1 :(得分:2)

#include <stdio.h>

int main() {
    int howManyIntegersToRead;
    scanf("%d", &howManyIntegersToRead);
    // Read in the integers with scanf( ... );
    // allocate memory
    int a[howManyIntegersToRead];  

     for(int i=0;i<howManyIntegersToRead;i++)
        scanf("%d",&a[i]);
}

答案 2 :(得分:1)

使用动态分配和循环。

#include <stdio.h>
#include <malloc.h>

int main()
{
    int count, i;
    int *ar;

    printf("Input count of integers: ");
    scanf("%d", &count);

    ar = malloc(count * sizeof(int));
    if (ar == NULL)
    {
        fprintf(stderr, "memory allocation failed.\n");
        return -1;
    }

    for (i = 0; i < count; i++)
    {
        scanf("%d", &ar[i]);
    }
}

答案 3 :(得分:1)

#include <stdio.h>
#include <stdlib.h>

int main(void) {

    int* integers, i = 0;
    do {

    integers = realloc(integers, sizeof(int) * (i + 1));
    if(integers == NULL){
        return -1;
    }
    printf("enter an integer: ");
    scanf(" %d", &integers[i]);
    printf("\nentered: %d\n", integers[i]);
} while(integers[i++] != 0);//here put your ending of choice


free(integers);
return 0;
}