2016-04-16 23 views
-2

私はこのことを正しく動作させようとしていますが、私はできません。たとえば、F + F = 000000001Eのような16進数を追加します(私は正しいと思いますが)?1D + 1Dを追加しようとすると、最初の10進数(1D)を入力すると、 1(1D)であり、その合計が000000002Eであることを出力する。C++ 16進計算の実行時エラー

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

Iを削除した場合、それは私が代わり000000003Aの、第1Dしかし1D + 1Dの結果は00000000A2ある出力を入力でき

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

から[0]。もしそうすれば、F + Fのような1文字のみからなる16進数の出力も間違っています。 F + F = 000000001Eではなく、000000000Eを取得します。

+0

数字を入力として実際に使用したい場合は、文字配列を読み込むのはなぜですか? ['std :: hex'](http://en.cppreference.com/w/cpp/io/manip/hex)I/Oマニピュレータを確認してください。 –

答えて

0

データ型としてcharがあるので、書いたものの最初の2文字(この場合は1とD)を読み込み、2つの異なる配列に保存します。代わりにstringを使用してみてください。

-1

問題は入力を取る方法です。一度に1つの値しか取ることのできないCHARの配列を使用しているので、2桁の文字を入力すると2番目の桁が実際に2番目の配列に格納されます(つまりhex2 [0 ])。FFを試してみると、000000001E(F + Fと同じ)が返されます。それを修正するには、ユーザーが配列の2番目の要素をヌル(すなわち、hex1 [1] = '\ 0')に設定するよりも2桁のcharを入力しない場合、2番目の入力桁が同じようになるという条件を追加する必要があります。

関連する問題