- ベストアンサー
C言語で区切った文字を別々の配列に入れる方法
- C言語を勉強中の質問者が、文字列を「;」で区切り、それぞれを別々の配列に格納したいという問題を抱えています。
- 質問者はfscanf関数を使用してファイルから一行ずつ読み込み、指定されたフォーマットにそって区切りたいと考えています。
- しかし、現在の実装はスペースで区切られてしまい、望む結果を得ることができません。質問者はより良い関数やアイディアを求めています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
エラー処理を考慮しないのであれば... fscanf(fp, "%29[^;];%29[^\n]%*c", eng, pir) のようにすれば実現できます。
その他の回答 (2)
- kmee
- ベストアンサー率55% (1857/3366)
> 調べるとfscanf(ファイル、フォーマット)という関数を見つけて、これだとフォーマットにそって、一行ずつ読んでくれるというのがわかりました。 「一行ずつ読む」というのは嘘、あるいは、初心者用に詳細を省略したいい方です。fscanfでは、実際は、殆どの場合で改行は空白と同じあつかいになります。 フォーマット文字列がわからないのなら、リファレンスマニュアルの該当項目をよく読みましょう。 他の言語の経験があるのなら、思い込みでCのプログラミングをするのは、とても危険なことです。 だから「マニュアルを読みましょう」質問はそのあとです。 特に、Javaの経験があるのなら、中途半端に似ているだけに、きちんと分けて覚えないと。 Javaでは意識しないでよかった、文字列操作やメモリ管理が重要になってきます。 その意味では、なぜ「今日から始めました」でこんな内容なのかが気になります。もうちょっと基礎の勉強をしてもよいのでは? > 関係ないですけど。C勉強してJAVAがものすごい大好きってことに気づきました 言語論争するつもりはないですが、こんなこと言うならJavaでやりゃいいじゃん、ってなりませんかね?
お礼
ご回答ありがとうございました。 フォーマットを読んだのですが、よくわからなかったので質問させていただきました。 これは、私が好きでやっているのではなくて、学校で出された課題についての質問です。授業が始まってすぐ出されて、自分でCを勉強しながら3日で仕上げなくてはいけないプログラムなので、基礎をしっかりと。。というのは分かるのですが、他のプログラムも書かなければいけないので、はっきりいって時間がありません。 Javaで全部かけるなら、最初から書いてます(´・ω・`) fscanfでは、殆どの場合で改行は空白と同じあつかいになる事がわかりました、ありがとうございました。
- D-Matsu
- ベストアンサー率45% (1080/2394)
これくらい(一行読んで分割)ならfgetsで読んでstrtokでもOKでしょう。
お礼
strtok()という関数があるんですね。これはこれからも使えそうなので、調べて、機会があればこのプログラムの中で使ってみたいと思います。Cはメモリーの事よくも考えないといけないんですね、、、難しいです。。。 ありがとうございました^^
お礼
できました!!!これだけで3時間くらい悩んだのに。。。ありがとうございました^^