2016-09-15 3 views
0
#include<stdio.h> 

int main() 
{ 

    float p, r, t; 
    char ch = 'y'; 

    do 
    { 
     printf("Enter principal: "); 
     scanf("%f", &p); 

     printf("Enter rate: "); 
     scanf("%f", &r); 

     printf("Enter t: "); 
     scanf("%f", &t); 

     printf("SI = %f", (p *r * t)/100); 

     printf("\nCalculate SI one more time ? ('Y' for Yes, 'n' for no) : "); 
     ch = getchar(); 


    }while(ch == 'y'); 

    return 0; 

} 

出力:C:scanf関数を使用して入力を受け取ることができません()

Enter principal: 1334 
Enter rate: 4 
Enter t: 2 
SI = 106.720000 
Calculate SI one more time ? ('Y' for Yes, 'n' for no) : 
Process returned 0 (0x0) execution time : 5.359 s 
Press any key to continue. 

私はSI秒の時間を計算することができません見ることができるように?何が問題ですか ?

私も(scanf関数によってGETCHAR()を交換しようとした)が、それはまだ数は(それの一部であることができない最初の文字で)完了したときに読み取りを停止scanf

+1

'ch = getchar();'入力バッファにまだ 'newline'があり、前の' scanf'で残っています。 –

+0

@WeatherVaneあなたは何が起こっているかをplsで説明しますか? – Cody

+0

ほとんどの形式( '%c'ではなく)の' scanf'は、* leading *空白を取り除きますが、後続のものは入力バッファに残します。文字ベースの入力関数は、そこにあるものを正確に取ります。 –

答えて

1

が動作していません。読み取りを停止し

あなたscanf(tの場合)のだから、最後はちょうどRET前に、あなたは、Tの値を入力した後に押します。 getchar()は、'\n'RET)の次の文字を読み込み、 'y'と等しくないので終了します。

複数の入力方法を混在させないでください。 scanfを使用している場合は、scanfのままで、1つのチャート(scanf(" %c",&ch);)または他の解決策を読みます。 scanfの後にを追加してgetchar()と読み、それを無視してください。

関連する問題