在C++函数中使用数组作为参数

Using Array as parameter in function in C++

本文关键字:数组 参数 C++ 函数      更新时间:2023-10-16

该程序获取两个十六进制数并将它们转换为十进制数。它最终以十进制形式返回两个数字的总和。 在我输入"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;
}

原因是什么? 是什么让这种情况发生? 我能做什么或应该做什么来解决这个问题?

正如其他人所提到的,您的char数组只包含一个元素,外加''字符。如果您尝试使用cin两个字符数组(即1a(您将有一个不确定的行为。此示例可能会为您提供一些有关''的提示

const char *example1 = "hi";
strlen(example1); // This is 2
const char *example1 = "hi";
strlen(example1); // This is also 2

但是回答您的问题,如果您只想读取 2 位十六进制值,char num1[3]应该可以解决问题。

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

我想这是一个教学示例,因此您可能想玩一些代码,例如能够将任何数字转换为十进制。也许你可以用这样的东西修改你的函数convert

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