2016-11-04 90 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. 你的最後一個里程碑應該用下面的測試程序完美運行時註釋掉爲主。

註釋掉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

您是否調試過找出無限循環發生的位置?在你的main中,放置print語句來查看代碼停止前進的位置。 – Carcigenicate

+0

對不起我的壞。錯誤在打印語句 – ortz3

回答

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

你從來沒有修改的gTotal循環內的值之後刪除接下來的兩個字符。如果它大於0進入循環,它將永遠大於0,因此是無限循環。

+0

之後在void prnFooter中開始謝謝,並且對不起,我忘了提及發生錯誤的位置 – ortz3

+0

@ ortz3 Np。但是,下一次,請確保你完全描述了這個問題。如果這對你有幫助,請投票並接受答案。 – Carcigenicate