C ++十六进制计算器运行时错误

时间:2016-04-16 17:18:16

标签: c++

我正试图让这件事正常工作但我不能。例如,它添加十六进制数字,如F + F = 000000001E(我认为是正确的,对吗?)但是如果我在输入第一个十进制数字(1D)后尝试添加1D + 1D,则不允许我输入第二个一(1D)并输出和为000000002E。

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

如果我从

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

它允许我输入第二个1D但输出1D + 1D的结果是00000000A2,而不是000000003A。如果我这样做,十六进制的输出只由一个字母组成,如F + F也是错误的。而不是F + F = 000000001E,我得到000000000E。

2 个答案:

答案 0 :(得分:0)

由于您将char作为数据类型,因此它会读入您写入的前两个字母。(在本例中为1和D)并将它们保存在两个不同的数组中。尝试使用字符串。

答案 1 :(得分:-1)

问题在于你输入的方式,你正在使用CHAR数组,它一次只能获取一个值,所以当你输入2位数字时它实际上存储第二个数字在第二个数组(即hex2 [0] ).try FF它会给你000000001E(与F + F相同)。为了使其正确,你应该添加一个条件,如果用户没有键入两位数字,而不是将数组中的第二个元素设置为空(即hex1 [1] ='\ 0'),那么第二个输入相同,希望它对你有帮助。