2

40 から 126 までの ASCII 値 (両端を含む) について、ハイフンで区切られた 16 進値、8 進値、および対応する文字を出力するプログラムを作成しました。私のコードは次のとおりです。

#include<iostream>
using namespace std;
int main()
{
      int i;
      char c;
        for(i=40;i<=126;i++)
        {
            c=i;
            cout<<i<<"-"<<hex<<i<<"-"<<oct<<i<<"-"<<c<<"\n";
      }
      return 0;
}

正常に動作しますが、ここではいくつかの値iがスキップされています。つまり、58,59 は印刷されません。40 から 126 の範囲のすべての値を出力したいと考えています。何か提案はありますか?

4

3 に答える 3

14

最初に 10 進数で出力したい場合は、std::decストリーム マニピュレータを追加する必要があります。

cout << dec << i << "-" << hex << i << "-" << oct << i << "-" << c << "\n";
//      ^^^

最初のループの繰り返しの後、フラグstd::ios_base::octoct` がまだ残っているためです。

于 2013-06-17T07:30:35.970 に答える
6

への呼び出しごとに最後に使用したマニピュレータcoutoctであり、ストリームはそれを「記憶」します。そのため、i次にマニピュレータなしで出力するときは、引き続きoct出力形式として使用されます。decの最初の出力に明示的に使用するだけiです。

cout << dec << i << "-" << hex << i << "-" << oct << i << "-" << c <<"\n";
于 2013-06-17T07:30:33.127 に答える
0

または、古き良き C ライブラリを使用することもできます。

#include <stdio.h>
int main()
{
    int i;
    for(i=40;i<=126;i++)
        printf("%d 0x%X  '%c' \n", i, i, i);

    return 0;
}
于 2013-06-17T07:32:50.317 に答える