随机崩溃使用' for'环

时间:2016-07-03 21:57:33

标签: c++

我刚刚选择了C ++,而我刚刚完成了一些代码。问题是,这段代码无限期地运行。有人可以解释一下原因吗?我们的想法是生成一个字符表及其相应的整数,这对于a-z,A-Z和1-100。

#include "std_lib_facilities.h"

int main()
{

    for (char table_value_lower = 'a'; table_value_lower <= 'z'; ++table_value_lower)
        cout << table_value_lower << '\t' << int(table_value_lower) << '\n';
    for (char table_value_upper = 'A'; table_value_upper <= 'Z'; ++table_value_upper)
        cout << table_value_upper << '\t' << int(table_value_upper) << '\n';
    for (char table_value_integer = '0'; table_value_integer <= '100'; ++table_value_integer)
        cout << table_value_integer << '\t' << int(table_value_integer) << '\n';

}

2 个答案:

答案 0 :(得分:3)

这是你的问题:

for (char table_value_integer = '0'; table_value_integer <= '100'; ++table_value_integer)
    cout << table_value_integer << '\t' << int(table_value_integer) << '\n';

你最接近你所做的事情就是:

for (char table_value_integer = '0'; table_value_integer <= '9'; ++table_value_integer)
    cout << table_value_integer << '\t' << int(table_value_integer) << '\n';

ASCII character set中,字符'0'的值为48(0x30)。如果你增加,你得到49,即字符'1',然后是50,这是字符'2',依此类推,直到你到达57,即字符'9'。当你再次递增它时,你得到58,即字符':'。它似乎永远不会像你想象的那样'10'。你不能通过增加一个字符来制作两个字符。

如果你真的想将它增加到100,那么你会这样做:

for (char table_value_integer = '0'; table_value_integer <= 100; ++table_value_integer)
    cout << table_value_integer << '\t' << int(table_value_integer) << '\n';

顺便说一下,值100是字符'd'。查看我链接的ASCII图表。

答案 1 :(得分:0)

table_value_integer <= '100'没有意义。如果您想转到100,请使用100(无引号):table_value_integer <= 100

使用引号,它是一个多字节字符或没有定义,你正在检查不同于你期望的东西。

此外,您可能需要char table_value_integer = 0;(而不是'0'