2011-11-11 73 views
0

我想用Visual Studio編譯一個C++軟件。C++:讀取文件時程序卡住了。爲什麼?

要運行我用這個命令行程序:

ABC 0.85 x.txt < x.txt 

該軟件是這樣的:

int main(int argc, char ** argv) 
{ 
//main variables 
float min_sup = atof(argv[1]);   //minimum support 
string filename = argv[2];    //input file name 

cout << "Hello" << argv << " " << endl; 

if(argc < 2) 
{ 
    cout << "[Error] Usage: <min> <input file> < <input file>" << endl; 
    cout << "E.g: ./ABC.exe 0.85 input.txt < input.txt" << endl; 
    system("PAUSE"); 
    return 1; 
} 

//checking min_sup value 
if(min_sup <= 0 || min_sup >= 1) 
{ 
    cout << "[Error] Minimum must be between 0 and 1 exclusively." << endl; 
    system("PAUSE"); 
    return 1; 
} 

int in_buf; 
while(cin >> in_buf) 
{ 

    ..... 

當我運行的軟件,它會卡在:

while(cin >> in_buf) 

你知道什麼問題?它是如何讀取文件的問題?

我在Windows 7 64位上運行代碼。

+0

x.txt的內容會有幫助。 – themel

+0

x.txt是一個很大的文本文件。每行都是一個整數列表。例如,一行可以是:「12 14 15 19 20」。我知道程序在這個時候的第一行卡住了,因爲我使用了調試器,調試器卡在那裏。當我從命令行運行程序時,它也會卡住。 – Phil

+1

我想知道如果問題是由於「<」重定向操作符 – Phil

回答

0

該文件存在一些問題。我發現了這個問題。

+0

您是否願意分享您如何解決問題? – reima

+0

嗯抱歉...我以爲我解決了這個問題。但問題仍然存在... – Phil

+0

在視覺工作室,它的工作原理。但在Eclipse CDT中它不起作用。它必須是一些配置問題或Eclipse的一些錯誤。我在Windows 7 64位上使用Eclipse CDT。 – Phil

1
ABC 0.85 x.txt < x.txt 
       ^

您有額外的空間。你正在傳遞程序三個參數。你需要兩個參數和一個流重定向。

ABC 0.85 x.txt <x.txt 

您可以顯示argc來驗證這一點。

爲什麼程序需要「x.txt」參數的文件名?我想不出你需要它的任何理由。 另外,你不應該讀取參數,直到您驗證計數。

+0

在給出的代碼中,他只看到前兩個。但是,絕對是一個問題。 – rcollyer

+0

我計數3個參數。 '<'是Windows(命令行)和Linux上的管道或重定向符號。另外,我的理解是,操作系統跳過「額外」空間,包括「<」之後的空格。 –

+0

操作系統可能會跳過額外的空間,但我不確定,看起來好像它不會,它會導致所描述的錯誤。 –

相關問題