我想输入未知长度的一组数字,传到数组里,遇到-1就停止,怎么定义数组并且保存数字?
遇到的问题是,在如下代码下运行,只能传入四个数字,再多就打印不出来了。哪里错了,要怎么写呢
#include<stdio.h>
int main()
{
int n=1,max;int a[n];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);//2 -1//a[0]=2,n=2,i=1
if(a[i]==-1)
{
n--;
break;
}
n++;
}
for(int i=0;i<n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
供参考:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n = 0, x, i, *a = NULL;
while (1) {
scanf("%d", &x);
if (x == -1) break;
a = (int *)realloc(a,sizeof(int)*(n + 1));
if (!a) return 1;
a[n++] = x;
}
for (i = 0;i < n;i++)
printf("%d ", a[i]);
free(a);
return 0;
}
#include <stdlib.h>
#include <stdio.h>
int main() {
int n = 0;
int *a = malloc(sizeof(int) * 1);
int capacity = 1;
while(1) {
int x;
scanf("%d", &x);
if(x == -1) break;
if(n == capacity) {
capacity *= 2;
a = realloc(a, capacity * sizeof(int));
}
a[n++] = x;
}
for(int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
free(a);
return 0;
}
从下图我们可以了解到,二维数组也是连续存放的,但为了有视觉体验,我们做题的时候还是行列分开进行分析,内存中的布局我们了解即可,平时使用就按照行和列分开进行。