【发布时间】:2016-12-05 13:37:08
【问题描述】:
下面的函数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);
}
【问题讨论】:
-
为什么 j 是
char然后在循环中用作索引? -
scanf("%c", &mark);?那不是char吗?或者应该是int。 -
你通过了
marks[]但忽略了它。 -
%d想要int。您正在传递char,因此scanf将j变量覆盖到堆栈中... -
是的:使用自然大小
int,除非有充分的理由不这样做。