簡體   English   中英

在C ++中使用Array作為函數的參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM