for循环中的数字不会增加

时间:2018-10-22 07:35:02

标签: c

我得到了扫描10个数字的任务,以后将这些数字转换为字符。问题是,如果我不输入0,我不明白为什么会有一个无限循环。我用数组正确地完成了任务,但是我很感兴趣为什么在下面的示例中会发生这种情况。

#include <stdio.h>
#include <stdlib.h>

int main() {
/**
* for the example enter numbers: 8 5 12 12 15 23 15 18 12 4 -> helloworld
*/
    char n;
    // message needs to be 10 numbers long.
    for (int i = 1; i <= 10; i++){
      // enter message in numbers.
        scanf("%d", &n);
        // check if it is 0. if it is, end the message.
        if(n == 0) {
            printf("\nEnd of the message!");
            break;
        // if number is not 0, add 64 to transform to char.
        }else {
            n = n + 64;
            // print the char.
            printf("%c ", n);
            // print the i, that doesn't increment.
            printf(" -> i:%d\n", i);
        }
    }
    return 0;
}

4 个答案:

答案 0 :(得分:3)

您正在使用

char n;
...
scanf("%d", &n);

您不能将%dchar一起使用。您应将n更改为int或对%cscanf使用printf

int n;
...
scanf("%d", &n);

OR

char n;
...
scanf("%c", &n);

答案 1 :(得分:1)

您正在使用char来读取intscanf失败,输入保留在缓冲区中,因此scanf不断读取相同的值,从而导致无限循环。

因此,将n声明为int

优良作法是检查scanf的返回值,以便您知道输入是否已正确读取

  

如果在第一次转换(如果有)完成之前发生输入失败,scanf函数将返回宏EOF的值。否则,该函数将返回分配的输入项的数量,该数量可能少于所提供的数量,或者在出现早期匹配失败的情况下甚至为零

答案 2 :(得分:0)

问题出在扫描上!

scanf("%c", &n);

%d表示整数,%c表示字符,%s表示字符串,%f表示浮点数!

答案 3 :(得分:0)

scanf("%d", &n) int 读入n。由于n是一个字符,因此导致3个字节出现在scanf覆盖n之后。在您的情况下,变量i是在与这3个字节重叠的内存中分配的,因此对scanf的每次调用都会修改变量i,从而可能导致无限循环。使用%c读取字符而不是%d