2016-10-31 257 views
-1
#include "stdafx.h" 
#include <iostream> 
#include <iomanip> 
#include <string> 
using namespace std; 

void main() { 
    int a, b; 
    while (cin >> a) { 
     switch (a) { 
     case 2: { 
      cin >> b; 
      std::string s = std::to_string(b); 
      int dec = std::stoi(s, nullptr, 2); 
      cout << dec << endl;break; 
     } 
     case 8: 
      cin >> b; 
      cout << oct <<b<< endl; break; 
     case 16: 
      std::cin >> std::hex >> b; 
      std::cout << b << std::endl; 

     } 
    } 
} 

這就是我的代碼。它們中的每一個都有效,但十六進制一個。當我使用它時,它不起作用。從十六進制到十進制,二進制到十進制和八進制到十進制程序C++

For example if i have an input: 
2 1111 
16 F 
8 1 
it should have an output: 
15 
15 
1 

第一個數字是十六進制/ bin/oct,第二個是你給的數字。

關於while(cin >> a),就是這樣,因爲它應該有一個無限循環,會有很多輸入和是啊。我猜這是行不通的,因爲這個聲明,但我不知道如何解決它。

回答

0

您的代碼正常工作:http://ideone.com/tBkJ2x如果您收到的錯誤是由您的示例輸入以外的值引起的。如果你提供了一個值給你帶來問題的價值,我很樂意和你一起看看。

順便說一下,爲什麼不只是使用stoi的一切?例如:

string s; 

while(cin >> a) { 
    cin >> s; 
    cout << stoi(s, nullptr, a) << endl; 
} 

Live Example

編輯:

hexoct是粘性:https://stackoverflow.com/a/1533222/2642059

因此,如果你設置這個,你還必須取消設置它。

您需要更改:cout << oct <<b<< endlcout << oct << b << dec << endlcin >> hex >> bcin >> hex >> b >> dec爲了讓您的代碼正常工作。 (或優選地切換到我的代碼的上方。)

當你在一個十六進制數字的16個被翻譯爲十六進制數讀取後輸入到a,因此它被解釋爲:(十進制)22

+0

嘗試使用16 f,然後再16 f,它不起作用。 – Pafo

+0

@Pafo我編輯過來解釋這個問題。直到您輸入該評論,我纔看到它。由於它對我有幫助,所以也可能對其他人有所幫助,將它轉換成您的問題可能會提出更好的問題。 –

+0

嘿,夥計,謝謝。我在這段代碼中添加了dec - > std :: cin >> std :: hex >> b >> dec;並且它現在可以工作。究竟dec是如何修復這個程序的? 編輯:實際上,當我輸入很多東西它沒有正常工作。 編輯2:我添加了cout << oct << b << dec << endl它的工作原理:D – Pafo

相關問題