2016-12-31 170 views
0
#include <string> 
#include <iostream> 

using namespace std; 

int main() { 
    string input, numBin = ""; 
    cout << "Enter a hexadecimal number: "; 
    getline(cin, input); 

    for (int i = 0; i < input.length(); i++) { 
     switch (input[i]) { 
      case 0: numBin.append("0000"); break; 
      case 1: numBin.append("0001"); break; 
      case 2: numBin.append("0010"); break; 
      case 3: numBin.append("0011"); break; 
      case 4: numBin.append("0100"); break; 
      case 5: numBin.append("0101"); break; 
      case 6: numBin.append("0110"); break; 
      case 7: numBin.append("0111"); break; 
      case 8: numBin.append("1000"); break; 
      case 9: numBin.append("1001"); break; 
      case 'a': numBin.append("1010"); break; 
      case 'A': numBin.append("1010"); break; 
      case 'b': numBin.append("1011"); break; 
      case 'B': numBin.append("1011"); break; 
      case 'c': numBin.append("1100"); break; 
      case 'C': numBin.append("1100"); break; 
      case 'd': numBin.append("1101"); break; 
      case 'D': numBin.append("1101"); break; 
      case 'e': numBin.append("1110"); break; 
      case 'E': numBin.append("1110"); break; 
      case 'f': numBin.append("1111"); break; 
      case 'F': numBin.append("1111"); break; 
      default: break; 
     } 
    } 
    cout << "Your number in binary is " << numBin << "."; 
} 

該程序應該將十六進制輸入('input')更改爲二進制結果('numBin')。我沒有太多的使用switch語句的經驗,也沒有完全理解「默認」的情況,所以對此的任何澄清或者如果我錯誤地使用它將會有所幫助!混淆將C++中的十六進制轉換爲二進制

我得到的錯誤是在for循環,它thorws:符號和無符號整數表達式的比較[-Wsign-比較]

回答

2
case '0': 
case '1': 
... 

使用所有characters..not號碼和字符。

而與一個或一個事.. for(i=0;i<(int) input.length();i++)

2

在行:

for (int i = 0; i < input.length(); i++) ... 

input.length()返回一個size_t,這是一個無符號類型。 (見http://www.cplusplus.com/reference/string/string/length/

比較有符號和無符號值是不是安全的,這就是爲什麼編譯器會發出警告,請閱讀這篇文章更多關於它在許多其他: A warning - comparison between signed and unsigned integer expressions

要解決它,只需更改爲

unsigned int i = 0 

默認開關殼體將被執行時沒有其它情況下匹配的。例如,你應該在那裏放置一些處理不正確輸入的代碼。

相關問題