0

この関数は、ファイルの各行を読み取り、それをユーザー入力文字列と比較して、一致するかどうかを確認することになっています。基本的に、ファイル内の情報の重複を防ぎます。とにかく、プログラムは「if (loginsFile.is_open())」ステートメントに入らず、その理由がわかりません。

fstream loginsFile;
loginsFile.open("C:/logins.txt", ios::in | ios::out | ios::trunc | ios :: app | ios:: ate);

string username;
string password;
string info;
bool exists = true;
CheckingAccount cA;
SavingsAccount sA;

do {
    cout << "Enter Username: ";
    cin >> username;
    cout << "Enter Password: ";
    cin >> password;
    cout << endl;
    info = username + " " + password;
    if (loginsFile.is_open()){
        while (loginsFile.good()){
            string line;
            getline(loginsFile, line);
            cout << "line is " << line.substr(line.find_last_of(" ")) << "\n" << "info is " << line.substr(line.find_last_of(" "));
            if (line.substr(line.find_last_of(" ")) == info.substr(0, info.find_last_of(" "))){
                exists = false;
                cout << "Username already exists!" << endl << "Program is not case sensitive!";
            } //end if
        } //end while
    } //end if
} while (exists == true); //end do while

loginsFile << info << endl;
loginsFile.close();
logins[info] = make_pair(cA, sA);
cout << info.substr(0, info.find(' ')) << " Has Been Successfully Registered!" << "\n" << "\n";
return logins;
4

3 に答える 3

2

ファイルが開かれていないため、if ステートメントが入力されていません。「std::ios::trunc」(すべての内容を削除するファイルの切り捨て) と「std::ios::app」(ファイルの末尾に追加) は互いに矛盾するため、これらを組み合わせることができないため、ファイルが開かれていません。

于 2013-06-17T02:16:14.280 に答える
0

このリンクを確認してください: http://www.cplusplus.com/reference/fstream/fstream/open/ セクション モードでは、次のように表示されます: モードに trunc と app の両方が設定されている場合、開く操作は失敗します。いずれかが設定されていて out が設定されていない場合、または app と in の両方が設定されている場合にも失敗します。

于 2013-06-17T02:52:41.037 に答える
0

open() を呼び出した後、failbit を確認します。設定されている場合、open op は失敗しました。おそらく、パスのスラッシュが問題を引き起こしていますか?

于 2013-06-17T01:35:05.363 に答える