我编写了一个程序来打印十六进制值,八进制值和相应的字符,用连字符分隔,用于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范围内的所有值。有任何建议吗?
答案 0 :(得分:14)
如果要首先打印为十进制,则应添加std::dec
流操纵器:
cout << dec << i << "-" << hex << i << "-" << oct << i << "-" << c << "\n";
// ^^^
因为在第一次循环迭代之后,标志std::ios_base::oct
oct`仍然存在。
答案 1 :(得分:6)
您用于cout
每次通话时使用的最后一个操纵器是oct
,并且流&#34;会记住&#34;那么 - 当你下次没有操纵者输出i
时,它仍然使用oct
作为输出格式。只需明确使用dec
作为i
的第一个输出:
cout << dec << i << "-" << hex << i << "-" << oct << i << "-" << c <<"\n";
答案 2 :(得分: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;
}