2016-04-16 10 views
-2

Ich versuche, dieses Ding richtig funktionieren zu bekommen, aber ich kann es einfach nicht. Zum Beispiel fügt es Hexadezimalzahlen wie F + F = 000000001E hinzu (was ich für richtig halte, oder?), Aber wenn ich versuche, 1D + 1D hinzuzufügen, sobald ich die erste Dezimalzahl (1D) eingegeben habe, kann ich die zweite nicht eingeben Eins (1D) und gibt aus, dass die Summe 000000002E ist.C++ Hexadezimal Taschenrechner Laufzeitfehler

#include <iostream> 
using namespace std; 

void output(char number[]); 
void hex_sum(char hex1[], char hex2[], char sum[]); 

int main() 
{ 
    char answer; 

    do 
    { 

     char hex1[10] = {'0', '0', '0', '0', '0', '0', '0', '0', '0', '0'}; 
     char hex2[10] = {'0', '0', '0', '0', '0', '0', '0', '0', '0', '0'}; 
     char sum[10] = {'0', '0', '0', '0', '0', '0', '0', '0', '0', '0'}; 

     cout << "Enter the first hexadecimal number: \n"; 
     cin >> hex1[0]; 
     cout << "Enter the second hexadecimal number: \n"; 
     cin >> hex2[0]; 

     hex_sum(hex1, hex2, sum); 

     cout << "The sum is: \n"; 

     for(int i = 9; i >=0; i--) 
    { 
     cout << sum[i]; 
    } 

     cout << "\n" << "Would you like to try again? (Y/N)?\n"; 
     cin >> answer; 

    } while(answer == 'Y' || answer == 'y'); 

    cout << "Good-bye! \n"; 

    return 0; 
} 

void hex_sum(char hex1[], char hex2[], char sum[]) 
{ 
    int x, y; 
    int carry = 0; 
    int other_carry = 0; 

    for(int i = 0; i < 10; i++) 
    { 
     if('0' <= hex1[i] && hex1[i] < '0' + 10) 
      x = hex1[i] - '0'; 

     else 
      x = hex1[i] - 'A' + 10; 

     if('0' <= hex2[i] && hex2[i] < '0' + 10) 
      y = hex2[i] - '0'; 

     else 
      y = hex2[i] - 'A' + 10; 

     carry = other_carry; 

    int z; 

     z = (x + y + carry) % 16; 
     other_carry = (x + y + carry)/16; 

     if(0 <= z && z < 10) 
      sum[i] = char('0' + z); 

     else if(10 <= z && z < 16) 
      sum[i] = char('A' + z - 10); 
    } 

    if(1 == carry && 1 == other_carry) 
     cout << "Addition overflow.\n"; 
} 

Wenn ich entfernt die [0] von

cout << "Enter the first hexadecimal number: \n"; 
cin >> hex1[0]; 
cout << "Enter the second hexadecimal number: \n"; 
cin >> hex2[0]; 

es mir die zweite 1D aber Ausgänge können eingeben, die das Ergebnis der 1D + 1D 00000000A2 ist, statt 000000003A. Wenn ich das tue, ist auch die Ausgabe für Hexadezimalzahlen, die aus nur einem Buchstaben wie F + F besteht, falsch. Anstelle von F + F = 000000001E bekomme ich 000000000E.

+0

Warum lesen Sie in ein Zeichenfeld, wenn Sie tatsächlich Zahlen als Eingabe haben möchten? Überprüfen Sie den E/A-Manipulator ['std :: hex '] (http://en.cppreference.com/w/cpp/io/manip/hex). –

Antwort

0

Da Sie char als Datentyp haben, liest es die ersten zwei Buchstaben Ihres Geschriebenen ein (in diesem Fall 1 und D) und speichert sie in den zwei verschiedenen Arrays. Versuchen Sie stattdessen, die Zeichenfolge zu verwenden.

-1

Das Problem ist in der Art, wie Sie die Eingabe nehmen, Sie verwenden Array von CHAR, die nur einen Wert zu einer Zeit nehmen kann, wenn Sie 2-stellige Zeichen eingeben, speichern Sie die 2. Stelle in 2. Array (dh hex2 [0 ]). versuch FF es gibt dir 000000001E (wie F + F). Um es richtig zu machen, sollten Sie eine Bedingung hinzufügen, dass, wenn ein Benutzer nicht zwei Zeichen eingibt, das zweite Element im Array als null setzt (d. H. Hex1 [1] = '\ 0').