2011-12-28 22 views
0

最終的に私のコマンドラインの1つの引数、つまり1つのファイルで動作するようになったこのコードは、無制限の数のファイルで動作するコンセプトで設計されています。それは、スペースで区切られた単語を含むX個のXファイルを取り、空白を\ nに置き換えて単語のリストを作成することです。しかし、それは正常に最初の議論を完了する、それは私が2つ、または3つを追加すると、実際にこの作業をしたいと思う欠陥をseg!2つ以上のコマンドライン引数?

PS。これは同じコード上の2つの他の投稿から続きます。これは宿題の仕事ではなく、私は現在Uniから離れており、私たちの講義に先立ってCファイルI/Oを実験しています。

#include <stdlib.h> 
#include <ctype.h> 
#include <string.h> 
#include <stdio.h> 

int main(int argc, char** argv) { 
FILE *fpIn, *fpOut; 
int i, j; 
j = 1; 
int c; 
char myString[256]; 

printf("%d", argc); 
printf("\n"); 
printf("The following arguments were passed to main(): "); 
      for(i=1; i<argc; i++) printf("%s ", argv[i]); 
printf("\n"); 

while(argc--) { 
    for(i = 1; i <= argc; i++) { 
     fpIn = fopen(argv[j], "rb"); 
     snprintf(myString, 256, "%s~[%d]", argv[j], i); 
     fpOut= fopen(myString, "wb"); 
     while (1) { 
      c = fgetc(fpIn); 
      if (c == EOF) 
       break; 
      if (isspace(c)) 
       c = '\n'; 
      fputc(c, fpOut); 
     } 
     j++; 
    } 
} 
return 0; 
} 
+0

ネストされたwhile-for-loopストレートを取得すると、ソリューションに到達します。 'while'を完全に削除し、' for'ループの反復インデックスを使用します。 – thiton

+0

なぜwhile(argc - )とfor(i = 1; i <= argc; i ++)の両方がありますか? – Francois

答えて

2

同じことをする2つのループがあるようです。

while(argc--) { 
for(i = 1; i <= argc; i++) { 

実際には、引数を反復処理するためには1つのループしか必要ありません。 whileループを使用する場合は、argvのインデックスとしてargcまたはjを使用します。あなたがより巧妙な方法であるforループを使用する場合は、forループ引数iをargvのインデックスとして使用します。

+0

ありがとう、あなたはそれを信じられないほど明白にしました! – PnP

2
for(i = 1; i <= argc; i++) 

for(i = 1; i < argc; i++) 

する必要がありますはい、私はあなたが1から始めて知っているが、argv[0]は、プログラムの起動名であると考えられるためです。