0

テキストを含むファイルを読み取る非常に単純なプログラムがあります。

start
costam
stop

プログラムは次のとおりです。

#include <iostream>
#include <fstream>

using namespace std;

int main (int argc, const char * argv[])
{
printf("init\n");

char c = NULL;

ifstream file;
file.open(argv[1]);

while (file.good()){
    c = file.get();
    printf("%c", c);
}

return 0;
}

コンソールから初期化されたxcodeビルドは次のようになります。

init
start
costam
stop?

しかし、xcodeコンソールは私に:

init

また

init
start

また

init
start
costam

または時々何も。それにパターンはありません。Xcode4.2でSnowLeopardを使用しています

4

2 に答える 2

0

最初にバグを修正します

while (file.good()){
    c = file.get();
    printf("%c", c);
}

する必要があります

for (;;){
    c = file.get();
    if (!file.good())
        break;
    printf("%c", c);
}

読む前ではなく、読んだfile.good() にだけチェックする必要があるからです。これは偽物を取り除きますか?最初の出力に表示されます。それが主な問題に役立つかどうかはわかりません。おそらくそうではありません。

于 2013-03-25T15:01:11.387 に答える
0

printf CI / O( et al)とC ++ I / O( )を混在させないでくださいifstream。これを試して:

int main (int argc, const char * argv[])
{
    cout << "init" << endl;

    char c;

    ifstream file;
    file.open(argv[1]);

    while (file.good()) {
        c = file.get();
        cout << c;
    }

    cout << endl;

    return 0;
}
于 2013-03-25T15:01:46.397 に答える