程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c++-本人是新手,這個程序還有沒實現的一點小問題,調試了很久都沒有結果!求幫助!

c++-本人是新手,這個程序還有沒實現的一點小問題,調試了很久都沒有結果!求幫助!

編輯:編程綜合問答
本人是新手,這個程序還有沒實現的一點小問題,調試了很久都沒有結果!求幫助!

程序代碼如下:
現在遇到的問題是:1、cout<<"輸入q退出,輸入1進入系統!"; 執行這一句的時候,輸入任意的字符都能進入下面的操作,怎麼改可以只在輸入1的時候進入系統
2、如何把判斷輸入的字符串或者數值是不是相應的進制數加到對應的函數體內(如下/* */),如何實現(重新輸入)功能?
void AnyBinary2DecConvert::NumConvert(string SrcNum, int ConvertType)
{
int i;
int len = SrcNum.size();
int a[100];
string test;

switch (ConvertType)
{
case BINARY: //2進制
/*for (i=0;i<=len;i++)
{
if (a[i] ==0 ||a[i] ==1)
{
continue;
}
else
{
cout<<"該數據不是二進制數,請重新輸入!"<<endl;
}
return;*/
}
case OCTAL: //8進制
case HEX: //16進制
for(i = 0; i < len; i++)
{
m_CovertedNumber += Char2Dec(SrcNum[i]) * pow(ConvertType, len-i-1);//計算ConvertType的len-i-1次冪
}
cout << m_CovertedNumber << endl;
break;
default:
cout << "error" << endl;
break;
}
return;
}

#include
#include
#include
#include

using namespace std;

const int BINARY = 2; // 定義2進制數常量
const int OCTAL = 8; // 定義8進制數常量
const int DEC = 10; // 定義10進制數常量
const int HEX = 16; // 定義16進制數常量

const int DEC2ANYBIN = 0; // 10進制轉2\8\16進制
const int ANYBIN2DEC = 1; // 2\8\16進制轉10進制

class NumConvertMethod//定義一個NumConvertMethod基類 數字轉換方法
{
public:
virtual ~NumConvertMethod(){};//虛析構函數
virtual void NumConvert(string SrcNum, int ConvertType) = 0;//簡單類型轉換 第1個是目標數據類型,第2個是源數據
};

class Dec2AnyBinaryConvert : public NumConvertMethod
{
public:
Dec2AnyBinaryConvert();//構造函數
virtual ~Dec2AnyBinaryConvert();//虛析構函數
virtual void NumConvert(string SrcNum, int ConvertType);

private:
char Dec2Char(char num);
string m_CovertedNumber;
};

class AnyBinary2DecConvert : public NumConvertMethod
{
public:
AnyBinary2DecConvert();//構造函數:二、八、十六進制數轉十進制數
virtual ~AnyBinary2DecConvert();//虛析構函數
virtual void NumConvert(string SrcNum, int ConvertType);// 簡單類型轉換 第1個是目標數據類型,第2個是源數據

private:
int Char2Dec(char &num);
int m_CovertedNumber;
};

class NumConverter//定義一個NumConverter類
{
public:
NumConverter(int converter);//構造函數
~NumConverter();//析構函數
void NumConvert(string SrcNum, int ConvertType);

private:
NumConvertMethod *m_pnumconvertmethod;
};

Dec2AnyBinaryConvert::Dec2AnyBinaryConvert()
{
m_CovertedNumber = "";//定義字符串為""
}

Dec2AnyBinaryConvert::~Dec2AnyBinaryConvert()
{
m_CovertedNumber = "";
}

char Dec2AnyBinaryConvert::Dec2Char(char num) //十進制轉換成任意進制
{
if((num <= 9) && (num >= 0))//int類型的轉換成字符型
{
num += 48;
}
else
{
switch(num)//把十六進制數中10——15變成A------F
{
case 10:
num='A';
break;
case 11:
num='B';
break;
case 12:
num='C';
break;
case 13:
num='D';
break;
case 14:
num='E';
break;
case 15:
num='F';
break;
default:
break;
}
}

return num;
}

AnyBinary2DecConvert::AnyBinary2DecConvert() //定義構造函數AnyBinary2DecConvert,二、八、十六進制轉換十進制
{
m_CovertedNumber = 0;
}

AnyBinary2DecConvert::~AnyBinary2DecConvert()//析構函數
{
m_CovertedNumber = 0;
}

