2017-10-28 144 views
-2

我在C程序中應該要求兩個數字並找到它們的LCM和GCF。但是,在請求這兩個數字之後,代碼將以非零狀態退出。 Link to code here,任何幫助將不勝感激。C代碼以非零狀態退出

#include <stdio.h> 

int main() 
{ 
    //Declare things 
    int i; 
    int num1,num2 = 0; 
    int foundLCM = 0; 
    int foundGCF = 0; 
    //Ask for input 
    printf("\nEnter a positive integer: "); 
    scanf("%i", &num1); 

    printf("\nEnter another positive integer: "); 
    scanf("%i", &num2); 
    //Set i to the bigger number 
    if(num1 >= num2) 
    { 
     int i = num1; 
    } 
    else 
    { 
     int i = num2; 
    } 

    //find the GCF 
    while(foundGCF == 0) 
    { 
     if(num1%i == 0 && num2%i == 0) 
     { 
      printf("\nGreatest Common Factor: %i\n", i); 
      foundGCF = 1; 
     } 

     i--; 
    } 

    //Find the LCM 
    while(foundLCM == 0) 
    { 
     if(i%num1 == 0 && i%num2 == 0) 
     { 
      printf("Lowest Common Multiple: %i", i); 
      foundLCM = 1; 
     } 

     i++; 
    } 

    //Kill 
    return 0; 
} 
+2

請在這裏發佈代碼 – Steve

回答

0

變量i未初始化。

t.c: In function 'main': 
t.c:21:7: warning: unused variable 'i' [-Wunused-variable] 
int i = num1; 
    ^
t.c:27:7: warning: unused variable 'i' [-Wunused-variable] 
int i = num2; 
    ^
t.c:37:7: warning: 'i' may be used uninitialized in this function [-Wmaybe-uninitialized] 
    printf("\nGreatest Common Factor: %i\n", i); 
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

你應該i = num1;同樣的事情int i = num2;

1

您需要刪除線21和27的i的重聲明,只是分別i值分配給num1num2更換int i = num1;。按照現在的情況,當在增量/減量中使用i時,它不會被初始化,這會導致程序崩潰。

另外,您需要在GCF循環之後和LCM循環之前將i恢復到其初始值。否則,如果沒有公共因素,它會給出錯誤的價值。我建議在其他變量中存儲初始值。

https://repl.it/NKgR/12

請注意,這是不計算GCF和LCM的最佳方式。您可以查看Euclid算法和實現以獲取更多信息。

相關問題