[英]Using Array as parameter in function in C++
該程序獲取兩個十六進制數字並將它們轉換為十進制數字。 它最終以十進制形式返回兩個數字的總和。 在我輸入“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
數組只包含一個元素,加上'\\0'
字符。 如果你嘗試用cin
讀取一個雙字符數組(即1a
),你將有一個未定義的行為 。 這個例子可能會給你一些關於'\\0'
提示
const char *example1 = "hi";
strlen(example1); // This is 2
const char *example1 = "hi\0";
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);
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.