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

或者有时什么都没有。它没有模式。我正在使用带有 Xcode 4.2 的 Snow Leopard

4

2 回答 2

0

首先修复bug

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

您真的不应该将 CI/O(printf )与 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 回答