ファイルの内容の表示
実行時のコマンドライン引数で指定したファイルの内容を、行番号付きで画面に表示するプログラムを作る
という問題です。ヒントも与えられています。
行番号付きの表示、コマンドライン引数の利用。両者を組み合わせればできるはずだ
> main関数の引数にargcとargvを指定して、コマンドライン引数をファイル名として利用する。キーボード入力を促す文(プロンプト)や改行チェックは不要なので書かないこと
> コマンドライン引数が指定されない場合は、メッセージを表示してプログラムを終了
> ファイルの内容を画面表示する処理は、ユーザー定義関数put_file_contentsに記述する。仮引数には文字型のポインタ変数をひとつ指定し、ファイル名を受け渡せるようにする。put_file_contents自体の型は整数型(int)で、正常終了なら返り値0を返すこと。
行番号付きのプログラム#include<stdio.h>
> int put_file(char *filename);
>
> int main()
> {
> char line[50];
> char *ptr;
>
> printf("ファイル名を入力:");
> fgets(line,sizeof(line),stdin);
> ptr = line + strlen(line) - 1;
> if(*ptr == '\n') {
> *ptr = '\0';
> }
>
> put_file(line);
>
> return 0;
> }
>
> int put_file(char *filename)
> {
> FILE *fp;
> char buf[100];
> int line_no;
>
> fp = fopen(filename,"r");
> if (fp == NULL){
> printf("%sを開けません\n",filename);
> return 1;
> }
> line_no = 1;
> while (fgets(buf,sizeof(buf),fp) != NULL){
> printf("%3d: ",line_no);
> printf("%s",buf);
> line_no++;
> }
> fclose(fp);
>
> return 0;
> }
で、コマンドライン引数のプログラムは#include<stdio.h>
void write_key_inputs(char *filiname);
int main(int argc, char *argv[1])
{
write_key_inputs(argv[1]);
return 0;
}
void write_key_inputs(char *filename)
{
FILE *fp;
char buf[100] ;
fp = fopen(filename,"w");
while(fgets(buf, sizeof(buf),stdin) != NULL) {
fputs(buf, fp);
}
fclose(fp);
return ;
}
です。これらを組み合わせて少しいじると出来るみたいなのですが、できていません。ちなみに私が考えたプログラムは
#include<stdio.h>
int put_file_contents(char *filename);
int main(int argc,char *argv[])
{
int i;
if(argc == 1){
printf("コマンドライン引数がありません\n");
return 1;
}
for(i = 0;i<argc;i++)
printf("argv[%d]は「%s」です\n",i,argv[i]);
put_file(i);
return 0;
}
int put_file(char *filename)
{
FILE *fp;
char buf[100];
int line_no;
fp = fopen(filename,"r");
line_no = 1;
while (fgets(buf,sizeof(buf),fp) != NULL){
printf("%3d: ",line_no);
printf("%s",buf);
line_no++;
}
fclose(fp);
return 0;
}
です。コマンドライン引数は表示されるのですが、行番号が表示されません。どうしたらいいでしょうか??