2016-10-24 1 views
2

donc j'eu cette mission d'écrire un programme C++ qui convertit binaire, octal ou hexadécimal en décimal, que je l'ai fait, et voici mon code:binaire, octal, Hexadécimal au programme décimal

#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; 
} 

Maintenant, cela fonctionne parfaitement bien pour moi, mais il donne une erreur de compilation à mon professeur (et il ne dit pas pourquoi). Je me suis cogné la tête contre le mur pendant quelques jours et je n'arrive toujours pas à comprendre ce qui ne va pas. Est-ce que quelqu'un pourrait m'aider avec ça?

+4

S'il ne dit pas pourquoi, c'est à peine juste. Comment compilez-vous? Peut-être que nous pouvons suggérer si vous utilisez une option inhabituelle. – BoBTFish

+1

Peut-être lui demander le compilateur et l'OS qu'il utilise? –

+2

Quels sont votre compilateur/options? Quels sont tes professeurs? – wasthishelpful

Répondre

3

Votre problème est que lors de l'appel de ces fonctions pow(), une conversion implicite s'est produite pour le second paramètre (de size_t à double). L'ajout de static_cast devrait aider.

Pour voir le problème vous-même, compiler votre code avec

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