1

ユーザーがファイルを入力する必要があり、ユーザーが存在するファイルを入力している限り、ファイルはループします。ユーザーが存在しないファイルを入力すると、プログラムが中断します。

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

int main()
{
    string currentfile;
    int i = 0;
    do {
        cout << "Please enter a file name \n";
        cin >> currentfile;
        cout << currentfile << "\n";
        ifstream myfile(currentfile);
        if (myfile.good())
        {
            // display thenumber of characters, words, and lines in that file
            myfile.close();
        }
        else {
            cout << "break";
            break;
        }
        i++;
    } while(true);
    // repeat while user enters valid file name
}

存在するファイルを入力すると、myfile.good()良い結果が返され、存在しないファイルを入力しようとすると、myfile.good()再び true が返されます。プログラムを起動して最初に試してみると、存在しないファイルthen myfile.good()は false を返します。

myfile.good()有効なファイルを入力した後も true を返し続ける理由がわかりません。

4

1 に答える 1

2

確認したいのはこれです:

ifstream myfile(currentfile);
if (myfile) // myfile.is_open() is fine too...
{
    // display thenumber of characters, words, and lines in that file
    myfile.close();

}
else {
    cout << "break";
    break;
}

良い() :

ストリームが入出力操作の準備ができているかどうかを確認します。他のメンバー関数は、ストリームの特定の状態を確認するために存在します (それらはすべて bool 値を返します)。

状態フラグをチェックします。

ファイルが正常に開かれたかどうかをテストするには、次を使用します。

myfile.is_open()

そして、そうであれば、eof()、...、または good() のようなチェックを実行します。

例 :

ifstream myfile(currentfile);
if (myfile.is_open())
{
    while ( myfile.good() ) // while ( !myfile.eof() ), ...
    {
        getline (myfile,line);
        cout << line << endl;
    }
    myfile.close();
}

詳しくはこちら

于 2013-06-12T00:18:43.077 に答える