【发布时间】:2021-12-30 15:18:57
【问题描述】:
我正在尝试使用 switch 语句来转换十进制数 放入一个基数(大于 9)并将余数保存到一个数组中, 但是,我没有得到想要的结果,因为看起来我弄乱了 switch 语句。 示例:200(10) = 678(16)
#include <iostream>
using namespace std;
int main(){
int x,y,yCopy,q,r,cnt=0;
cout << "Select a base for your number from 2 to 16 : ";
cin >> x;
cout << "Enter a decimal number in order to transform it to the selected base : " << endl;
cin >> y;
yCopy=y;
do{
yCopy=yCopy/x;
cnt++;
}while(yCopy!=0);
yCopy=y;
int result[cnt];
if(x>1 && x<10){
for(int i=cnt-1; i>=0;--i){
r=yCopy%x;
result[i]=r;
yCopy=yCopy/x;
}
cout << y << "(10) = ";
for(int i=0;i<cnt;++i){
cout << result[i];
}
cout << "(" << x << ")" << endl;
}
if(x>9 && x<17){
for(int i=cnt-1; i>=0;--i){
r=yCopy%x;
switch(r){
case 10 : r='A'; break;
case 11 : r='B'; break;
case 12 : r='C'; break;
case 13 : r='D'; break;
case 14 : r='E'; break;
case 15 : r='F';
}
result[i]=r;
yCopy=yCopy/x;
}
cout << y << "(10) = ";
for(int i=0;i<cnt;++i){
cout << result[i];
}
cout << "(" << x << ")" << endl;
}
return 0;
}
【问题讨论】:
-
不相关:
x对于表示基数的变量来说是一个非常糟糕的名称。为什么不称它为base并减少代码读者所需的认知负担?y也有类似的问题。 -
q也是一个非常糟糕的变量名。如果该变量从未被使用过,您甚至都不会注意到。 -
也不相关,我认为每个案例都需要一个break语句,包括“case:15”。还同意您应该大大改进您的命名约定,尝试使用驼峰或下划线,然后使用 1-3 个单词来描述该变量
-
提示:字符
C的ASCII码是67。 -
int表示"integer"。您的程序只打印整数变量。你不应该期望任何整数是C。
标签: c++ hex decimal converters