Xcode中给出了不同的输出,在每个时间(但不正确的输出)

Xcode中给出了不同的输出,在每个时间(但不正确的输出)

问题描述:

我有一个非常简单的程序,读取一个文件包含文本:Xcode中给出了不同的输出,在每个时间(但不正确的输出)

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

首先修正错误

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

应该

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

,因为你只应该阅读,而不是之前后检查file.good()。这将摆脱虚假?你会在你的第一个输出中看到。它是否会帮助解决我不知道的主要问题。可能不会。

+0

谢谢你。它解决了整个问题。但这真的很奇怪。 – user2207925 2013-03-25 15:05:50

+0

@ user2207925我很惊讶。 – john 2013-03-25 15:19:58

您确实不应该将C I/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; 
}