gpt4 book ai didi

C++ 显示 char while 循环行

转载 作者:行者123 更新时间:2023-11-30 01:27:22 24 4
gpt4 key购买 nike

我是编程新手,如果这个问题看起来简单得离谱,我深表歉意。我正在研究我的 C++ 书中当前章节中的一些额外问题。我实际上已经找到了问题的正确答案,但是在这样做的时候,我遇到了一种让我发疯的情况,因为我无法弄清楚为什么一个特定的解决方案有效而另一个却没有。

因此,该问题要求在几行中打印 32 到 127 之间的 ASCII 值,每行 16 个字符。我找到的解决方案(可以正常工作)是这样的:

#include <iostream>
using namespace std;

int main()
{
char letter;
int count = 0;

for (letter = 32; letter < 127; letter++, count++)
{
if (count == 16)
{
cout << endl;
count = 0;
}
cout << letter << " ";
}

cout << endl;

return 0;

}

同样,上面的代码运行良好,并且按照我的要求执行。困难在于我在此之前尝试过的东西。我试图用嵌套的 while 循环来解决同样的问题,如下所示:

#include <iostream>
using namespace std;

int main()
{
char letter = 32;
int count;

while (letter < 127)
{
count = 0;
while (count < 16)
{
cout << letter << " ";
letter++;
count++;
}
cout << endl;
}

cout << endl;

return 0;

}

这个 while 循环无限地运行并且在我想要的 ASCII 字符之后还吐出一些垃圾,我不明白为什么。更奇怪的是,如果我用 while 循环将代码中的变量“字母”更改为 int 而不是 char,它会完全按照我想要的方式运行并在应该终止时终止,只显示实际数字而不是 ASCII值。

只有当“字母”是一个字符时,我才会得到一个无限循环。我确定这真的很简单,我现在可能太累了,看不到它,但是任何帮助/提示都将不胜感激!尽管我在技术上得到了答案,但我不知道为什么第二个答案如此失败,这让我发疯。

提前致谢。

最佳答案

答案很简单,足够真实。这是发生的事情 - (signed)char 在输出行到 112 之后,在内循环中的值可以在 [-128, 127] 范围内,你用另一个 16 增加计数,因此你也用 16 增加字母,这个使 letter 等于 112 + 16 = 128,由于 signed char 的范围实际上溢出并变为 -128。因此,在内循环执行后,外循环的条件仍然成立:-128 < 127。这也是为什么会出现奇怪的字符 - 这些值介于 -128 和 32 之间。

如何解决这个问题?更改内部循环中的检查: while (count < 16 && letter < 127)

关于C++ 显示 char while 循环行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9076387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com