C LANGUAGE TECHNOLOGY

【C言語】scanf関数の改行文字('\n')が残る問題の回避方法

悩んでいる人

C言語のscanf関数で入力した後に,もう一度scanf関数を使うとうまくできないんだけど...

こういった悩みにお答えします.

本記事の信頼性

  • リアルタイムシステムの研究歴12年.
  • 東大教員の時に,英語でOSの授業.
  • 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校コンピュータサイエンス学部2021年の世界大学学術ランキングで20位)で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発
  • プログラミング歴15年以上,習得している言語: C/C++Solidity/Vyper,Java,Python,Ruby,HTML/CSS/JS/PHP,MATLAB,Assembler (x64,ARM).
  • 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」GitHubにオープンソースとして公開

こういった私から学べます.

【C言語】scanf関数の改行文字('\n')が残る問題の回避方法

C言語のscanf関数は,標準入力を標準入力から読み込むライブラリ関数です.

C言語を学ぶ時には必ずといって良いほど登場します.

試しに,scanf関数を利用する以下のコードを実行してみましょう.

15行目のscanf関数で文字列を入力した後に,18行目の2回目のscanf関数で文字を入力します.

実行結果は以下になります.

3行目でabcを入力した後に改行文字('\n')を入力して,文字を入力しようとしたところ,文字が入力できずに実行が終了してしまいました.

bufにabcは正しく入力できましたが,cに文字が正しく入力できていません.

上記が発生した理由は,scanf関数は次の(2回目の)scanf関数で読み込まれるバッファに改行を残すからです.

2回目のscanf関数の入力に%cを指定をしているため,挙動がおかしくなっています.

つまり,cには改行文字が入力されています.

それでは,scanf関数の改行文字が残る問題の回避方法を解説していきます.

getchar関数で改行文字('\n')を読み捨てる

getchar関数で改行文字('\n')を読み捨てるコードは以下になります.

実行結果は以下になります.

正常に読み込めていることがわかります.

ダミー入力で改行文字('\n')を読み捨てる

ダミー入力で改行文字('\n')を読み捨てるコードは以下になります.

実行結果は以下になります.同様です.

2回目のscanf関数の最初に改行文字('\n')を入れる

2回目のscanf関数の最初に改行文字('\n')を入れるコードは以下になります.

実行結果は以下になります.同様です.

ここで,scanf関数の第1引数の文字列に変換指定子以外の文字を書くと,その文字を正確に入力する必要があることに注意して下さい.

この場合は改行文字を正確に入力する必要があります.

2回目のscanf関数の最初にスペース(' ')を入れる

2回目のscanf関数の最初にスペース(' ')を入れるコードは以下になります.

実行結果は以下になります.改行文字を入れる場合と同様です.

他の入力関数を利用する

他の入力関数を利用する方法は,以下の記事で解説しています.

C言語 標準入力stdin
【C言語】標準入力stdinから値を読み込む方法

こういった悩みにお答えします. こういった私から学べます. 目次1 標準入力stdin2 標準入力から文字の読み込み2.1 getchar関数2.2 getc関数2.3 fgetc関数3 標準入力から ...

続きを見る

まとめ

C言語のscanf関数の改行文字('\n')が残る問題の回避方法を紹介しました.

あなたにあう回避方法を選びましょう!

C言語を独学で習得することは難しいです.

私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.

私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!

友だち追加

独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!

-C LANGUAGE, TECHNOLOGY
-, , , , , ,