【问题标题】:Console output overflow控制台输出溢出
【发布时间】:2015-04-23 23:00:15
【问题描述】:

我正在尝试编写一个简单的程序来输出 ascii 字符 32 到 127,当我执行它时,它会一遍又一遍地输出字符 32 到 127……直到它崩溃。代码如下:

#include <iostream>
using namespace std;

int main()
{
char letter = 32;

for (letter = 32; letter <= 127; letter++) 
{
cout << letter << " ";
}

cout << endl;
system("pause");
return 0;
}

这有点奇怪,因为如果我将“字母”更改为 int 变量,它可以正常工作。

【问题讨论】:

  • 你能解释一下它是如何崩溃的吗?
  • 好吧,它只是一遍又一遍地在屏幕上输出 ascii 字符 37 到 127,直到计算机提示我结束它
  • 我的意思是 32 到 127

标签: c++ loops char console-application


【解决方案1】:

可能您的char 已签名,因此它的值范围为-128..+127。一旦它达到 127 并增加它,它就变为 -128,仍然小于 127,并且循环无限运行。请改用intunsigned char

【讨论】:

  • 对于这样的事情,我会使用int。但当然,这意味着您必须在输出之前将该值转换为 char。否则,它会将int 转换为其数值的文本表示形式。
【解决方案2】:

char 是一个只有 1 个字节的数据类型,通常是 8 位。由于您没有指定 char 的“签名”,因此您的编译器可能假定了 signed char,范围从 -128 到 127。

该循环永远运行,因为从 127 递增有符号字符会由于溢出导致 -128,而 -128 仍然小于或等于 127。 解决这个问题的最简单方法是使用更大的整数。

int letter = 32;
for (letter = 32; letter <= 127 ; letter++) {
    cout << static_cast<char>(letter) << " ";
}

【讨论】:

    【解决方案3】:

    char 的值可以是 -128..127,所以它总是&lt;= 127

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多