2017-10-28 12 views
-2

私はCで2つの数値を求め、LCMとGCFを見つけるプログラムを作っています。しかし、これらの2つの数字を尋ねた後、コードはゼロ以外のステータスで終了します。 Link to code here、任意の助けをいただければ幸いです。Cコードが0以外の状態で終了する

#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); 
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

あなたがライン21と27にiの再宣言を削除し、単にそれぞれnum1num2iの値を割り当てる必要がint i = num2;

1

ためi = num1;同じことによってint i = num1;を交換する必要があります。そのままでは、iはインクリメント/デクリメント時に初期化されず、プログラムがクラッシュします。

また、iをGCFループの後でLCMループの前に初期値に復元する必要があります。さもなければ、それは共通の要因がない場合に間違った価値を与えるでしょう。他の変数に初期値を格納することをお勧めします。

が、これはGCFおよびLCMを計算するための最適な方法ではありませんので、予めご了承くださいhttps://repl.it/NKgR/12

を参照してください。あなたは、より多くの情報のためにEuclidアルゴリズムと実装を見ることができます。

関連する問題