2016-10-17 15 views
-1

浮動小数点数(たとえば48.3)を入力すると、48.30ではなく48.00と表示され、空白文字列を入力しようとするとすぐにプログラムが終了します。私は、この問題を解決する方法を助けが必要ですか?ユーザの入力を処理する

int integer; 
char a[50]; 

float fnum; 
char b[50]; 


printf("Please enter an integer : "); 
scanf("%s",&a); 

integer = atoi(a); 

printf("\nPlease enter a floating-point number : "); 
scanf("%s", &b); 

fnum = atoi(b); 

printf("Output : \n"); 

printf("%i + %.2f = %.2f \n", integer,fnum,(integer+fnum)); 
printf("%i - %.2f = %.2f \n", integer,fnum,(integer-fnum)); 
printf("%i * %.2f = %.2f \n", integer,fnum,(integer*fnum)); 
+1

整数を入力します。。 'int'を返しatoi''のscanf( "%sの"、&a); 'うんません.... – John3136

+1

'あなたは良いCのチュートリアルを開始する必要があり –

+1

'scanf'の'%s'フォーマット指定子は*文字ポインタ*とのマッチを期待し、*文字列*を読み込むために使用されます。 '%d'フォーマット指定子は整数に使用されます。 '整数= atoi(a);')は以前に 'int integer;'を宣言していないかぎり、かなり意味がないように見えます[最小限の完全で検証可能な例の作成方法**] (http://stackoverflow.com/help/mcve) –

答えて

2

あなたはatoiを呼び出すことによって整数に文字列bを変換しています。あなたは浮動小数点数に変換したいので、atofを使用します。

fnum = atof(b); 
+0

'if(scanf("%f "、&b)== 1)'は浮動小数点への変換が実際に行われたことを検証する方法を提供します( 'if(scanf(" %d "、&a)== 1)' for int)、 'atoi'と' atof'はバリデーションに関して何も提供しません。 –

+0

'strtod()'を使って文字列をdoubleに変換することもできます。もう少し注意が必要ですが、 'strtol()'とその親戚を使って文字列をさまざまなタイプの整数に変換することができます。これらのすべては、変換が成功したかどうかを知らせる情報を提供しますが、結果を解釈する際には注意が必要です(そして、 'strtol()'の場合、いくつかの注意が必要です)。 –

1

atoi関数がintを返します。 atofは浮動小数点数を返します。

int integer; 
char a[50]; 

float fnum; 
char b[50]; 


printf("Please enter an integer : "); 
scanf("%s",&a); 

integer = atoi(a); 

printf("\nPlease enter a floating-point number : "); 
scanf("%s", &b); 

fnum = atof(b); 

printf("Output : \n"); 

printf("%d + %.2f = %.2f \n", integer,fnum,(integer+fnum)); 
printf("%d - %.2f = %.2f \n", integer,fnum,(integer-fnum)); 
printf("%d * %.2f = %.2f \n", integer,fnum,(integer*fnum)); 

関連する問題