2016-12-09 1 views
-1

J'écris un code où l'utilisateur entre la valeur de départ, la valeur maximale et la valeur de pas. Je calcule correctement les résultats et toutes les formules sont correctes, mais il y a un problème. Je suis incapable d'arrêter la boucle pour que mes réponses s'affichent correctement. Quand je cours, ça ne fait que commencer la boucle et j'ai beaucoup de réponses spammées à l'écran.La programmation C ne peut pas terminer la boucle

#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

Pourquoi cela s'arrêterait-il si vous ne modifiez pas 'e' dedans? –

+1

Compilez avec toutes les informations d'avertissement et de débogage ('gcc -Wall -g') puis utilisez le débogueur (' gdb'). Lisez la documentation des fonctions que vous utilisez (en particulier de [printf] (http://en.cppreference.com/w/c/io/fprintf) & [scanf] (http://en.cppreference.com/w/c/io/fscanf) ...). Lisez aussi 'fflush' (ou mettez fin à chaque chaîne de format de contrôle' printf' avec un '\ n') –

+2

Votre question de correction de mon code est hors-sujet ici. –

Répondre

0

Vous semblez avoir initialisé la variable e à 0 au début de votre programme. Et vous avez un contrôle pendant (e == 0), quelque part quand la condition B> A est vraie alors e passe à 1 maintenant. Ensuite vous avez while (e == 1) et un morceau de code pour afficher les calculs et les résultats, ici la valeur de e ne change jamais d'un à autre chose. Comme c'est toujours 1, la condition while lui donne un signal vert pour continuer la boucle jusqu'à l'infini et en quelque sorte messup vos résultats sur l'écran.