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

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

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

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

Q&A

解決済

3回答

904閲覧

構造体とファイルの入出力について

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

0グッド

1クリップ

投稿2020/08/20 02:17

編集2020/08/20 02:36

構造体を使い、そしてァイルの情報を入力して答えが出るプログラムを作っています
(商品名 値段 個数)をファイルから読み取るというところがよく分かりません

例えば個数だけを入力するやり方はわかるのですが上のように二つ以上のデータを入力するときはどのようにすればいいのかよく分かりません

#include<stdio.h> typedef struct product_info { char name[10]; int cost; int number; }INFO; int main() { INFO product[10]; FIlE *fp; FIlE *fp2; int i,data,total=0; fp=fopen("14.txt","r"); fp2=fopen("14result.txt","r"); if(fp==NULL||fp2==NULL) { printf("テキストファイルが見つかりません"); exit(1); } //ココからがわからない// while(1) { ret=fscanf(fp,"%d",&data); if(ret==EOF)break; total+=data; }

イメージ説明

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

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

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

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

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

SHOMI

2020/08/20 02:28

>例えば個数だけを入力するやり方はわかるのですが上のように二つ以上のデータを入力するときはどのようにすればいいのかよく分かりません 同様にして順に読み取ればよいだけですが、どのあたりがわからないのでしょうか。
Daregada

2020/08/20 02:32

14.txtに、何がどのような形式で書かれているのか。たとえば、1行ごとに「商品名、値段、個数」が書かれていて、区切り文字は空白(あるいはタブ、カンマ)といった情報がない。 14result.txtは、名前からすると結果を書き込むファイルではないのか(読み込みモードで読んでいるがいいのか)。もし、書くとしたら何を書き込むのか。 といったあたりが説明不足です。
退会済みユーザー

退会済みユーザー

2020/08/20 02:33

商品名 値段 個数の情報が一つのファイルの中に入っていてその情報を入力するときが分かりません
Daregada

2020/08/20 02:46

うーん。「一つのファイルの中に」どのような形式で入っているのかによって、読み取り方が変わるんですよ。14.txtがどのような形式なのかは、あなたしか知らないので、あなたが詳しい情報を提供しないと、望んでいる回答が得られないでしょう。
guest

回答3

0

ベストアンサー

C

1#include <stdio.h> 2 3typedef struct product_info { 4 char name[10]; 5 int cost; 6 int number; 7}INFO; 8 9int main() { 10 INFO product[10]; 11 FILE *fp; 12 int i, n; 13 14 fp = fopen("14.txt","r"); 15 16 if ( fp == NULL ) { 17 printf("テキストファイルが見つかりません"); 18 exit(1); 19 } 20 21 n = 0; 22 while(1) { 23 int ret = fscanf(fp,"%s%d%d",product[n].name, &product[n].cost, &product[n].number); 24 if ( ret == EOF ) break; 25 ++n; 26 } 27 fclose(fp); 28 29 // 読めたかな? 30 for ( i = 0; i < n; ++i ) { 31 printf("%s\t%d\t%d\n", product[i].name, product[i].cost, product[i].number); 32 } 33 34 return 0; 35}

14.txt:

Apple 200 8 Orange 300 2 Grape 150 3

実行結果:

Apple 200 8 Orange 300 2 Grape 150 3

これでいい?

投稿2020/08/20 04:18

episteme

総合スコア16612

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

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

0

スペースかタブ区切りなら

C

1 int count = 0; 2 while (1) 3 { 4 int ret = fscanf(fp, "%s%d%d", product[count].name, &product[count].cost, &product[count].number); 5 if (ret == EOF)break; 6 count++; 7 }

投稿2020/08/20 03:53

SHOMI

総合スコア4079

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

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

退会済みユーザー

退会済みユーザー

2020/08/20 04:21

ありがとうございます
guest

0

2つのファイルを読み出したいなら、その提示のコードで、fpとfp2から普通に読みだせばいいです

あと、その2つのCloseを忘れずに

投稿2020/08/20 02:26

編集2020/08/20 02:27
y_waiwai

総合スコア88042

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

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

退会済みユーザー

退会済みユーザー

2020/08/20 02:57

14text,txtの中にその三つの情報が入っているのでfp2は使わないのではないでしょうか? fp2は結果のファイルです
y_waiwai

2020/08/20 03:01

あと付けで話をひっくり返されましてもw その2つのファイルを読み出しモードでオープンしてますが、その意図はなんでしょうか。 で、図で示されてるinput.txtもresult.txtもコード中には出てきませんが、そこらへんはどうなってるんでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問