C++ 在C++;

C++ 在C++;,c++,C++,此程序获取两个十六进制数并将其转换为十进制数。它最终以十进制形式返回两个数的和。 在输入“num2”之前,“n1”得到正确的值。 但是在我得到“num2”之后,“n1”变成了0。 我不知道为什么会这样。 请尽快告诉我原因 #include <iostream> using namespace std; class HextoDec { public: void getNum(); int add(); private: char num1[2], num2

此程序获取两个十六进制数并将其转换为十进制数。它最终以十进制形式返回两个数的和。 在输入“num2”之前,“n1”得到正确的值。 但是在我得到“num2”之后,“n1”变成了0。 我不知道为什么会这样。 请尽快告诉我原因

#include <iostream>
using namespace std;

class HextoDec {

public:
    void getNum();
    int add();
private:
    char num1[2], num2[2];
    int convert(char num[]);
    int n1, n2;
};

int main()
{
    HextoDec a;
    a.getNum();
    cout << "Sum of two number is " << a.add() << endl;
}

void HextoDec::getNum() {
    cout << "Enter first number : ";
    cin >> num1;
    n1 = convert(num1);

    cout << "Enter second number : ";
    cout << endl << n1 << endl; // Value of n1 is correct
    cin >> num2;
    cout << n1 << endl; // Problem occurs. Value of n1 becomes 0
    n2 = convert(num2);
}

int HextoDec::convert(char num[]) {
    int j = 16, n = 0;

    for (int i = 0 ; i < 2 ; i++) {
        switch (num[i]) {
        case '0':
            n = n + j * 0; break;
        case '1':
            n = n + j * 1; break;
        case '2':
            n = n + j * 2; break;
        case '3':
            n = n + j * 3; break;
        case '4':
            n = n + j * 4; break;
        case '5':
            n = n + j * 5; break;
        case '6':
            n = n + j * 6; break;
        case '7':
            n = n + j * 7; break;
        case '8':
            n = n + j * 8; break;
        case '9':
            n = n + j * 9; break;
        case 'A':
            n = n + j * 10; break;
        case 'B':
            n = n + j * 11; break;
        case 'C':
            n = n + j * 12; break;
        case 'D':
            n = n + j * 13; break;
        case 'E':
            n = n + j * 14; break;
        case 'F':
            n = n + j * 15; break;
        }
        j = 1;
    }

    return n;
}

int HextoDec::add() {
    cout << "*****" << endl;
    cout << n1 << endl;
    cout << n2 << endl;
    return n1 + n2;
}
#包括
使用名称空间std;
类HextoDec{
公众:
void getNum();
int add();
私人:
char num1[2],num2[2];
int转换(char num[]);
int n1,n2;
};
int main()
{
六角体a;
a、 getNum();

cout正如其他人所提到的,您的
char
数组只包含一个元素,加上
'\0'
字符。如果您尝试使用
cin
两字符数组(即
1a
)阅读,您将有一个未定义的行为。此示例可能会给您一些关于
'\0'
的提示

const char*example1=“hi”;
斯特伦(例1);//这是2
const char*example1=“hi\0”;
斯特伦(例1);//这也是2
但在回答您的问题时,如果您只想读取2位十六进制值,
char num1[3]
应该可以解决这个问题

但是,我想你可能还有另一个问题。只是复制/粘贴了你的代码,如果我只输入
1
,我得到的结果是
16
,但应该是
1
。也许你希望用户输入
01

我想这是一个说教性的例子,因此您可能想玩一下代码,例如,可以将任何数字转换为十进制。您可以使用以下内容修改函数
convert

int HextoDec::convert(char num[]{
int n=0;
int sizeNumber=strlen(num);
对于(int i=sizeNumber-1;i>=0;i--)
{
int j=功率(16,sizeNumber-i-1);
...
}

您的数组
num1
num2
只适合一个字符串。如果您向其中一个字符串输入多个字符,则您将写入超出数组边界的内容,并具有未定义的行为。原因是所有此类字符串都将以null结尾(字符
'\0'
将用于标记字符串的结尾)。这个空终止符当然也需要空格。@Someprogrammerdude这应该是答案