循环计数器不递增

时间:2016-12-05 13:37:09

标签: c arrays loops

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

main

2 个答案:

答案 0 :(得分:7)

您已将mark声明为char,但在scanf调用中您正在使用d转换说明符,该说明符要求其对应的参数具有类型int *,而不是char *。使用错误的转换说明符会导致未定义的行为。

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

mark是否应该代表数值(9075等)?如果是,请将mark的类型从char更改为int

如果mark应该代表字母等级(AB等),请将scanf调用更改为

scanf( " %c", &mark ); // note leading whitespace

答案 1 :(得分:3)

您正在将1 byte变量(char)的地址传递给将威胁它作为int指针的函数。

如果我们假设int4 bytes,则scanf会覆盖3 byte变量附近的堆栈mark

第一个可能是j;