ここから本文です

fscanfについて。

miy********さん

2019/7/2719:05:26

fscanfについて。

fscanfを使うとき、しばしば
while(fscanf(・・・) != EOF)//文字列使用時 や、
while(fscanf(・・・) != 3)//構造体使用時 など、
whileと組み合わせて使われますが、これはなぜですか?

また、配列の場合は
int a[100];//あえて要素数は大きな数にした
while(fscanf(fp,"%d",&a[i]) != EOF){
a++;
}
でいいのでしょうか?
ここでfor文を使わない理由など教えていただけたら幸いです。

閲覧数:
30
回答数:
2

違反報告

ベストアンサーに選ばれた回答

yay********さん

2019/7/2719:47:19

>whileと組み合わせて使われますが、これはなぜですか?

終了まで読み込みたい

EOF(End Of File)または読みとり失敗まで読み込みたい
※構造体なんかを使用しているときは構造体なんかのデータ分の個数読み込めないとデータ不備で失敗ということ

EOF(or読み取り失敗)まで無限ループで読みこめばいい

while(fscanf(・・・) != EOF)//文字列使用時 や、
while(fscanf(・・・) != 3)//構造体使用時 など、

>for文を使わない理由
EOF判定(or読み込めた個数判定)をどのみち組み込まなければいけないので、先にやるか後でやるかの差でしか在りません。
例えデータとして読み込む個数が分かっていても実際に動かした時に読み込めたかどうかは判定しなければ何を引き起こすか分かりません。そのへんのプログラムとしての安全性はC言語では言語側で考慮されていないためプログラマーが行うことになっています。

質問した人からのコメント

2019/7/27 21:11:05

回答ありがとうございます。

ベストアンサー以外の回答

1〜1件/1件中

prw********さん

2019/7/2720:07:44

>whileと組み合わせ

順序が逆と考えますと、まずは最初に『while(fscanf(・・・) != EOF)』などという書き方が閃き、そのあとにC言語の詳細が決められた……となります

なので、その場合、whyに対する答えは「当時の開発者の発想や着想や常識」となります

***

当時、何からfscanfしてたかというと、テープです

Digital DEC PDP-11 - Disc Packs, Tape Drives and Terminals! - YouTube
https://www.youtube.com/watch?v=H-uFzBDQQjw

forとwhile、どちらがテープという媒体をより文芸的に比喩しているかというと、それは個人の好みです

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる