0

以前にも同様のコードを投稿しましたが、これは別の問題だと思います。実行コードが「infile open」を超えない理由がわかりません。("-e" は出力しますが、"-d" は出力しません) ファイルを開こうとしています。コマンド ライン オプションを使用して、特定の倍数の文字を出力するかどうかを判断します。

たとえば、a.out -d 2 < sample.txtは 2 文字おきに出力します。

int main (int argc, char *argv[])
{
   ifstream infile; 

   if (infile.good())
      printf("infile open \n");

   int c;    
   int number = 0;
   int count = 0; 


   string str1 = argv[1];
   string str2 = "-d";
   string str3 = "-e";


   if (str1.compare(str2) == 0)
   { 
      printf("entered -d\n");
      c = infile.get();       

         while(!infile.eof()) {

             number = atoi(argv[2]);  

              if (count == number)
            {
              cout.put(c);
                      count = 0;
                }
                  else
                      count++;

             c = infile.get();         

}//end while 

}//end if

           if (str1.compare(str3) == 0)       
                printf("entered -e\n");


}//end main
4

2 に答える 2

4

infile開かれることはありません:

ifstream infile; // Does not open a file as no file name is supplied.

別のコマンドライン引数として使用cinまたは渡し"sample.txt"、それを開きます。

ifstream inFile(argv[3]);
if (inFile.is_open())
{
}

その他のポイント:

  • std::coutを混合する代わりに使用します。printf()std::cout
  • atoi()0引数が無効な場合、または引数が有効な場合に戻ります0。別の方法については、を参照strtol()してください。
  • argv[2]のすべての反復で変換する理由はありませんwhile。の前に一度だけ実行してくださいwhile
  • argcの要素にアクセスする前に必ずチェックargvして、無効なメモリ アクセスを回避してください。
  • std::stringインスタンスは を使用して比較できますoperator==
于 2012-11-29T08:08:09.630 に答える
0

コマンド ラインで次のようなものを実行する場合: "a.out < sample.txt"、開くために指定された実際のファイル名はありません。Unix の "<" コマンドは、sample.txt の内容を a.out に渡すだけです。標準入力経由...したがって、hmjdが指摘したように、cinを使用する必要があります。ファイルが引数として指定された場合、つまり「a.out < sample.txt」ではなく「a.out sample.txt」の場合は、ファイルを物理的に開きたいと思うでしょう。

于 2012-11-29T10:14:41.157 に答える