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

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

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

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

Tera Term

Tera Termは、TeraTerm Projectが開発する国産のWindows向けターミナルソフト。telnetプロトコルでのリモートホストへの接続やCOMポートのシリアル接続が可能で、マクロが利用できます。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Q&A

2回答

2208閲覧

c言語 csvファイルデータを構造体にいれ、出力

sosowatabo

総合スコア17

C

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

Tera Term

Tera Termは、TeraTerm Projectが開発する国産のWindows向けターミナルソフト。telnetプロトコルでのリモートホストへの接続やCOMポートのシリアル接続が可能で、マクロが利用できます。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

0グッド

0クリップ

投稿2022/01/24 11:39

c言語でcsvファイルのレコードを読み込み、
カンマ区切りのデータをそれぞれ構造体格納してターミナルに出力したいです。
ファイル読み込み関数は、fscanfを使用します。
読み込んだ後printfで画面にデータの値を出力したいのですが、期待通りの結果になりません。以下ソースです。(多少省いているので文法とかは正確でないかもしれません。)

c言語

1 2ファイルデータ 3たなか,とうきょう,10000 4 5struct Input6  char name 7 char adress 8 char job 9}input 10 11fscanf(%^,, %^,, %^,, 12 %s,%s,%s, 13    input.name,input.adress,input.job) 14 15printf(input.name) 16printf(input.adress) 17printf(input.job) 18 19結果 20たなかとうきょう10000 21とうきょう10000 2210000 23

となります。最初のinput.nameは"たなか"
次は"とうきょう"
とだけ出力されて欲しいのですが、、。この値を利用して比較や代入等も今後行いたいため、カンマ区切りで切り出されたデータのみ入って欲しいです。
何故このように出力されてしまうのか教えてください。

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

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

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

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

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

jimbe

2022/01/24 11:57 編集

> 以下ソースです。(多少省いているので文法とかは正確でないかもしれません。) コードやデータはそれぞれファイル毎にマークダウンを分けて、極力正確に(ファイル全体をコピペで)ご提示ください。 回答側で実際にコピペして確認テストする場合に、ご質問以外のエラー等があるとテストになりません。
guest

回答2

0

問題が2点。

■変数の定義
"char"だけで変数を定義すると、char型の値1つしか記憶できません。
C言語の文字列は「char型の値の配列」です。
格納する変数も、char型の配列である必要があります。
このソースの場合は構造体のメンバですが、メンバも変数と同じです。

■scanfへの受け取りたい変数の渡し方
scanf系関数に渡す2番目以降の引数は、変数ではなく、「変数へのポインタ」です。
ポインタという表現でわかりにくければ、アドレスと表現した方がわかりやすいかもしれません。

仮に各文字列が終端の\0も含めて最大100バイトだとすると、以下のような感じです。

C

1struct Input2 char name[100]; 3 char address[100]; // 住所ならつづりは"adress"ではなく、"address" 4 char job[100]; 5}input; 6 7fscanf("%s,%s,%s", &input.name, &input.address, &input.job); 8...

添付されたソースが必要なところまで省略されているようにも見えます。
省略しない方がいいでしょう。

投稿2022/01/24 14:14

yossie

総合スコア106

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

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

jimbe

2022/01/24 14:34

char 配列なら & は…。
yossie

2022/01/24 15:06

jimbeさん そうでした。配列に変えたんだから&は必要ないですね。 ついでに、fscanfだから第1引数はFILE構造体へのポインタが必要でした。
guest

0

fscanfの使い方間違ってます。
ぐぐって、関数の仕様を確認しよう

投稿2022/01/24 12:51

y_waiwai

総合スコア87749

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問