- ベストアンサー
fgetsについて
C言語初心者です。わからないことがありまして。 おしえてください。 以下はプログラムの一部です。 ################################ char fi[50]; int r; fgets( fi, 50, stdin ); r = atoi( fi ); ################################ fgets( fi, 50, stdin );のとこで 50とstdinはどういう意味ですか? 50は50バイト以上でなくてはいけません、という意味ですか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
基本的なことが理解されてないようなので、入門書でちゃんと入門した方が良いと思います。 50は最大50バイトという意味です。 stdinは入力元を示します。この場合は標準入力。
その他の回答 (3)
- yama5140
- ベストアンサー率54% (136/250)
>fgets( fi, 50, stdin );のとこで >50 と stdin はどういう意味ですか? ・No.1 さんのとおり stdin は、標準入力で、具体的にはキーボードです。 ・50 は、そこから( 50 - 1 )文字を取得、とプログラマが指定したものです。 ・fgets は、( 50 - 1 )文字を読み込む、または Enter キーに出会うまで読み込みます。 ご質問主旨と直接関係しませんが、 ソースでは、整数に変換していることから、数字列の入力を想定しています(先頭の正負記号含む)。 ★ char fi[ 50 ]; はそのままでよいのですが、fgets( fi, 50, stdin ); の 50 は、atoi の扱える範囲というのもあるので・・。 まあ、50 のままで、何桁まで入力と同じか出力して確認してみるのも。 ------------------------------------ なお、stdin の代わりに、FILE構造体へのポインタとすると、 例) fgets( cBuf, 256, fp ); ファイル fp から( 256 - 1 )文字を読み込むか、または復帰改行文字に出会うか、EOFになるまで読み込みます。 ・最後のもののみが、「キーボード」と違う点です。 ------------------------------------ 下のURLで確認して下さい。 fgets から f を取った gets 等の組み合わせが多くあります。 使い分けをどうするのか、調べてみるのも・・。 http://www.bohyoh.com/CandCPP/C/Library/index.html
お礼
参考になりました、ありがとうございます
- aris-wiz
- ベストアンサー率38% (96/252)
>50とstdinはどういう意味ですか? >50は50バイト以上でなくてはいけません、という意味ですか? char fi[50]; ここで「fi」という名前の領域を50バイト分用意しています。 fgets( fi, 50, stdin ); この関数の呼び出しで、「fi」という名前を渡していますが、 実際にはとりあえず、この位置から開始して使ってねという 情報に変わって渡されます。 #よく言われる、 #C言語における「配列のポインタへの暗黙の変換」です。 しかし、開始位置の情報から、その元の領域がどこまでなのか 区別することができません。したがって、開始の位置は 分かっていてもその領域をどこまで使っていいのかが 呼び出された関数側からは分かりません。 そこで、「fi」のサイズを関数に教えて、 渡した開始位置「fi」の領域は「50」バイトまでしか使わないでね。 という事を教えています。 stdinとはNo1さんがおっしゃっている通り、 標準入力の事を言います。 #一般のPCではキーボードからの入力が殆どです。 ポインタとか配列とか用語を なるべく使わないように、かなり噛み砕いて書いてみました 多少、語弊もあると思うので、あえて参考意見で。。。
お礼
わかりやすいです。ありがとうございます。 次の授業でポインタやりますので参考になりました。
- asuncion
- ベストアンサー率33% (2127/6289)
> char fi[50]; ここで定義した50バイトと > fgets( fi, 50, stdin ); 第2引数の50が対応しています。
お礼
ありがとうございます。
お礼
参考書をじっくり読んで勉強します。 回答ありがとうございます。