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.
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). –