質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

5回答

1809閲覧

ファイルの中身を書き出し 判定

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

1グッド

0クリップ

投稿2019/11/23 07:46

編集2022/01/12 10:55

■やりたい事を少し変更させていただきます。
コマンド行(コマンドライン)からファイル名が与えられたとき、 そのファイル名のファイルの中身をそのまま標準出力に書き出すプログラムを作成し
ファイルの中身の書出しに先立って、ファイル名と「:::」とを1行として標準出力に左詰にして書き出すこと。 なお、与えられたファイル名のファイルを開くことができなかった時は、ファイル名に続いて「: can't open.」と書き出す。

■成功例
コマンドライン入力
data1.txt

標準出力
data1.txt:::
ABCD
EFG

コマンドライン入力
data3.txt

標準出力
data3.txt:::
Once upon a time,
there lived a man
whose name was Rip van Winkle.

コマンドライン入力
program.c

標準出力
program.c: can't open.

C

1#include <stdio.h> 2int main() { 3 FILE *fp; 4 fp= fopen("data1.txt","r"); 5 if( fp == NULL ) { 6 printf(": can't open."); 7 } else { 8 int c; 9 while ((c = fgetc(fp)) != EOF) { 10 putchar(c); 11 } 12 fclose(fp); 13 } 14 return 0; 15}

この状態からどう改修すれば良いか教えて頂きたく。。。
ファイル中身
data1.txt ABCD EFG
data2.txt 123 4567 890123
data3.txt Once upon a time,
there lived a man
whose name was Rip van Winkle.

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ファイルから読み込んで、標準出力に書きだす方法です。

1文字ずつ読み書きするなら

C

1 int c; 2 while ((c = fgetc(fp)) != EOF) putchar(c);

行単位で読み書きするなら

C

1 char buf[BUFSIZ]; 2 while (fgets(buf, sizeof buf, fp)) fputs(buf, stdout);

固定長で読み書きするなら

C

1 size_t n; 2 char buf[BUFSIZ]; 3 while ((n = fread(buf, 1, sizeof buf, fp)) > 0) 4 fwrite(buf, 1, n, stdout);

いずれかを選んでプログラムを完成させ、質問を編集して、
できたプログラムを追加してください。

投稿2019/11/23 21:43

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/11/24 01:07

ご回答有難うございます。 追加してみましたが上手くいかず。 ご確認お願いします
guest

0

質問文にあったコードをもとに書きました。

c.c

c

1#include <stdio.h> 2 3int main(void) { 4 char * file_path = "data1.txt"; 5 6 FILE * fp; 7 fp = fopen(file_path, "r"); 8 9 if (fp == NULL) { 10 printf(": can't open. %s\n", file_path); 11 return 1; 12 } 13 14 int c; 15 while ((c = fgetc(fp)) != EOF) { 16 putchar(c); 17 } 18 fclose(fp); 19 return 0; 20}

投稿2019/11/24 03:18

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C

1#include <stdio.h> 2 3int main() { 4 FILE *fp; 5 fp= fopen("data1.txt","r"); 6 if( fp == NULL ) { 7 printf(": can't open."); 8 } else { 9 int c; 10 while ((c = fgetc(fp)) != EOF) { 11 putchar(c); 12 } 13 fclose(fp); 14 } 15 return 0; 16}

投稿2019/11/24 03:17

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/11/24 04:19

ご回答有難うございます(^^) やりたいことを少し変更させて頂きました。 再度教えて頂きたく。。。
episteme

2019/11/24 05:46 編集

なにがわからんの? printf("data1.txt:::\n"); を適切な位置に追加するだけやろ?
rubato6809

2019/11/24 11:41

これも、そのたったひとつのことを、自分でやろうという気が無い、考えるつもりも無い、考えてるフリ・・・いわゆる丸投げじゃなかろうか。重症。
guest

0

まず、

printf(fp,"%s\n");

printf()は、色々と重宝する関数なのですが、機能多過ぎ(特に出力書式)なので、ちょっと検索。--> C言語辞典 printf()
まずは、この辺はどうでしょう。 printf(format, ...) 第一引数は、書式です。ただ、この書式が単純な文字列の場合、そのまま、出力。
また、ファイルデータの読み込みは、例えば、fgets() とか。 fgets(char *s, int n, FILE *fp)

まずはこの辺から、どうでしょうか。

投稿2019/11/23 09:13

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

printf(fp,"%s\n");

fpを何だと思っていますか?

修正箇所を教えて頂きたく。

「ファイルから読んで書く」をファイルの終わりまで繰り返します。

投稿2019/11/23 08:00

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/11/23 08:11

ご回答有難うございます。 FILE *fp; fp= fopen("data1.txt","r") ここの所でfpの中にdata1.txtの内容が入っているという認識です。
otn

2019/11/23 08:22

それは全く間違えています。 FILEとは何であるのかを理解しましょう。 openとは何であるのかを理解しましょう。
dameo

2019/11/23 11:18

@otnさん open関数ではなくfopen関数ですよ。 open関数もあるので、ミスリードになるかもです。 @質問者さん http://www.c-tipsref.com/reference/stdio/fopen.html fpはFILE構造体へのポインタで、fopenで開いたストリームの情報が入っています。 簡単に言うとどこファイルのどの辺を読んでいるのかといった情報を取り出すのに必要な情報です。 このfpを使ってファイルからデータを読む処理がまず必要とotnさんはおっしゃってるんだと思いますよ。
otn

2019/11/24 04:27 編集

ああ、片仮名で「オープン」と書いたほうがよかったですね。 ファイルの、オープン、読み書き、クローズ を理解しましょう。 弁当箱を開ける。弁当を食べる。弁当箱を閉じる。弁当箱のふたは食べられません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問