連続使用のscanf C言語は、問題の2つの文字タイプ(rpm)を入力しました

昨日、Cプログラミングには、次のようにプログラムが実行されている場合の詳細は、scanfの上で問題が発生しました:

する#include <stdio.hの>
int型のmain()
{
 チャーCH1、CH2。
 printf( "CH1用の入力:/ N")。
 scanf関数( "%のC"、およびCH1)。
 printf( "CH1 =%C / N"、CH1)。
 printf( "CH2の入力:/ N")。
 scanf関数( "%のC"、およびCH 2);
 printf( "%CH 2 = C / N"、CH 2);
}

   表面には、この手順が間違っていない、それが実行できますが、CH2への第二のscanf入力値の操作中に、プログラムが停止しませんが、最後のprintfに直接実行します!

   なぜ?私は困惑しました。

   今日は、元のscanfは、標準的なデータ入力バッファ入力から読み込み、および入力フォーマット%cの文字は、キャリッジリターン文字を受け、プレスは、最初のscanfの入力端に文字を入力した後、入力している知るためにインターネットをチェックします保存されたキャリッジリターン、第二の面のscanf入力バッファは、それが自動的にCH2にキャリッジリターンに割り当てられている場合。第二のscanf入力フォーマット%cは時間ではない場合、彼らは形式が一致しないためと、キャリッジリターンは自動的にこれだけ連続入力などの問題時にLianggeの%cの形式に上昇を与えて、無視されます!

   ソリューション:(いずれかを選択するには、2つの方法)

   1。空の入力バッファ

   最初の文のscanfの後に添加した:にfflush(STDIN); // C言語の関数の入力バッファエンプティ

   2。書式を追加空間制御

   2回目のリードのscanf:scanf関数( "%cの"、&CH2); //は数%の前にスペースを追加します

以前に入力した輸送空間によって相殺することができる;(得ABCDE入力を入力する必要があり、CH eがあるのscanf(「ABCDの%のC」、&chは)等)のscanfの制御入力は、入力文字とまったく同じ形式が必要です文字。

 

おすすめ

転載: www.cnblogs.com/GoldCrop/p/11306547.html