C言語を使いUNIXやLINUXのls, cd, wcのようなコマンドをじぶんで作成しようとしています。現在やっているのは wc file のようなコマンドを実行した時に 3 3 25 という結果を返す関数を作ろうとしています。返り値の数字は左から行、単語数、バイト数です。以下のコードが自分で作成しているものですが、最初の行数以外が現状は正しい結果を返していません。
試したこととしては単語数の計算についてはスペース、改行、タブを確認し数えようとしていますが、結果は常に0となってしまいます。以下の写真が実行例です。
バイト数の計算についてはfseek関数を使いファイル中のバイト数をしゅとくしようとしました。
ファイル中の単語数の計算、バイト数の計算についてアドバイスをいただけますと幸いです。
宜しくお願いします。
C言語
1int smallsh_wc(char **args){ 2 // Declaring the file pointer 3 FILE *fp; 4 char buffer[2000]; 5 int line = 0; //int word = 0; 6 int count = 0; 7 8 // check file is open or not 9 if((fp = fopen(args[1], "r")) == NULL){ 10 printf("can not open file. %s\n", args[1]); 11 exit(2); 12 } 13 14 // fgets read 1 line by stream 15 /* count the line in the file */ 16 while(fgets(buffer, 2000, fp) != NULL){ 17 line++; 18 } 19 printf("%d ", line); 20 21 /* count the word in the file */ 22 while(fgets(buffer, 2000, fp) != NULL){ 23 if(fgets(buffer, 2000, fp) == ' '){ 24 count++; 25 } 26 if(fgets(buffer, 2000, fp) == '\n'){ 27 count++; 28 } 29 if(fgets(buffer, 2000, fp) == "\t"){ 30 count++; 31 } 32 } 33 printf("%d ", count); 34 35 fseek(fp, SEEK_SET, SEEK_END); 36 printf("%d \n", args[1], ftell(fp)); 37 38 fclose(fp); 39 return 1; 40}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/01 11:36