佬们,为什么输出的最后会有一个“0”呀

P5737 【深基7.例3】闰年展示

XTTian @ 2023-10-31 17:44:46

#include<iostream>
using namespace std;
int main()
{
    int x = 0, y = 0, sum = 0, i = 0, j = 0;
    int arr[10000]{};
    cin >> x >> y;
    for (; x <= y; x++)
    {
        if (((x % 100 != 0) && (x % 4 == 0)) || (x % 400 == 0))
        {
            arr[i] = { x };
            sum++;
            i++;
        }
    }
    cout << sum << endl;
    j = i;
    for (i = 0; i <= j; i++)
    {
        cout << arr[i] << " ";
    }
    return 0;
}

by fzy1026 @ 2023-10-31 17:49:16

if (((x % 100 != 0) && (x % 4 == 0)) || (x % 400 == 0))
{
    arr[i] = { x };
    sum++;
    i++;
}

这里

因为在记录操作后才进行i++,那么i的值一定是记录总数+1

所以最后一段输出时会输出一个空值(0)


by OIerWu_829 @ 2023-10-31 17:49:21

第 19 行,

改成 for (int i = 0; i < j; i++) 就行了。

因为数组下标是从 0 开始的。


by OIerWu_829 @ 2023-10-31 17:51:35

@XTTian

再唠一句,如果你想从下标 0 循环 n 次,

那么就是 for (int i = 0; i < n; i++)

求关


by fzy1026 @ 2023-10-31 17:51:42

@XTTian 举例来说,假设一共有4个闰年

那么arr[4]记录的便是最后一个闰年的年份,并且在记录完后i++,i=5

而在最后遍历输出时,i最大会取到5(因为j=i=5),也就是输出arr[5].

但是arr[5]里面并没有存数并且已经初始化为0了,所以会输出0


by fzy1026 @ 2023-10-31 17:52:45

@wzj0829 正确的


|