>conhead test.c -n5で→test.c ファイルの中身を先頭から5行表示するプログラムで >conhead test.cとしたとき、デフォルトで10行表示したいのですが、うまくいきません。main()のelse if(argc<3)を書き換えればいいと思うのですが、どのようにすればいいでしょうか。 コード #include <stdio.h> #include <stdlib.h> // exit()のため必要 #include <string.h> int put_data(int m) { FILE *fin; FILE *fout; char InputFileName[256]; // 読み込みファイル名 char OutputFileName[256]; // 書き出しファイル名 char textbuffer[512]; // テキストを読み込む作業用文字列 int line_no=1; printf("読み込みファイル名 : "); gets(InputFileName); // 読み込みファイル名の取得 printf("書き出しファイル名 : "); gets(OutputFileName); // 書き出しファイル名の取得 fin=fopen(InputFileName,"r"); if (fin==NULL) { printf("can't open file <%s>\n",InputFileName); exit(1); //ファイルオープンエラーで緊急停止 } fout=fopen(OutputFileName,"w"); if (fout==NULL) { printf("can't open file <%s>\n",OutputFileName); exit(1); //ファイルオープンエラーで緊急停止 } while (line_no < m) { fgets(textbuffer,512,fin); //ファイル読み込みエラーでない限り //fgets(textbuffer,512,fin)とはファイルfinから一行読み込み, //文字配列textbufferに保存しなさいの意味。 //ただし,文字列長制限があり511文字まで fprintf(fout,"%04d %s",line_no,textbuffer); fprintf(stdout ,"%04d %s",line_no, textbuffer ); line_no++; } m=0; fclose(fin); fclose(fout); return 0; } void copy(FILE *src, FILE *dst); // srcが指す文字列をdstが指す配列にコピーする。 int max = 11; int main(int argc,char* argv[]) { char *max,*max1; int m; FILE *fp; if(argc<2) { copy(stdin, stdout); // コマンドライン引数が1のとき } else if(argc<3) { // コマンドライン引数が2のとき fp =fopen(argv[1], "r"); copy(fp, stdout); fclose(fp); } else if(argc<4) { // コマンドライン引数が3(C:\Users\username\chap09\kadai>conhead abc.c -n5)のとき m=strlen(argv[2]); if(m==3){ max=&argv[2][2]; m=*max-'0'; printf("mは「%d」です\n",m); ++m; } if(m==4){ max =&argv[2][2]; max1=&argv[2][3]; m=*max-'0'; m =m*10 + *max1-'0'; printf("mは「%d」です\n",m); ++m; } put_data(m); } return 0; } void copy(FILE *src, FILE *dst) // srcが指す文字列をdstが指す配列にコピーする。 { int ch; int i; int max; while ((ch = fgetc(src)) != EOF) { fputc(ch, dst); if(ch == '\n') //改行をカウント i++; if(i == max) break; } } /* 実行時のコンソール画面 C:\MinGW\users\chap09\kadai>gcc -I. -o kad9-5 kad9-5.c pdcurses.a C:\MinGW\users\chap09\kadai> kad9-5 a.c -n8 mは「8」です 読み込みファイル名 : a.c 書き出しファイル名 : b.txt 0001 /*プログラムソースファイルを行ごとに読み込んで,行頭に行番号 をつけて,テキストファイルに書き出す。 0002 0003 あらかじめチェック用プログラムソースファイル「a.c」をテキス トエディタでつくってから実行し, 0004 「b.txt」が出来たことを確認して,テキストエディタで「b.txt」 を見るとよい。 0005 0006 関数fgets()は,ファイルから一行を読み込み文字列にする。 0007 一行とは,改行文字があるところまでの文字列。 0008 C:\MinGW\users\chap09\kadai>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/11/02 12:03
2017/11/02 12:14