0

ファイル 'database2' が空で、ファイル名が変更されていないのはなぜですか? コメントで問題が記載されている部分以降、ファイル「database2」が 0 バイトになります。ファイル 'database2' の名前も変更されておらず、ファイル 'database' は削除されていません。私を助けてください、ここに私のコードの一部があります:

int edit(){
    char KeyStroke;
    std::string strings;
    string name;
    string name1;
    std::string dummy;
    std::string strings2;
    std::string strings3;
    ifstream myfile;
    ofstream myfile1;
    bool found = false;

    myfile.open("database");
    cout << endl << "What is the name of the contact you wish to go in detail?" << endl;
    getline(cin, name);
    while ( !found && getline (myfile ,strings) ) {
        if (strings.find(name) != std::string::npos) {
            cout << endl << "Name:\t\t" << strings<<endl;
            std::getline( myfile, strings );
            cout << "Address:\t" << strings<<endl;
            std::getline( myfile, strings );
            cout << "Handphone:\t" << strings;
        }
    }

    start:
    cout << endl <<endl;
    cout << "What do you wish to edit?"<<endl;
    cout << "1) Name"<<endl;
    cout << "2) Address"<<endl;
    cout << "3) Handphone"<<endl;
    cout << "4) Nothing" << endl;
    myfile.close();


/*--Main part of this code is from here onwards--*/

    lol:
    myfile.open("database");
    myfile1.open("database2");
    KeyStroke = getch();
    switch(KeyStroke){
        case '1':
            cout << "What is the new name: ";
            getline(cin, name1);
            while ( !myfile.eof()) {
                getline (myfile ,strings);
                if (strings.find(name) != std::string::npos) {
                    myfile1 << name1 << endl;
                }
                else{
                    if(strings[0] == ' '){
                        continue;
                    }
                myfile1 << strings << endl;
                }
            }
        myfile1 << " ";
        myfile1.close();        /*Once the file closes here, the data written in earlier dissapears*/
        myfile.close();
        remove("database");
        pause1();
        rename("database2","database");
        goto start;
4

1 に答える 1

3

これが起こっていることです:

「開始」ラベルと最後に goto を使用して「ループ」が進行しています。したがって、これはループの最初の部分になります。

    cout << endl <<endl;
    cout << "What do you wish to edit?"<<endl;
    cout << "1) Name"<<endl;
    cout << "2) Address"<<endl;
    cout << "3) Handphone"<<endl;
    cout << "4) Nothing" << endl;
    myfile.close();


/*--Main part of this code is from here onwards--*/

    lol:
    myfile.open("database");
    myfile1.open("database2");
    cin.get (&KeyStroke,256);

ループの最初の部分で、「database」と「database2」という 2 つのファイルを開く/作成することを確認してください (まだ存在しない場合は、ofstream open メソッドがファイルを作成することに注意してください)。次に、ユーザー入力を待ちます。

ユーザーが 1 を押して名前を変更するとします。case 1 ステートメントの最後に次のように記述します。

        myfile1 << " ";
        myfile1.close();        /*Once the file closes here, the data written in earlier dissapears*/
        myfile.close();
        remove("database");
//      pause1(); // undefined
        rename("database2","database");
        goto start;

ファイルを閉じ、データベースを削除し、databese2 の名前をデータベースに変更すると、意図したとおりに機能します。次に、goto を使用して「ループ」の先頭に戻り、コードのこの部分を再度実行します。

cout << endl <<endl;
cout << "What do you wish to edit?"<<endl;
cout << "1) Name"<<endl;
cout << "2) Address"<<endl;
cout << "3) Handphone"<<endl;
cout << "4) Nothing" << endl;
myfile.close();

lol:
myfile.open("database");
myfile1.open("database2");

データベースファイルを開き、古いデータベース2の名前をデータベースに変更したため(データベース2は現在存在しません)、新しいデータベースが作成されます(もちろん空です)。

それが役に立てば幸い。

于 2012-12-24T11:39:05.160 に答える