2016-10-24 7 views
2

so hatte ich diese Zuordnung ein C++ Programm zu schreiben, die binäre, oktale oder hexadezimale Zahl in eine Dezimalzahl konvertiert, was ich auch tat, und hier ist mein Code:Binär-, Hexadezimal zu Dezimal Programm

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

long two2ten(string s) 
{ 
    int m = 0; 
    for (size_t i = 0; i < s.size(); i++) 
    { 
     m = 2 * m + (s[i] - '0'); 
    } 
    return m; 
} 

long oct2dec(int n) 
{ 
    long int m = 0, i = 0; 
    while (n != 0) 
    { 
     m = m + (n % 10)* pow(8, i++); 
     n = n/10; 
    } 
    return m; 
} 
long hex2dec(string s) 
{ 
    long result = 0; 

    for (size_t i = 0; i < s.length(); i++) 
    { 
     if (s[i] >= 48 && s[i] <= 57) 
     { 
      result += (s[i] - 48)*pow(16, s.length() - i - 1); 
     } 
     else if (s[i] >= 65 && s[i] <= 70) { 
      result += (s[i] - 55)*pow(16, s.length() - i - 1); 
     } 
     else if (s[i] >= 97 && s[i] <= 102) { 
      result += (s[i] - 87)*pow(16, s.length() - i - 1); 
     } 
    } 
    return result; 
} 

int main() 
{ 
    int k, n; 
    string s; 
    while (cin >> k) 
    { 
     if (k == 2) 
     { 
      cin >> s; 
      cout << two2ten(s) << endl; 
     } 
     else if (k == 8) 
     { 
      cin >> n; 
      cout << oct2dec(n) << endl; 
     } 
     else if (k == 16) 
     { 
      cin >> s; 
      cout << hex2dec(s) << endl; 
     } 
     else 
     { 
      cin >> n; 
     } 
    } 
    return 0; 
} 

Jetzt, es funktioniert vollkommen in Ordnung für mich, aber es gibt Compilation Fehler zu meinem Lehrer (und er sagt nicht warum). Ich habe jetzt seit ein paar Tagen meinen Kopf an die Wand geschlagen und ich kann immer noch nicht verstehen, was falsch ist. Könnte mir bitte jemand damit helfen?

+4

zu sehen, ob er nicht sagen, warum, dass kaum fair. Wie kompilierst du es? Vielleicht können wir vorschlagen, wenn Sie eine ungewöhnliche Option verwenden. – BoBTFish

+1

Kann fragen Sie ihn den Compiler und OS er verwendet? –

+2

Was sind Ihre Compiler/Optionen? Was sind deine Lehrer? – wasthishelpful

Antwort

3

Ihr Problem ist, dass beim Aufruf dieser pow() - Funktionen implizite Konvertierung für den zweiten Parameter (von size_t zu double) passiert ist. Das Hinzufügen von static_cast sollte helfen.

Um das Problem selbst, kompilieren Sie Ihren Code mit

-pedantic -pedantic-errors -Wall -Wextra -Werror -Wconversion