0

私は長い間ここに潜んでいました.これが私が尋ねなければならなかった最初の質問であったとしても、過去にあなたのすべての助けに感謝します.

単純なデータベース プログラムを作成しようとしていますが、その検索要件に行き詰まっています。検索時に値がわからない場合、ユーザーは疑問符を入力できる必要があります。映画が 90 年代のものであることがわかっている場合、199 と入力できますか? 199_ に一致するすべての映画が検索されます。コンパイル時にエラーが発生し続けます。「引数 '2' の'char*' を 'char ( )[5] に変換できません」デバッグを容易にするために、関数を分離して、メイン ファイルに追加する前に別の .cpp ファイルで動作させるのが好きです。

#include <iostream>
#include <cstring>
#include <fstream>
#include <cctype>
using namespace std;

const int yearLength = 4;
typedef char year[yearLength + 1];

bool compareYears(const year year1, year year2[]);

int main()
{
    year year1 = "1992"; //year from database, will be assigned the 
                         //  variable when implemented in main program. 
    year year2;          //year entered by user, it will be compared to year1.

    cout << "Enter a year to search for: ";
    cin >> year2;
    cout << endl;

    if((compareYears(year1, year2)) == true)
        cout << "they match\n";
    if((compareYears(year1, year2)) == true)
        cout << "they do not match\n";

    return 0;
}

bool compareYears(const year year1, year year2[])
{
    for(int i = 0; i < 4; i++)
    {
        if (strncom(year1, year2[i], 4) ==0)
            return true;
        else if (strncmp(year1, "????", 4) == 0)
            return true;
        else
            return false;
    }
}

これについて私を助けてくれてありがとう、通常、私が他の人から得るほとんどの助けは役に立たないか侮辱的です. 私が最も助けを必要としているのは、そのコンパイラ エラーを取り除くことです。私は私の人生のためにそれを理解することはできません。

4

3 に答える 3

1

これらの行を変更するだけで機能します...関数宣言には年の配列が必要で、変数を渡そうとしています..

if((compareYears(year1, &year2)) == true) //this changed from year2 to &year2
cout << "they match\n";
if((compareYears(year1, &year2)) == true) //this changed from year2 to &year2
cout << "they do not match\n";
于 2013-12-04T08:25:32.497 に答える
1

まずこれを読んでください:typedef固定長配列

次に、次の typedef を使用します。

typedef struct year { char characters[4]; } year;

コードを次のように変更します。

int main()
{
    year year1; 
    year1.characters= "1992"; //year from database, will be assigned the variable when implemented in main program. 
    year year2;          //year entered by user, it will be compared to year1.

    cout << "Enter a year to search for: ";
    cin >> year2.characters;
    cout << endl;

    if((compareYears(year1, year2)) == true)
        cout << "they match\n";
    else
        cout << "they do not match\n";

    return 0;
}

bool compareYears(year year1, year year2)
{
    if (strncom(year1.characters, year2.characters, 4) ==0)
        return true;
    else if (strncmp(year1, "????", 4) == 0)
        return true;
    return false;
}

いくつかの論理的なバグも修正しました

于 2013-12-04T08:12:52.053 に答える