2017-02-09 72 views
1

我通過三個參數傳遞給我的程序,這是所有的文本文件: ARG 1:一個 ARG 2:二 ARG 3:三爲什麼我的代碼打印兩次相同的命令行參數?

爲什麼ARG 1被打印了兩次?

#include <iostream> 
#include <fstream> 
using namespace std; 

int main(int argc, char *argv[]) 
{ 
if(argc < 2)  //check if files exist 1st 
{ 
    cout << "usage: " << argv[0] << " <filename>\n"; 
} 
else  //proceed if files exist 
{ 
    for(int x = 1; x < argc; x++)  //while x < the argument count, read each argument 
    { 
     ifstream infile; 
     infile.open(argv[x]); 
     if(!infile.is_open())  //check is file opens 
     { 
      cout << "Could not open file." << endl; 
     } 
     else  //if it opens, proceed 
     { 
      string s; 
      while(infile.good()) 
      { 
       infile >> s;  //declare string called s 
       if(s[s.length()-1] == ',')  //if the end of the arg string has a ',' replace it with a null 
       { 
        s[s.length()-1] = '\0'; 
       } 
       cout << s; 
       if(x != (argc -1)) 
       { 
        cout << ", "; 
       } 
      } 
     } 
    } 
    cout << endl; 
} 
return 0; 
} 

此代碼輸出:

一個,一個,兩個,三個

+2

當您使用** **調試器,這說法導致了問題?變量的值是什麼? –

+0

而不是'while(infile.good())',使用'while(infile >> s)'。 –

+0

如果你只是**傳遞一個字符串**爲什麼打開一個**文件** ** –

回答

1

你的錯誤

  cout << s; // here 
      if(x != (argc -1)) 
      { 
       cout << ", "; 
      } 

如何解決

  cout << s; 
      s = ""; // fix 
      if(x != (argc -1)) 
      { 
       cout << ", "; 
      } 

您只需將流兩次放入的s字符串。而已。


短代碼爲您的目的:

std::ostringstream oss; 
    for(std::size_t index = 1; index < argc; ++ index){ 
     oss << std::ifstream(argv[ index ]).rdbuf() ? assert(1==1) : assert(1==0); 
    } 
    std::cout << oss.str(); 

輸出

one 
two 
three 
+1

謝謝你的答覆。我試過你的建議,輸出成爲:一,二,三 – DoABarrelRoll94

+0

編輯:Nvm,我必須在文本文件 – DoABarrelRoll94

+0

@ DoABarrelRoll94中增加一個額外的空間。如果它解決了您的問題,請批准該帖子。謝謝。 [當有人回答我的問題時,我該怎麼辦?](http://stackoverflow.com/help/someone-answers) –