\r\n\r\n
関数は、特定のタスクを実行するステートメントの集合体です。すべてのステートメントを同じプログラムに書く必要はなく、複数の関数に分割して記述することも可能です。プログラミングでは、ユーザーが独自に機能を定義することができます。この記事では、この2つの関数の違いについて説明する。scanfとgetsの主な違いは、scanfは空白、改行、ファイル終端 (EOF)に対し、getsは空白を入力文字列の一部として扱い、改行やEOFに遭遇すると入力を終了します。
1. 概要と主な相違点 2. scanf とは 3. get とは 4. scanf と gets の類似点 5. 横並び比較 - 表形式での scanf と gets 6. まとめ
scanf関数は、キーボードから入力を読み取り、与えられた書式指定子に従って保存します。空白、改行、EOFに出会うまで入力を読む。構文は以下の通り。
scanf ("フォーマット文字列", 変数アドレスのリスト).
以下に示す例を参照して、scanf を理解してください。
図01:入力scanf
上記のプログラムによると、キーボードから受け取った入力は整数なので、フォーマット指定子は%d、文字値なら%c、浮動小数点値なら%fとし、受け取った入力値をnumber変数に格納すればよいことになります。そのため、変数番号のアドレスがscanf関数に渡されます。number変数には、ユーザーがキーボードから入力した値が格納されるようになりました。最後に、number変数を表示して、値を確認することができます。
また、一度に複数の値を受信することも可能である。
図02:複数入力のscanf
受け取った入力は変数number1,number2に格納され、printfで値を確認することができる。
get関数は、改行やEOFに出会うまで、キーボードからの入力を受け取るために使われます。空白は入力の一部とみなされます。
gets ("格納されている文字列の場所")。
文字列の受信に失敗した場合、get関数はnullを返す。
以下の例を参照してください。
図03:アクセス
入力はget関数で受信され、変数word1に格納される。もしプログラマーがgetsの代わりにscanfを使って "helloworld "のような文字列を入力すると、scanfはスペースが空白なので、2つの文字列として読み込むことになります。しかし、getは「hello world」という1つの文字列として読み取ります。
スキャン vs ゲット | |
scanfは、空白、改行、EOFに遭遇するまで標準入力から入力を読み取るC関数です。 | getsは,標準入力から改行またはEOFに遭遇するまで入力を読み込むC関数である。 |
文法 | |
scanf 関数は、フォーマット文字列と変数アドレスのリストを受け付けます。 | gets関数は、受け取った値を格納する変数の名前を受け取ります。 |
柔軟性 | |
scanfは異なるデータ型の複数の値を読み取ることができます。 | gets() は、文字列データのみを取得します。 |
scanfとgetsはプログラミング言語Cが提供する関数であり、ユーザが最初から実装する必要はない。scanfとgetsの違いは、scanfは空白、改行、ファイル終端(EOF)に遭遇すると入力の受信を終了するのに対し、getsは空白を入力文字列の一部として扱い、改行やEOFに遭遇すると入力を終了することである。scanfとgetsの使い分けは、ユーザ入力を標準入力(多くの場合キーボード)から受け取る方法に依存します。scanfはgetsよりも柔軟性があります。
本記事のPDF版をダウンロードし、オフラインで使用する場合は、引用の指示に従ってください。PDF版のダウンロードはこちらから ScanfとGetの違いについて