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

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

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

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

Q&A

解決済

3回答

2240閲覧

特定の文字列を除去したファイルの読み込み

abc_oxox

総合スコア27

C

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

0グッド

0クリップ

投稿2018/12/11 06:58

C言語において,以下のようなテキストファイルがあったとき,

"1 2 3 4 5 6 7 8 9 10 11 12 13 14 15"

以下のように別のファイルに出力しなおしたいです.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

読み込むテキストファイル内の数字の量は変わりますが,必ず3の倍数です.
また,最初と最後は「"」で囲まれています.

以下のようなコードを実装しましたが,最後の「"」がうまく判定できず,無限ループになってしまいます.

C

1int main(){ 2 FILE *fp,*fp2; 3 char str[16]; 4 int num1,num2,num3; 5 6 fp = fopen("a.txt", "r"); 7 fp2 = fopen("a_format.txt", "w"); 8 9 if (fp == NULL) { 10 printf("file not open!\n"); 11 return -1; 12 } 13 if (fp2 == NULL) { 14 printf("file not open!\n"); 15 return -1; 16 } 17 18 //最初の「"」を読み取り  のつもり 19 fscanf(fp, "%s", str); 20 21 while (fscanf(fp, "%d %d %d", &num1, &num2, &num3) != EOF) { 22 fprintf(fp2, "%d %d %d\n", num1, num2, num3); 23 //どのようにして最後の「"」を飛ばせばよいのか… 24 } 25 26 fclose(fp); 27 fclose(fp2); 28 29 return 0; 30}

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

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

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

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

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

guest

回答3

0

ベストアンサー

最初のダブルクォーテーションスキップは、fgetcで1文字空読みするか、fseekで1バイトスキップすればよいかと。
他の回答にもありますが、fscanfの戻り値は項目数なので、ループ処理は以下でどうでしょうか。

c

1while (fscanf(fp, "%d %d %d", &num1, &num2, &num3) == 3) {

上記のようにしておけば後ろのダブルクォーテーション特に気にする必要はないと思います。

投稿2018/12/11 07:43

ttyp03

総合スコア16998

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

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

abc_oxox

2018/12/12 03:24

なるほど.ありがとうございました!
guest

0

Cなど不要。そう、シェル芸ならね!

bash

1$ cat a.txt 2"1 2 3 4 5 6 7 8 9 10 11 12 13 14 15" 3 4$ cat a.txt|tr -d '"'|xargs -n3 51 2 3 64 5 6 77 8 9 810 11 12 913 14 15

投稿2018/12/11 22:07

hichon

総合スコア5737

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

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

0

fscanf()の戻り値は読み込んだ項目数です。(EOFは読み込みに失敗したとき以外帰ってきません)
fgets()とstrtol()で対処しましょう。

投稿2018/12/11 07:07

cateye

総合スコア6851

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問