2013-03-25 36 views
0

我有一個非常簡單的程序,讀取一個文件包含文本: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

回答

0

首先修正錯誤

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

0

您確實不應該將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; 
}