十六进制,二进制和oct到dec转换器无法正常运行C ++

时间:2017-01-19 10:54:28

标签: c++ hex decimal converter

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

long fromBin(long n)
{
    long factor = 1;
    long total = 0;

    while (n != 0)
    {
        total += (n%10) * factor;
        n /= 10;
        factor *= 2;
    }

    return total;
}

int main() {
    int a,b;
    while (true) {
        cin>>a;
        if(a==2){
            cin>>b;
            cout<<fromBin(b)<<endl;
        }
        if(a==16){
            cin >> hex >> b;
            cout << b << endl;
        }
        if(a==8){
            cin>>b;
            cout<<oct<<b<<endl;
        }
    }
}

所以我的任务非常简单,但由于某种原因它不起作用。我必须输入2个数字。第一个显示我希望数字(16,2,8)转换为十进制的基数第二个数字是数字。我在任务中的例子是: 2 1111; 16 F; 8 1;答案应为15,15,1。此外,你必须是一个无休止的循环,因为我的老师检查的是他所拥有的例子,他希望我们能够无休止地循环。我得到了正确的答案,但只有我输入数字一次,第二次时间出错了,我不知道它是什么。例如:当我输入16 f时,我得到15,但当我再次尝试输入时没有输出,当我尝试输入2 1111时,我得到65没有明显的原因。另一个例子是当我输入8 1并且我得到1(这是正确的答案)然后我输入2 1111并得到17.Again wrong.Whatever i do I not the two in a row 16 f,第二个没有给我答案。你能帮助我吗?

1 个答案:

答案 0 :(得分:1)

您可以使用cincout更改hexoct的状态,但是在完成后您不会将其设置回来,所以在下一遍,它做错了。此外,您没有任何代码可以退出任何类型的错误,所以当有人试图退出时,您的代码就会疯狂。

这里修好了:

int main() {
    int a,b;
    while (!cin.fail()) // stop after an error
    {
        cin>>a;
        if(a==2){
            cin>>b;
            cout<<fromBin(b)<<endl;
        }
        if(a==16){
            cin >> hex >> b;
            cin >> dec; // put it back the way we found it
            cout << b << endl;
        }
        if(a==8){
            cin>>b;
            cout<<oct<<b<<endl;
            cout<<dec; // put it back the way we found it
        }
    }
}