2

我编写了一个程序来打印 40 到 126(包括两者)之间的 ASCII 值的十六进制值、八进制值和相应的字符,用连字符分隔。我的代码是:

#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

如果要先打印为十进制,则应添加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

或者你可以使用好的 ol' 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 回答