実行時のコマンドライン引数で指定したファイルの内容を、行番号付きで画面に表示するプログラムを作る
という問題です。ヒントも与えられています。
行番号付きの表示、コマンドライン引数の利用。両者を組み合わせればできるはずだ
> 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;
}
です。コマンドライン引数は表示されるのですが、行番号が表示されません。どうしたらいいでしょうか??
No.2ベストアンサー
- 回答日時:
とりあえず。
> int put_file(char *filename)
はint put_file_contents(char *filename)
だね。
> for(i = 0;i<argc;i++)
> printf("argv[%d]は「%s」です\n",i,argv[i]);
は削除。
> if (fp == NULL){
> printf("%sを開けません\n",filename);
> return 1;
> }
は追加(なぜ消したんだろう?)。
あとは指定したファイルに100文字以上の行があったらまずいね。
>改行チェックは不要なので
ならいいのかな?
指定できるファイルは1つだけかな?
なら
> if(argc == 1){
は
if(argc != 2){
だね。
もし複数指定したいなら。
put_file();
を複数呼ばないとだめだね。
No.3
- 回答日時:
「改行チェック」ってなんだろう.
しかし, このようなプログラムで fgets を使うことに違和感がある. 普通に fgetc を使うものではないかな.
No.1
- 回答日時:
put_file(i);
「i」はいつからファイル名になったの?
put_file(argv[i-1]);
じゃないと、ファイル名が渡らない…。
※「-1」しているのは既にforループでインクリメントされているから。
回答ありがとうございます。
もう一つ聞きたいんですが、これでこの問題の題意は満たされていますか?
今動かしたんですけど、a sで動かしました。
argv[0]はaです
argv[1]はsです
となります。
しかし行番号付きということなので、
1;argv[0]はaです
2;argv[1]はsです
としなければいけないんじゃないでしょうか?
ちなみにこうしなければいけないならば、どのように変えればよいでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# C言語で再起関数とポインタを用いて文字列反転をする方法がわかりません。 4 2023/04/29 20:32
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
csvファイルの読み込みで失敗し...
-
c言語でのfscanfについて
-
#define _CRT_SECURE_NO_WARNIN...
-
fopen用の関数を作りたいです。
-
セグメンテーションエラーです
-
YUV動画像を1ピクセルごとにず...
-
エラーがわかりません、、
-
CRC32の計算方法
-
ガンマ変換 C言語でプログラ...
-
大量の入力ファイルを扱うとき...
-
音声データを出力するCプログラ...
-
fscanfでループしてしまう。
-
fopenでファイル名に、変数を使...
-
fgets関数の利用 c言語
-
C言語でコマンドmvを実行
-
ファイルが読み込めない・・・
-
辞書順にソートしたいのですが...
-
C言語でセグメンテーションエ...
-
txtファイルの文字を配列に格納
-
fgets( ) の返り値は何?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語でのfscanfについて
-
C言語でファイル読み書きを早く...
-
fopenでファイル名に、変数を使...
-
複数ファイルの同時読み込みの...
-
fgets( ) の返り値は何?
-
テキストファイル内に対して, ...
-
ファイルへの書込み処理が異常...
-
C言語にてXMLファイルから任意...
-
ファイル出力で改行を入れたい!
-
C言語でセグメンテーションエ...
-
エラーがわかりません、、
-
ガンマ変換 C言語でプログラ...
-
VisualStudioでのファイルの入...
-
同時にファイル読み込み 書き込み
-
自己相関関数を求めるプログラ...
-
c言語 ファイルから数字を読み...
-
大量の入力ファイルを扱うとき...
-
ファイルが読み込めない・・・
-
【C言語】ファイルを読み込んで...
-
構造体のメンバにファイルポイ...
おすすめ情報