int型の入力文字エラーのC言語変数

 

今日の小さな問題をC言語に遭遇した、シンプルな電卓、一パーセント%Cは%fをF 3つの変数の定義を記述することであり、これは常に2 + 3,2-3入力して作成し、「OFF」のジャンプを入力することができますサイクルの電卓機能は、エラーが発生します。

エラーサンプルコードは次のとおりです。

する#include <stdio.hの> 

int型のmain()
{ 
	フロートX、Y。
	チャーZ。
	一方、(1)
	{	 
		scanf関数( "%F%%のF C"、およびX&Z、&Y)。
		IF(Z == '+'){のprintf( "%2F%C%.2f =%2F \ N。"、X、Z、Y、X + Y)。} 
		そうであれば(Z == ' - '){のprintf( "%2F%C%.2f =%2F \ N。"、X、Z、Y、X-Y)。} 
		そうであれば(Z == '*'){のprintf( "%2F%C%.2f =%2F \ N。"、X、Z、Y、X * Y)。} 
		そうであれば(Z == '/'){のprintf( "%2F%C%.2f =%2F \ N。"、X、Z、Y、X / Y)。}	 
		他にブレーク。
	} 

}

  

 

これは、無限ループに、前のステップの結果の実装を継続します。

検索項目がであなたが番号を入力すると、あなたが文字を入力した場合は、C言語は、システムはしかし、システムがこのフォーマットでデータを読み出すために、バッファからの読み取りに失敗しますので、エラーを検出しました。この文字または滞在した後バッファは、その後、システム、または読み取り失敗を読んで、常にバッファ内に残るこの文字は、読み取りシステムが終了することはありません  使用されるint、float型の変数が定義されているときに、データ入力にscanf関数(「%d個」)関数を使用して、非数値キーが押された場合、のscanf()関数はエラーを返し、すなわちD == 0。

この機能を使用して、我々は少しプログラムを変更、我々はOFFの文字を入力する際に​​入力して終了関数を計算するためのサイクルを達成することができます。

 

次のように編集されたコードは次のとおりです。

する#include <stdio.hの> 
int型のmain()
{ 
	int型、A = 1、I = 0、O = 0。
	フロートX、Y。
	チャーZ。
	int型D; 
	一方、(1)
	{	 
		D = scanf関数( "%F%%のF C"、およびX&Z、&Y)。
		IF(D == 0){のprintf( "退出!");休憩;}; 
		IF(Z == '+'){のprintf( "%2F%C%.2f =%2F \ N。"、X、Z、Y、X + Y)。} 
		そうであれば(Z == ' - '){のprintf( "%2F%C%.2f =%2F \ N。"、X、Z、Y、X-Y)。} 
		そうであれば(Z == '*'){のprintf( "%2F%C%.2f =%2F \ N。"、X、Z、Y、X * Y)。} 
		そうであれば(Z == '/'){のprintf( "%2F%C%.2f =%2F \ N。"、X、Z、Y、X / Y)。}	 
	} 
//少写一行代码的方法
//一方、(D = scanf関数( "%F%%のF C"、およびX&Z、&Y))
// {	 
//もし(D == 0){のprintf(」退出");!休憩;}; 
//もし(Z == '+'){のprintf( "%2F%C%.2f =%2F \ n"は、X、Z、Y、X + Y)。}
//そうでない場合は(Z == ' - '){のprintf( "%2F%C%.2f =%2F \ N。"、X、Z、Y、X-Y)。}
//そうでない場合は(Z == '*'){のprintf( "%2F%C%.2f =%2F \ n"は、X、Z、Y、X * Y)。} 
//そうであれば(Z == '/'){のprintf( "%2F%C%.2f =%2F \ N。"、X、Z、Y、X / Y)。}	 
//} 
}  

 

 

 

scanfの文字列を受信した場合、我々はループ缶のうち日間かどうかを判断するための変数を定義します!(問題は〜スリープ状態に!ハッピーを解決しました)

おすすめ

転載: www.cnblogs.com/ma1998/p/12081862.html