输入未知大小数组应该如何设定循环条件

img


我用getchar不等于换行符来作为条件但是这样第一个数字就不知道去哪了,请问是什么原因?
还有请问这种要求的输入还有什么别的方法吗?(╥_╥)谢谢解答

可以用EOF来判断,自己测试的时候用ctrl+z结束输入
下面是一个示范:

#include<stdio.h>
int main() {
    int i = 0;
    int a[1001];
    while (scanf("%d", &a[i]) != EOF) {
        ++i;
    }
    for (int j = 0; j < i; ++j) {
        printf("%d ", a[j]);
    }
}

img

在这个程序中,数组 a 的大小是固定的,为 1000。因此,在循环中使用的 i 变量的有效范围是 0 到 999。若要让循环条件根据数组的大小动态调整,可以使用数组的 length 属性。例如,可以把上述代码改写为:

for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++) {
// 在这里处理数组元素
}

这样,就可以在程序运行时动态调整数组的大小,并且循环条件也会相应地调整。

但是,需要注意的是,使用 sizeof 运算符获取数组大小的方法仅适用于数组,对于指针,它只能返回指针类型的大小。因此,如果数组是用指针动态分配的,那么就不能使用这种方法。此时,可以使用另一种方法,即在分配数组时记录数组大小,然后使用一个变量来记录数组的大小。

int* a = new int[1000];
int n = 1000;
for(int i = 0; i < n; i++) {
// 在这里处理数组元素
}

这样,就可以根据需要动态调整数组的大小,并且循环条件也会相应地调整。