• ベストアンサー

fgetsについて

C言語初心者です。わからないことがありまして。 おしえてください。 以下はプログラムの一部です。 ################################ char fi[50]; int r; fgets( fi, 50, stdin ); r = atoi( fi ); ################################ fgets( fi, 50, stdin );のとこで 50とstdinはどういう意味ですか? 50は50バイト以上でなくてはいけません、という意味ですか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

基本的なことが理解されてないようなので、入門書でちゃんと入門した方が良いと思います。 50は最大50バイトという意味です。 stdinは入力元を示します。この場合は標準入力。

zero-0
質問者

お礼

参考書をじっくり読んで勉強します。 回答ありがとうございます。

その他の回答 (3)

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.4

>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

zero-0
質問者

お礼

参考になりました、ありがとうございます

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.3

>50とstdinはどういう意味ですか? >50は50バイト以上でなくてはいけません、という意味ですか? char fi[50]; ここで「fi」という名前の領域を50バイト分用意しています。 fgets( fi, 50, stdin ); この関数の呼び出しで、「fi」という名前を渡していますが、 実際にはとりあえず、この位置から開始して使ってねという 情報に変わって渡されます。 #よく言われる、 #C言語における「配列のポインタへの暗黙の変換」です。 しかし、開始位置の情報から、その元の領域がどこまでなのか 区別することができません。したがって、開始の位置は 分かっていてもその領域をどこまで使っていいのかが 呼び出された関数側からは分かりません。 そこで、「fi」のサイズを関数に教えて、 渡した開始位置「fi」の領域は「50」バイトまでしか使わないでね。 という事を教えています。 stdinとはNo1さんがおっしゃっている通り、 標準入力の事を言います。 #一般のPCではキーボードからの入力が殆どです。 ポインタとか配列とか用語を なるべく使わないように、かなり噛み砕いて書いてみました 多少、語弊もあると思うので、あえて参考意見で。。。

zero-0
質問者

お礼

わかりやすいです。ありがとうございます。 次の授業でポインタやりますので参考になりました。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

> char fi[50]; ここで定義した50バイトと > fgets( fi, 50, stdin ); 第2引数の50が対応しています。

zero-0
質問者

お礼

ありがとうございます。

関連するQ&A