12,788
回編集
(ページの作成:「== 指定サイズ内で1行を受け取る == 次のように、文字列の格納領域が256[byte]用意されているとする。<br> <source lang="c"> char buffer…」) |
|||
25行目: | 25行目: | ||
== scanf関数の利用 == | == scanf関数の利用 == | ||
scanf関数は多機能であり、フォーマットを記述することで動作のカスタマイズが可能である。 | scanf関数は多機能であり、フォーマットを記述することで動作のカスタマイズが可能である。<br> | ||
<br> | <br> | ||
以下に、<code>scanf</code>関数のフォーマットを記載する。<br> | |||
* % | * %sは全ての空白文字(半角スペースも含む)を無視するため、%sの代わりに%[^\n]と指定することで、無視する対象を改行だけに限定できる。<br>例えば、<code>%255[^\n]</code>は、改行以外の文字列を1〜255文字読み込むことを意味する。 | ||
* %の代わりに%*を使用すると、その部分を読み飛ばすことができる。<br> | * <code>%</code>の代わりに<code>%*</code>を使用すると、その部分を読み飛ばすことができる。<br>例えば、256文字以上入力する場合、最初の255文字までを受け取り、残りを捨てる場合は、<code>%255[^\n]%*[^\n]</code>と記述する。 | ||
* | * 再度<code>scanf</code>関数を使用する場合に備えて、残った改行は<code>%*c</code>で読み飛ばす。<br>これにより、保持されていた入力データは全て処理されたことになる。<br>ただし、次に読み取るものが<code>%d</code>等の数値である場合には、これをしなくても特に影響はない。 | ||
<br> | <br> | ||
また、<code>scanf</code>関数は正常に読み取って変数に格納できたパラメータの数を返すので、これを成功したかどうかの判定に用いることができる。<br> | |||
%255[^\n]%*[^\n] | <code>%255[^\n]%*[^\n]</code>を実行した場合の戻り値は、以下のようになる。<br> | ||
* 1文字以上読み取れたときは 1 | * 1文字以上読み取れたときは 1 | ||
* 改行だけが入力されたときは 0 | * 改行だけが入力されたときは 0 | ||
* 最初から Ctrl+D ( | * 最初から [Ctrl] + [D](Linux)または[Ctrl] + [Z](Windows)でEOFが入力された時は、EOF(EOF定数の値 : -1) | ||
* | * 失敗した場合は、<code>return 1;</code>としてプログラムを異常終了扱いにするとよい。 | ||
<br> | <br> | ||
以下の例では、必ず1文字以上入力させている。<br> | 以下の例では、必ず1文字以上入力させている。<br> | ||
43行目: | 43行目: | ||
#include <stdio.h> | #include <stdio.h> | ||
int main( | int main() | ||
{ | { | ||
char buffer[256] = {'\0'}; | char buffer[256] = {'\0'}; | ||
64行目: | 64行目: | ||
#include <stdio.h> | #include <stdio.h> | ||
int main( | int main() | ||
{ | { | ||
char buffer[256] = {'\0'}; | char buffer[256] = {'\0'}; |