2013-03-24 150 views
0

這是一個非常複雜的代碼,但是忍受着我。在循環中使用調用函數

此代碼用於檢查迴文。我遇到的問題是不知道如何從另一個函數和循環中調用函數。

這是有問題的行:

if (new_num != rev) 
    { 
     while (higher != calc_reverse(higher) && lower != calc_reverse(lower)) 
    { 
     higher = calc_reverse(number++); 
     lower = calc_reverse(number--); 
    } 

下面是我的程序,它參與了錯誤下半年的代碼。 當我使用這個我只是得到「rev(數字)」打印在一個無限循環,直到我強制結束代碼。

//Function Declaration 
int calc_reverse(int new_num) 
{ 
//Local Declarations 
    int count = 0; // number of digits in the number 
    int rev = 0; //the reverse of the number 
    int last; //the last digit of the number 

//Calulations 
    while (new_num > 0) 
    { 
    last = new_num % 10; 
    rev = last + (rev * pow(10, count)); 
    new_num = new_num/10; 
    count++; 
    } 
    printf("rev %d \n", rev); 
    fflush(stdout); 
    return(rev); 
} 

//function Decleration 
void calc_closest(int count, int new_num, int rev, int number) 
{ 
//Local declerations 
    int higher = 12; //the higher palindrome 
    int lower = 12; // the lower palindrome 

    printf(" %d, %d \n", new_num, rev); 
    fflush(stdout); 
//Calculations 
    if (new_num == rev) 
    { 
     printf("The value input (%d) is a compact palindrome. \n", number); 
    } 

    if (new_num != rev) 
    { 
     while (higher != calc_reverse(higher) && lower != calc_reverse(lower)) 
    { 
     higher = calc_reverse(number++); 
     lower = calc_reverse(number--); 
    } 
    if (higher == new_num && lower == new_num) 
    { 
     printf("Closest palindromes to %d are: %d, %d \n", number, lower, higher); 
    } 
    else if(higher == new_num) 
    { 
     printf("Closest palindromes to %d are: %d \n", number, higher); 
    } 
    else if (lower == new_num) 
    { 
     printf("Closest palindromes to %d are: %d \n", number, lower); 
    } 
    } 
    return; 
} 

回答

1

您正在使用同一個變量「number」來統計up(number ++)和down(number--)。

這是行不通的。當你添加一個,然後減去一個,你剩下的開始的數字相同,讓你陷入無限循環。

您將需要使用兩個單獨的變量。

或者,您可以只使用一個升序計數器,從中計算較高的數字和較低的數字。例如:i = 0,1,2,3 ...,更高:數字+ i,更低:數字-i。這裏的「數字」永遠不會改變初始值。

+0

好吧我認爲這是有效的,我只需要調整代碼早期發生的一些事情(主要是相反的功能,因爲它似乎並不總是工作)。一旦我修復了這些部分,我會讓你知道。謝謝您的幫助!!! – 2013-03-24 22:58:23