2016-11-04 5 views
-3

프로그램이 올바르게 빌드되었지만 무작위 숫자의 무한 루프가 발생하며 이유가 확실하지 않습니다. 나는c 무한 루프 오류

int getInt(void); 
double getDbl(void); 
void prnTitle(void); 
void prnFooter(double gTotal); 
void pause(void); 
double getDblLimited(double lowerLimit, double upperLimit); 
  1. 주석으로 주요 한 다음 테스터 프로그램과 완벽하게 실행해야 이정표 하나
  2. 귀하의 최종 이정표를 제출.

은 주석 주() 화살표

int main (void) 
{ 
    int iVal; 
    double dVal; 
    welcome(); 

    // testing prnTitle() 
    printf("listing header and footer with grand total:\n"); 
    prnTitle(); 



    // Testing prnFooter() 
    prnFooter(1234.5678); 
    printf("listing header and footer without grand total:\n"); 
    prnTitle(); 
    prnFooter(-1); 


    // Testing Pause() and clrKyb() 
    pause(); 


    // Testing getInt() 
    printf("Enter an integer: "); 
    iVal = getInt(); 
    printf("You entered: %d\n", iVal); 


    // Testing Get Int Limited 
    printf("Enter an integer between 10 an 20: "); 
    iVal = getIntLimited(10, 20); 
    printf("Your entered %d\n", iVal); 


    // Testing Get Double 
    printf("Enter a floating point number: "); 
    dVal = getDbl(); 
    printf("You entered: %0.2lf\n", dVal); 


    // Tesing Get Double Limited 
    printf("Enter a floating point number between 10.00 an 20.00: "); 
    dVal = getDblLimited(10.0, 20.0); 
    printf("You entered: %0.2lf\n", dVal); 



    printf("End of tester program for milestone one!\n"); 
    return 0; 
    } 


/* End Commenting out the main out*/ 

// implement your functions for milestone one down here: 
void welcome(void) 
{ 
    printf("---=== Grocery Inventory System ===---\n"); 

} 

void prnTitle(void) 
{ 
    printf("Row |SKU| Name \t | Price |Taxed| Qty | Min | Total |Atn \n"); 
    printf("----+---+--------------------+--------+-----+-----+-----+------------+|---\n"); 

} 
void prnFooter(double gTotal) 
{ 
    printf("--------------------------------------------------------+-----------------\n"); 
    //float gTotal = 1234.57; 
    while (gTotal > 0) 
    { 
     printf("%12.21f", gTotal); 
    } 
} 
void clrKyb(void) 
{ 
    char b; 
    while (b != '\n') 
    { 
     scanf("%c", &b); 
    } 

} 
void pause(void) 
{ 
    printf("Press <Enter> to continue..."); 

    clrKyb(); 

} 
int getInt(void) 
{ 
    //printf("Enter an interger:"); 
    int d; 
    char c; 
    scanf("%d%c", &d, &c); 
    while (c != '\n') 
    { 
     printf("Invalid integer, please try again "); 
     scanf("%d%c", &d, &c); 
    } 
    return d; 
} 
int getIntLimited(int lowerLimit, int upperLimit) 
{ 
    int a; 
    //printf("Enter an integer between %d and %d:", lowerLimit, upperLimit); 
    scanf("%d", &a); 
    while (a <= lowerLimit || a >= upperLimit) 
    { 
    // printf("Invalid value, %d < value < %d:", lowerLimit, upperLimit); 
     scanf("%d", &a); 
    } 
    return a; 
} 
double getDbl(void) 
{ 
    double d; 
    char c; 
// printf("Enter a floating point number:"); 
    scanf("%lf,%c", &d, &c); 
    while (c != '\n') 
    { 
     printf("Invalid number, please try again "); 
     scanf("%lf%c", &d, &c); 
    } 
    return d; 
} 

double getDblLimited(double lowerLimit, double upperLimit) 
{ 
    double a; 
    printf("Enter a floating point number between %f and %f:", lowerLimit, upperLimit); 
    scanf("%lf", &a); 
    while (a <= lowerLimit || a >= upperLimit) 
    { 
     printf("Invalid value, %f < value < %f:", lowerLimit, upperLimit); 
     scanf("%lf", &a); 

    } 
    return a; 
    return 0; 
} 
+1

디버깅하여 무한 루프가 발생한 지점을 파악 했습니까? 당신의 주된면에서, 인쇄 진술을 배치하여 코드가 어디서 멈추는지를 확인하십시오. – Carcigenicate

+0

죄송합니다. 오류는 print 문 다음에 void prnFooter로 시작됩니다. – ortz3

답변

0
void prnFooter(double gTotal) 
{ 
    printf("--------------------------------------------------------+-----------------\n"); 
    //float gTotal = 1234.57; 
    while (gTotal > 0) 
    { 
     printf("%12.21f", gTotal); 
    } 
} 

당신은 루프 내부 gTotal의 값을 수정하지 후 다음 두 문자를 삭제합니다. 루프가 0보다 큰 경우 영원히 0보다 커지므로 무한 루프가됩니다.

+0

감사합니다. 죄송합니다. 오류가 발생한 곳을 잊어 버렸습니다. – ortz3

+0

@ ortz3 Np. 다음에는 문제를 완전히 설명했는지 확인하십시오. 이것이 당신을 도운다면, 투표를하고 답변을 수락하십시오. – Carcigenicate