>> スピーカ1：それでは見てみましょう CS50の図書館で、
特にそのGetIntで機能。
ここでは、実際のソースを持っている GetIntでのコード。
そして、それは長すぎるではないことに注意し、 そのほとんどは、whileループを構成している -
その時点で無限ループ - それだけで 我々は、実際にしたら値を返します
私たちが期待したもの頂いております。
のは、それを見てみましょう。
>> 、最初にここまで注目してください ループが開始されている間。
我々は、コードの行を持って、次のことに注意してください それは実際にGetStringメソッドを呼び出し、
そして、戻り値を格納 変数、文字列型で、ラインと呼ばれる。
それから、健全性チェックのビットを行う。
ライン== NULLの場合には、我々不思議なことに INT_MAXを返します。
>> 今ではINT_MAXであることが判明 特別な定数は、他の場所で宣言された
つまり、可能な限り最大を指定 あなたは表すことができ、INT
このようなプログラム。
今、私たちは自由に戻すことにしました のセンチネル値としてINT_MAX
種類、我々は予約してきた1 エラーを意味して発生しました。
だから我々が支払う価格は、当然のことながら、ある GetIntでは明らかにできないことを
実際と同じ大きさの数を返す INT_MAX、それが望んでいる場合であってもいるので、
その戻り値は、実際にすべき 呼び出し側によって解釈される -
誰がGetIntでを使用している -
ある種のエラーなど。
>> 次に、私が宣言したことに気付く int型のnとchar cを。
このコードは次の行では、私が呼ぶ sscanf関数と呼ばれる関数に渡す
4引数。
文字列である行は、ユーザーの タイプ入力フォーマットであり、 "％Iの％のC」
私は、ユーザーのマイトを期待していた文字列 のアドレスが続き型、
nは、およびcのアドレス。
今の生活の中でのsscanfの目的は確かである 探している文字列をスキャンする
特定のフォーマット、そのプログラマ その第二引数として指定されています。
この場合、％iはである 、％cが存在する限り。
だから、sscanf関数はint型に遭遇した場合 intが格納されることをユーザの入力、
Nと呼ばれる変数の内部理由 我々は第三として提供してきた
Nのアドレスをはsscanfの引数。
これはsscanf関数が実際に行くことができることを意味します そこに、そこに値を更新します。
>> 今、ユーザーがケース内 もっと何か中
1以上の数字より -
つまり、ある種のCHAR -
その第二の変数cは、アドレスが 我々は、その第四としてのsscanfに渡さ
引数には、設定されます。
今のチェック逆さま 利用者からの追加の文字がある
その彼または彼女が協力しない場合、 ちょうどint型よりも多くの型、
我々はこの中でそれを検出することができるでしょう ようにして、その場合、sscanfは理由
意味、2を返すために起こっていること プレースホルダの両方を満たした
値を持つ。
しかし、我々は代わりにそのsscanf関数を期待している ユーザーだけを意味し、1を返します。
int型を提供した。
>> sscanfはあれば、我々は何をしますか 確かに1を返します。？
さて、私たちはすぐにそのラインを解放 ユーザーがタイプ入力してから、我々
すぐに戻りN有する int型を頂いております。
そうでなければ、sscanf関数は1を返し、ない場合には したがって、ユーザは、協力していなかった、
我々はまだラインを解放するが、私たち 今再試行するようにユーザに促す。
そして、我々は、その内部にまだだから そうでなければ、無限ループ、プロセス
再開、そしておそらく再び、となります 多分もう一度、ユーザーまで、実際に
私たちにint型が用意されています。