2017-02-18 54 views
0

因此,我正在編寫一個程序,其中多個文件是採用命令行參數。對於一個示例,我在命令提示符處輸出program.exe file1.txt file2.txt。出於某種原因,我的輸出沒有顯示正確的結果。當我輸入兩個文件名時,它只顯示第一個文件名兩次。我附上了截圖。它也不包括字符或字符。我認爲它必須用本地或全局變量來做一些事情,但我已經嘗試過把它們放在所有地方。或者我對自己的錯誤一無所知。我會很樂意提供任何建議。我的程序不會計算行數字或字符propery的數量嗎?

#include <iostream> 
#include <string> 
#include <iomanip> 
#include <fstream> 

using namespace std; 
int i; 
char ch; 
int charcounter=0; 
int wordcounter=0; 
int linecounter=0; 

int main(int argc, char* argv[]) 
{ 
for (i = 1; i < argc; i++){ 

    if (argc<2){ 
    cout<<"you did not enter enough arguments"<<endl; 
    } 
    else { 
     string filename; 
     ifstream thefile; 
     filename=argv[i]; 

     thefile.open(argv[i]); 
     if (thefile.is_open() && thefile.good()) 
     { 
       while (ch!= EOF){ 
        charcounter++; 

        if (ch ==' ') 
        wordcounter++; 
        else if (ch =='\n') 
         linecounter++; 

       ch=thefile.get(); 
       cout<<setw(12)<<"Lines"<<' '<<linecounter; 
       cout<<' '; 
       cout<<setw(12)<<"Words"<<' '<<wordcounter; 
       cout<<' '; 
       cout<<setw(12)<<"Characters"<<' '<<charcounter; 
       cout<<' '; 
       cout<<"filename"<<' '<<argv[i]; 
       thefile.close(); 
      } 
     } 
    } 
} 
} 

enter image description here

回答

2

這裏有很多問題。首先,您正在使用ch而無需初始化。其次,您在閱讀第一個字符後關閉文件流。您可能想要在while (ch!= EOF){...}塊之後打印統計信息和文件名。適當的縮進將有助於使事情更清晰。