循环计数器不递增

ACa*_*ter 1 c arrays loops

以下功能aquire_marks旨在获取5个用户输入的数字,并将其存储在marks.运行时,for循环按预期运行一次j=0,然后按预期运行j=1,但随后j不会递增到2,并保持不变1,使函数处于无限循环中.如果将循环置于内部main,则不会发生此问题,但如果可能的话,我宁愿将其放在单独的函数中.有什么想法在这里发生了什么?

#include<stdio.h>

void aquire_marks(char marks[], char names[][11]){ // 11 - max name length + 1
    char j, mark;

    for(j=0; j<5; j++){
        printf("Enter mark for %s: ", names[j]);
        scanf("%d", &mark);
    }
}

int main() {
    char names[5][11] = {"a", "b", "c", "d", "e"};
    char marks[5];

    aquire_marks(marks, names);
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ode 7

你已经声明mark为a char,但是在scanf调用中你正在使用d转换说明符,它希望它的相应参数有类型int *,而不是char *.使用错误的转换说明符会导致未定义的行为.

我将推测它mark并且j在内存中相邻,并且在读取整数值mark(可能在2到4个字节宽的范围内)的过程中,值j被覆盖.

mark认为代表一个数值(90,75,等)?如果是的话,改变的类型,markcharint.

如果mark应该代表一个字母等级(A,B,等),然后更改scanf呼叫

scanf( " %c", &mark ); // note leading whitespace
Run Code Online (Sandbox Code Playgroud)