2016-12-09 6 views
-1

私は、ユーザーが開始値、最大値、およびステップ値を入力するコードを記述しています。私は結果を正しく計算し、すべての公式は正しいですが、問題が1つあります。私は答えを正しく表示するためにループを止めることができません。私が走ると、ループが始まるだけで、画面上でスパムの多い多くの回答が得られます。Cプログラミングはループを終了できません

#include <stdio.h> 
#include <math.h> 

float funqcia(float x, float y, float k); 

int main() 
{ 
    float y; 
    float A; 
    float B; 
    float H; 
    float x; 
    float t; 
    int e=0; 
    int N=15; 
    int k = 0; 
    while(e==0) 
    { 
     printf("enter starting value here: "); 
     scanf("%fl",&A); 
     printf("enter maximum value: "); 
     scanf("%fl", &B); 
     printf("enter step: "); 
     scanf("%fl", &H); 
     if(B > A) 
     { 
      e=1; 
     } 
     else 
     { 
      printf("Sorry, stopping value should be higher than starting value."); 
     } 
    } 
    while(e==1) 
    { 
     printf("%s","_________________________________________________"); 
     printf("%s","\n"); 
     printf("%s","|            |"); 
     printf("%s","\n"); 
     printf("%s","|  Results are shown below     |"); 
     printf("%s","\n"); 
     printf("%s","|            |"); 
     printf("%s","\n"); 
     printf("%s","--------------------------------------------------"); 
     printf("%s","\n"); 
     t=0; 
     /*for(int i=0;i<N;i++) 
     { 
      if(i>0) 
      { 
       if (B<=y) 
       { 
       break; 
       } 
       t=pow(2,i)*pow(H,i-1); 
       x=x+t; 
       printf("%s","| "); 
       printf("%fl",x); 
       printf("%s","   | "); 
       funqcia(x,y); 
       printf("%s","\n"); 
      } 
      else 
      { 
       if (B<=y) 
       { 
        break; 
       } 
       x=A; 
       printf("%s","| "); 
       printf("%fl",x); 
       printf("%s","   | "); 
       funqcia(x,y); 
       printf("%s","\n"); 
      } 
     }*/ 
     for (int i=0;i<N;i++) 
     { 
      t=pow(2,i)*pow(H,i-1); 
      x=x+t; 
      if (i == 0) 
      { 
       x=A; 
      } 
      y=funqcia(x,y,k); 
      if (B<=k) 
      { 
       break; 
      } 
      else 
      { 
       printf("x=%fl\ty=%fl", x,y); 
       //} 
      } 
     } 
    } 
} 

float funqcia(float x, float y, float k) 
{ 
    y=((3+exp(x-1))/(1+pow(x,2)*(3-tan(x)))); 
    if(isinf(y)) 
    { 
     printf("this is infinity"); 
    } 
    else 
    { 
     printf("y: %fl",y); 
    } 
    k=y; 
    return k; 
} 
+5

なぜ 'e'を修正していないのですか? –

+1

すべての警告とデバッグ情報( 'gcc -Wall -g')でコンパイルし、デバッガ(' gdb')を使います。使用している機能(特に[printf](http://en.cppreference.com/w/c/io/fprintf)と[scanf](http://en.cppreference.com/w))のドキュメントを参照してください。/c/io/fscanf)...)。 'fflush'についても読んでください(それぞれの' printf'制御フォーマット文字列は '\ n'で終わります) –

+2

あなたのfix-my-codeに関する質問はここで話題にはなりません。 –

答えて

0

プログラムの開始時に変数eを0に初期化したようです。 while(e == 0)、B> A条件が真、eが1に変わったときのチェックがあります。次に、while(e == 1)と計算と結果を表示するコードがあります。ここではeの値は決して1から何かに変わりません。常に1であるため、while条件は無限になるまでループを継続させるための緑の信号を与え、何らかの形で結果を画面に表示します。

関連する問題