2016-12-09 2 views
-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/с/ю/fscanf) ...). Читайте также о 'fflush' (или завершите каждую строку формата' printf' с помощью '\ n') –

+2

. Ваш вопрос с исправлением-моим кодом находится вне темы здесь. –

ответ

0

Кажется, что вы инициализировали переменную e до 0 в начале вашей программы. И у вас есть чек while (e == 0), где-то, когда условие B> A истинно, тогда e теперь изменяется на 1. Затем у вас есть (e == 1) и некоторый фрагмент кода для отображения вычислений и результатов, здесь значение e никогда не изменяется от одного к другому. Поскольку это всегда 1, условие while дает ему зеленый сигнал, чтобы продолжить цикл до бесконечности и как-то испортить ваши результаты на экране.

Смежные вопросы