为什么我通过使用不同的循环获得不同的输出?

时间:2015-12-18 17:45:16

标签: c arrays windows visual-studio kbhit

我制作了一个输入四个字母的代码,并打印一个'*'来代替每个字母,就像在密码中一样。工作代码是这样的:

nextRow = .Cells(Rows.Count, "B").End(xlUp).Row + 1 'Change "B" to your column

现在我有两个问题: 1)当我将循环更改为:

时,为什么我会得到4个?
#include <stdio.h>
#include <conio.h>
int main()
{
    int c = 0;
    char d[4];
    printf("Enter a character:");
    while (1)
    {
        if (_kbhit())
        {
            d[c] = _getch();
            printf("*");
            c++;
        }
        if (c == 4)
            break;
    }
    system("cls");
    for (c = 0; c <= 3; c++)
        printf("%c", d[c]);
}

和2)当我将第二个循环的上限改为c <= 4时,为什么我最后得到一个额外的╠?

第二个循环是:

for (c = 0; c <= 4;c++)
    {
        if (_kbhit())
        {
            d[c] = _getch();
            printf("*");
        }
    }

1 个答案:

答案 0 :(得分:0)

无论for是返回true还是false,_kbhit()循环都会迭代4次。 while循环直到_kbhit()返回true 4次

对于第二个问题,d[4]超出了数组的范围,相同的值只是巧合