关于#c语言#的问题:有点小问题:为什么输入marks的时候需要多输入一位才能出结果

有点小问题:
为什么输入marks的时候需要多输入一位才能出结果?而且结果不受多输入那个数的影响。
for循环里的scanf那一句有什么用

//从输入的n个成绩中选出最高分,用for循环实现
#define _CRT_SECURE_NO_WARNINGS
#include<math.h>
#include<stdio.h>
int main() {
    int mark;
    int max;
    int n;

    printf("Enter n: ");
    scanf("%d", &n);

    printf("Enter % d marks : ", n);
    scanf("%d", &mark);
    max = mark;

    for (int i = 1; i <= n; i++) {
        scanf("%d", &mark);

        if (max < mark) {
            max = mark;
        }

    }
    printf("Max= %d\n", max);

    return 0;
}

img

scanf("%d")是输入一个整数。本来是输入n个然后找到最大的,因为for前面还有输入一个mark,for里面需要输入n个,所以需要多一个。多输入的那个会影响结果,for里面少输入一个,或者for前面不需要输入,max初始为一个足够小的值

第17行,循环结束条件改为:i < n 即可,供参考:

//从输入的n个成绩中选出最高分,用for循环实现
#define _CRT_SECURE_NO_WARNINGS
#include<math.h>
#include<stdio.h>
int main() {
    int mark;
    int max;
    int n;

    printf("Enter n: ");
    scanf("%d", &n);     // 从键盘读取 n ,即需要读入总个数

    printf("Enter %d marks : ", n);
    scanf("%d", &mark);  // 从键盘读取第一个 mark
    max = mark;
    for (int i = 1; i < n; i++) { // for (int i = 1; i <= n; i++) 修改
        scanf("%d", &mark); // 从键盘读取第二个,第三个,直到第 n - 1 个

        if (max < mark) {
            max = mark;
        }

    }
    printf("Max= %d\n", max);
    return 0;
}