2017-01-19 78 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 1111; 16 F; 8 1;答案應該是15,15 ,1。你也會認爲它必須是一個無休止的循環,因爲我的老師如何檢查他是否有他的例子,他希望我們無盡的循環。我得到正確的答案,但只有我如果我輸入一次數字,第二例如:當我輸入16 f時,我得到15,但是當我嘗試再次輸入時,沒有輸出,當我嘗試輸入2 1111時,我得到65沒有明顯的原因。另一個例子是當我輸入8 1,我得到1(這是正確的答案),然後我輸入2 1111,並得到17.Again wrong.Whatever我做我不能輸入2連續16 f,第二個不給我答案。所以你能幫我嗎?十六進制,二進制和八進制到十進制轉換器不能正常工作C++

+0

是否有人有想法? – Pafo

+0

上帝,我需要一些幫助:D – Pafo

回答

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

'while(cin >> a)'would better。一個錯誤或EOF(如果輸入從一個文件重定向)可能發生在第一個輸入上,並且'a'會在第一次傳遞時未初始化。順便說一句,你只是打敗了我。兩天沒有答案,當我開始回答...:^) –

相關問題