する#include <stdio.hの> int型のmain() { CHAR string_c [ 20 ]、* C。 printf(" 入力文字列:\ N " ); scanf関数(" %のC " 、string_c)。 printf(" 入力文字:\ n " ); scanf関数(" %のC " 、C)。 pritnf(" %sの%のC "、string_c、* C)。 リターン0 ; }
二回目は、直接の結果、入力文字、する必要はありません後に入力された文字列が発生したときにプログラムが実行されたときに上記のエラーは、発生したなどとして、このような状況。、必要がキャッシュ文字の割り当てに直接入力する2番目の時間を実際には、最初の入力文字列の後にキャリッジリターンは、最後には「\ n」はString_cを与えていないが、キャッシュに保存されています。
ソリューション:
(1)は、2つのscanf()関数はsancf( "%sの%のC"、striing_c、C)のように書かれています。
入力バッファをリフレッシュにfflush(STDIN):フラッシュ下記(2)第一のscanf()関数でキャッシュ書き込み動作
(3)第一のscanf()関数が追加で(GETCHAR)を、 '\ n'は直接取得、それは作用しません
(4)のscanf()関数にそう書く:scanf関数を( "%Cする\ n"、string_c)
オリジナルリンクします。https://blog.csdn.net/PyDongJava/article/details/84572002
する#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の制御入力は、入力文字とまったく同じ形式が必要です文字。
オリジナルリンク:https://www.cnblogs.com/GoldCrop/p/11306547.html