#include <stdio.h>
#include <stdlib.h>
const int n = 101;
int main() {
    int arr[n];
    int i,cnt = 0;
    while(i != 0){
        scanf("%d",&i);
        arr[cnt++] = i;
	  // 把每次输入的数字存给数组中,用次数来代表元素位置
    }
    for (int i = cnt - 2 ; i >= 0; i--) {
	  // 这里对cnt-2的解释可以看我文字的解释
        printf("%d ", arr[i]);
    }
    return 0;
}

假设你输入了1,2,3,4,5,0六个数字,对while循环中的cnt而言,可以理解为开始cnt是由1-->6了(while循环中),然后输入的每一个i(元素)在数组中被存入从0开始的位置上,所以cnt-1代表每一个元素在数组的下标,而cnt-2(for循环中)代表除去最后一位输入的数字,之前的每一位数字所对应的下标。这样在for循环中i从cnt-2的位置开始遍历,每一次i--,最后就可以逆序输出除了最后一位数字(如果i最后输入0)的其余每一个数字。