学习了C++有一段时间,却发现有些基本问题还是不过关,下面向大家请教一个问题:
输入八进制,十六进制数,并用十进制,八进制,十六进制分别输出这些数;
请问用cin怎样输入八进制,十六进制数,可否用cin.flags(ios::oct) 和 cin.flags(ios::hex)控制输入, 不过好像输出不了,我输出的时候也用了cout.flags(ios::oct) 和cout.flags(ios::oct)
学习了C++有一段时间,却发现有些基本问题还是不过关,下面向大家请教一个问题:
输入八进制,十六进制数,并用十进制,八进制,十六进制分别输出这些数;
请问用cin怎样输入八进制,十六进制数,可否用cin.flags(ios::oct) 和 cin.flags(ios::hex)控制输入, 不过好像输出不了,我输出的时候也用了cout.flags(ios::oct) 和cout.flags(ios::oct)
这是我的一道作业,请大伙帮我看一下,运行时有一点问题(就是上面说的问题),我用的Visual studio.net 2003
//-------------stdafx.h---------------
#include <iostream> #include <iomanip> #include <tchar.h>
using namespace std;
//Number.h
class CNumber { public: CNumber(void); ~CNumber(void); protected: int *fNumber,precision; double pNumber; char *fString; public: void Enter(void); void Print1(void); void Print2(void); };
//------------Number.cpp------------------
#include "StdAfx.h" #include ".\number.h" #using <mscorlib.dll>
CNumber::CNumber(void) : fNumber(NULL) , fString(NULL) , precision(0) { }
CNumber::~CNumber(void) { if(fNumber) delete []fNumber; if(fString) delete []fString; }
void CNumber::Enter(void) { cout<<"请分别以十进制,八进制,十六进制输入三个数:"; for(int i=0;i<3;i++) { if(i==0) cin>>fNumber[i]; if(i==1) {cin.get();cin.flags(ios::oct|ios::showbase); cin>>fNumber[i];} if(i==2) {cin.get();cin.flags(ios::hex|ios::showbase); cin>>fNumber[i];} } cout<<"输入一个浮点数并指定精度:"; cin>>pNumber>>precision; cin.get(); cout<<"输入一串字符:"; fString=new char[30]; cin.getline(fString,30); }
void CNumber::Print1(void) { ///---------用流成员函数--------- cout<<'\n'<<"以左和右对齐的方式输出整数(域宽为12):"<<endl; for(int i=0;i<3;i++) { cout.width(12); cout.flags(ios::dec); cout.setf(ios::left); cout<<fNumber[i]<<"\t"; } cout<<endl; for(int i=0;i<3;i++) { cout.width(12); cout.flags(ios::dec); cout.setf(ios::right); cout<<fNumber[i]<<"\t"; } cout<<'\n'<<"以八进制、十进制、十六进制输出整数:"<<endl; for(int i=0;i<3;i++) { cout<<fNumber[i]<<"\t"; cout.setf(ios::oct|ios::showbase); cout<<fNumber[i]<<"\t"; cout.flags(ios::hex|ios::showbase); cout<<fNumber[i]<<endl; } cout<<'\n'<<"浮点数的输出:"<<endl; cout.precision(precision); cout.setf(ios::scientific); cout<<"指数格式:"<<pNumber<<endl; cout.setf(ios::fixed,ios::floatfield); cout<<"定点格式:"<<pNumber<<endl; cout<<'\n'<<"输出字符串:"; cout<<fString<<endl; }
//------------aa.cpp----------------
#include "stdafx.h" #include "Number.h" #using <mscorlib.dll>
int _tmain() { // TOD 请用您自己的代码替换下面的示例代码。 CNumber data; data.Enter(); data.Print1(); return 0; }
我修改了一下,情况有所好转:
void CNumber::Enter(void) {//在这里加一句:fNumber=new int[3];
cout<<"请分别以十进制,八进制,十六进制输入三个数:"; .........
// 以下这句前加一句:cin.get();
cout<<"输入一个浮点数并指定精度:"; cin>>pNumber>>precision; cin.get(); //问题就是,这里的cin.get(); 好像不起作用,当输入完浮点数 cout<<"输入一串字符:"; 和精度后,就全部输出了,不能输入字符串 fString=new char[30]; cin.getline(fString,30); }