为什么使用不同的循环会得到不同的输出?
Why do I get different outputs by using different loops?
我制作了一个输入四个字母的代码,并在每个字母的位置打印一个“*”,就像在密码中一样。工作代码是这样的:
#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]);
}
现在我有两个问题:
1) 当我将循环更改为:
时,为什么会得到四个╠
for (c = 0; c <= 4;c++)
{
if (_kbhit())
{
d[c] = _getch();
printf("*");
}
}
and 2) 为什么我将第二个循环的上限更改为c<=4时,最后会得到一个额外的╠?
第二个循环是这样的:
for (c = 0; c <= 3; c++)
printf("%c", d[c]);
因为无论 _kbhit()
returns 是真还是假,for
循环都会迭代 4 次。 while
循环直到 _kbhit()
returns true 4 次
第二题,d[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]);
}
现在我有两个问题: 1) 当我将循环更改为:
时,为什么会得到四个╠for (c = 0; c <= 4;c++)
{
if (_kbhit())
{
d[c] = _getch();
printf("*");
}
}
and 2) 为什么我将第二个循环的上限更改为c<=4时,最后会得到一个额外的╠?
第二个循环是这样的:
for (c = 0; c <= 3; c++)
printf("%c", d[c]);
因为无论 _kbhit()
returns 是真还是假,for
循环都会迭代 4 次。 while
循环直到 _kbhit()
returns true 4 次
第二题,d[4]
超出数组范围,相同的值只是巧合