「C言語の基礎 - 標準入力から安全に文字列を取得する」の版間の差分

ナビゲーションに移動 検索に移動
40行目: 40行目:
また、<code>scanf</code>関数は正常に読み取って変数に格納できたパラメータの数を返すので、これを成功したかどうかの判定に用いることができる。<br>
また、<code>scanf</code>関数は正常に読み取って変数に格納できたパラメータの数を返すので、これを成功したかどうかの判定に用いることができる。<br>
<code>%255[^\n]%*[^\n]</code>を実行した場合の戻り値は、以下のようになる。<br>
<code>%255[^\n]%*[^\n]</code>を実行した場合の戻り値は、以下のようになる。<br>
* 1文字以上読み取れたときは 1
* 1文字以上読み取れたときは <code>1</code>
* 改行だけが入力されたときは 0
* 改行だけが入力されたときは <code>0</code>
* 最初から [Ctrl] + [D](Linux)または[Ctrl] + [Z](Windows)でEOFが入力された時は、EOF(EOF定数の値 : -1)
* 最初から [Ctrl] + [D](Linux)または[Ctrl] + [Z](Windows)でEOFが入力された時は、EOF(EOF定数の値 : -1)
* 失敗した場合は、<code>return 1;</code>としてプログラムを異常終了扱いにするとよい。
* 失敗した場合は、<code>return 1;</code>としてプログラムを異常終了扱いにするとよい。
<br>
<br>
以下の例では、必ず1文字以上入力させている。<br>
以下の例では、必ず1文字以上入力させている。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <stdio.h>
  #include <stdio.h>
   
   
64行目: 64行目:
     return 0;
     return 0;
  }
  }
  </source>
  </syntaxhighlight>
<br>
<br>
以下の例では、改行だけの入力を認めている。<br>
以下の例では、改行だけの入力を認めている。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <stdio.h>
  #include <stdio.h>
   
   
85行目: 85行目:
     return 0;
     return 0;
  }
  }
  </source>
  </syntaxhighlight>
<br>
<br>
以下の例では、入力された文字数も取得している。(%255[^\n]の後ろは、unsigned / intの場合は%n、size_t / ssize_tの場合は%znを指定する)<br>
以下の例では、入力された文字数も取得している。(<code>%255[^\n]</code>の後ろは、unsigned / intの場合は<code>%n</code>、size_t / ssize_tの場合は<code>%zn</code>を指定する)<br>
(%n系は符号付き整数で取得するように定義されているが、負の値が出現する可能性がゼロなので、符号無し整数でも問題ない)<br>
(<code>%n</code>系は符号付き整数で取得するように定義されているが、負の値が出現する可能性がゼロなので、符号無し整数でも問題ない)<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <stdio.h>
  #include <stdio.h>
   
   
109行目: 109行目:
     return 0;
     return 0;
  }
  }
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


案内メニュー