在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构建格式化字符串。嗯,我可以,但必须有一个更好的方法。
答案 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;
}