int AnyBinary2DecConvert::Char2Dec(char &num)
{
if((num <= '9') && (num >= '0'))//int類型的轉換成字符型
{
num -= 48; //通過ASSCII
}

else
{
switch(num)//把十六進制數中a(A)——f(F)變成10——15
{
case 'A':
case 'a':
num=10;
break;
case 'B':
case 'b':
num=11;
break;
case 'C':
case 'c':
num=12;
break;
case 'D':
case 'd':
num=13;
break;
case 'E':
case 'e':
num=14;
break;
case 'F':
case 'f':
num=15;
break;
default:
break;
}
}

return num;
}

//10進制轉2\8\16進制方法
void Dec2AnyBinaryConvert::NumConvert(string SrcNum, int ConvertType)
{
char temp;
int trans = atoi(SrcNum.c_str());//atoi字符串轉換成整型數
int i;

switch (ConvertType)
{
case BINARY: //2進制
case OCTAL: //8進制
case HEX: //16進制
while(trans > 0)
{
temp = trans % ConvertType;
m_CovertedNumber += Dec2Char(temp);
trans = trans / ConvertType;
}

for(i = m_CovertedNumber.size()-1; i >= 0; i--)
{
cout << m_CovertedNumber[i];
}
cout << endl;
break;

default:
cout << "error" << endl;
break;
}
return;
}

//2\8\16進制轉10進制方法
void AnyBinary2DecConvert::NumConvert(string SrcNum, int ConvertType)
{
int i;
int len = SrcNum.size();
int a[100];
string test;

switch (ConvertType)
{
case BINARY: //2進制
for (i=0;i<=len;i++)
{
if (a[i] ==0 ||a[i] ==1)
{
continue;
}
else
{
cout<<"該數據不是二進制數,請重新輸入!"<<endl;
}
return;
}
case OCTAL: //8進制
case HEX: //16進制
for(i = 0; i < len; i++)
{
m_CovertedNumber += Char2Dec(SrcNum[i]) * pow(ConvertType, len-i-1);//計算ConvertType的len-i-1次冪
}
cout << m_CovertedNumber << endl;
break;
default:
cout << "error" << endl;
break;
}
return;
}

NumConverter::NumConverter(int converter)
{
if (converter == DEC2ANYBIN) //十進制轉二、八、十六進制
{
m_pnumconvertmethod = new Dec2AnyBinaryConvert();
}
else if (converter == ANYBIN2DEC) //二、八、十六進制轉十進制
{
m_pnumconvertmethod = new AnyBinary2DecConvert();
}
else
{
m_pnumconvertmethod = NULL;
}
}

NumConverter::~NumConverter()
{
if (NULL != m_pnumconvertmethod)
{
delete m_pnumconvertmethod;
}
}

void NumConverter::NumConvert(string SrcNum, int ConvertType)
{
m_pnumconvertmethod->NumConvert(SrcNum, ConvertType);
}

// 主控制台,主要實現轉換控制!
int main(void)
{
cout<<" #################################################################"< cout cout cout string test;
string kongzhi;
int type=0; //轉換類型: 2進制或8進制或16進制
int system=0; //轉換選擇:10進制轉2、8、16進制 或 2、8、16進制轉10進制
while (1)//非0時執行
{
cout cin>>kongzhi;
if (kongzhi.compare(0, 1, "q", 1) != 0)
{
cout << "請選擇轉換系統:" << endl;
cout << "0: 十進制 轉 二\八\十六進制" << endl;
cout << "1: 二\八\十六進制 轉 十進制" << endl;
cin >> system;

if (system != 0)
{
cout << "請選擇轉換前類型:" << endl;
cout << "2: 二進制" << endl;
cout << "8: 八進制" << endl;
//cout << "10: 十進制" << endl;
cout << "16: 十六進制" << endl;
}
else
{
cout << "請選擇轉換後類型:" << endl;
cout << "2: 二進制" << endl;
cout << "8: 八進制" << endl;
//cout << "10: 十進制" << endl;
cout << "16: 十六進制" << endl;
}
cin >> type;
cout<<"請輸入數據:";
cin>>test;

NumConverter numconA(system);
numconA.NumConvert(test, type); //轉換並輸出轉換結果
}
else
{
cout << "你已退出本系統!" << endl;
break;
} return 0;
}
return 0;
}

最佳回答:


1.string kongzhi 改為 int kongzhi;
if(kongzhi == 1)
{
進入系統
}
else if(kongzhi == (int)('q') || kongzhi == int('Q'))
{
//退出系統
}
else
{
//輸入不正確
}

2.判斷一個數是由什麼進制組成不可能,只能人為告訴 如輸入一個 8 它即可以是十進制的8 也可以是十六進制的8 你沒有辦法進行程序判斷它是屬於那個進制的

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved