2016-11-04 1 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. コメントアウト主なものは以下のテスタープログラムを完全に実行する必要があるマイルストーン1
  2. 最終的な節目を提出。

はコメントアウトするにはmain()の矢印

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

デバッグして、無限ループの発生場所を把握しましたか?あなたのメインでは、コードの進展が止まる場所を確認するためにprintステートメントを配置します。 – 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の値を変更することはありません後に次の2つの文字を削除します。それが0より大きいループに入ると、それは永遠に0より大きくなり、したがって無限ループになります。

+0

ありがとうございました。もう一度申し訳ありません。どこでエラーが発生したかを忘れていました。 – ortz3

+0

@ ortz3 Np。次回は、問題を完全に記述してください。これがあなたを助けたら、投票して答えを受け入れてください。 – Carcigenicate