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))에 대한 설명서를 읽으십시오./c/io/fscanf) ...). 'fflush'에 대해서도 읽거나 (각'printf' 제어 형식 문자열을'\ n'으로 끝내십시오) –

+2

당신의 fix-my-code 질문은 주제와 관련이 없습니다. –

답변

0

프로그램을 시작할 때 변수 e가 0으로 초기화 된 것처럼 보입니다. 그리고 B> A 조건이 참일 때 e가 1로 변경되는 동안 (e == 0) 체크를합니다. 다음으로 while (e == 1)과 계산 및 결과를 표시하는 코드가 있습니다. 여기서 e 값은 절대로 하나에서 다른 것으로 변경되지 않습니다. 항상 1이므로 while 조건은 녹색 신호를 보내 무한대까지 루프를 계속하고 결과를 화면에 표시합니다.