2017-01-19 4 views
0
#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番目の数値は数値かを示します。タスクの私の例は 2 1111; 16 F; 8 1;回答は15,15 、1。また、私の先生のチェックは、彼が持っている事例を持っているので、私は無限のサイクルでなければなりません。私は正しい答えを得ることができます。何かが間違っていると私はそれが何かを得ることができません:例えば:私は16 fを入力すると、私は15を得るが、私は再び出力すると私は2 1111を入力しようとすると、それを入力しようとすると、私は8 1を入力し、私は1(正解である)を取得し、次に私は2 1111を入力し、17.Again wrong.Whatever私は行16に2を入力することはできません取得します。 2番目の答えは私に答えを与えません。あなたは私を助けることができますか?16進数、2進数、およびoctからdecへのコンバーターが正しく動作しないC++

+0

誰かがアイデアを持っているのでしょうか? – Pafo

+0

神私はいくつかの助けが必要です:D – Pafo

答えて

1

あなたはhexoctcincoutの状態を変更、しかし、あなたが完了したら、次のパスに、それは間違ったことをして、あなたは、それらをバック設定しないでください。また、どのような種類のエラーでも終了するコードはないので、誰かが終了しようとするとコードが壊れてしまいます。

ここでは固定である:

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 
     } 
    } 
} 
+1

'while(cin >> a)'が良いでしょう。エラーまたはEOF(入力がファイルからリダイレクトされた場合)は最初の入力で発生する可能性があり、 'a'は最初のパスでは初期化されません。あなたはちょうど私を打つBTW。 2日間無回答で、私が答えるようになったら...:^) –

関連する問題