2016-07-03 21 views
-3

私はちょうどC++を手に入れましたが、エクササイズ用のコードを少し完成させました。問題は、このコードが無期限に実行されることです。理由の説明がありますか?この考え方は、a-z、A-Z、および1〜100の文字と対応する整数の表を生成することです。'for'ループを使ったランダムクラッシュ

#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'; 

} 
+4

''100''は' char'ではありません。 – Rakete1111

+4

ランダムクラッシュ!=無期限に実行する – Tas

+1

'' 0 ''から '' 9 ''にしたくないですか? – Galik

答えて

0

table_value_integer <= '100'は意味がありません。 100に行く場合は、100(引用符なし):table_value_integer <= 100を使用してください。

引用符では、それはマルチバイト文字か何も定義されておらず、あなたは予想外の何かに対してチェックしています。

はまた、あなたはおそらくchar table_value_integer = 0;(とない'0'

+0

いいえ、 '' 100''はまだ文字列ではありませんが、 '' 100 "'は二重引用符で囲みます。 – cwschmidt

+0

duh。はい、明確です。 – Aganju

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)です。あなたが増分すると、'1'の文字である49、そして'2'の文字である50など、57になるまでの文字は'9'です。あなたがそれを再び増やすと、文字は':'である58を得る。あなたが考えるように決して'10'にはなりません。 1文字を増やして2文字を作ることはできません。

あなたが本当に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チャートを見てください。

関連する問題