C++在循环行时显示字符

C++ display char while loop rows

本文关键字:显示 字符 循环 C++      更新时间:2023-10-16

我对编程很陌生,所以如果这个问题看起来简单得离谱,我很抱歉。在我的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循环将代码中的变量"letter"更改为int而不是char,它会按照我希望的方式运行,并在应该终止时终止,只显示实际数字而不是ASCII值。

只有当"letter"是一个字符时,我才会得到一个无限循环。我相信这真的很简单,我可能只是太累了,现在看不到,但任何帮助/提示都将不胜感激!尽管从技术上讲我已经得到了答案,但我不知道为什么第二个答案会如此糟糕,这让我抓狂。

提前谢谢。

答案很简单,足够正确。以下是发生的情况-(有符号)字符在内部循环中的值可以在[-128127]范围内。当您将行输出到112时,您可以用另一个16来增加计数,因此您也可以用16来增加字母,这使得字母等于112+16=128,由于有符号字符的范围,实际上溢出了,变成了-128。因此,在执行内部循环之后,外部循环的条件仍然成立:-128<127.这也是为什么你会得到奇怪的字符——这些字符的值在-128到32之间。

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

当字母==48,64,…时,内部while循环退出。。。,128。但是由于它是一个(有符号的)字符,128被解释为-128,外部循环不会终止。将内环更改为

while (count < 16 && letter < 127)

以获得与第一个示例中相同的行为。

或者将字母改为int,如果可以打印包括127:在内的所有字符

int letter = 32;
...
cout << (char)letter << " ";

试试这个代码:

#include <iostream>
using namespace std;
int main()
{
  int letter;
  for (letter = 32; letter < 128; ++letter)
  {
     if (letter != 32 && letter % 16 == 0)
         cout << endl;
     cout << (char)letter << ' ';
  }
}