我正在用C编写一个程序,该程序应该要求两个数字并找到他们的LCM和GCF。但是,在询问这两个数字后,代码才会以非零状态退出。 Link to code here,我们将不胜感激。
#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;
}
答案 0 :(得分:1)
您需要删除第21行和第27行的i
重新声明,并分别将num1
的值分配给num2
和i
。就目前而言,i
在递增/递减中使用时不会被初始化,这会导致程序崩溃。
此外,您需要在GCF循环之后和LCM循环之前将sched_getcpu()
恢复为其初始值。否则,在没有共同因素的情况下,它会给出错误的价值。我建议将初始值存储在其他变量中。
请参阅question
请注意,这不是计算GCF和LCM的最佳方法。您可以查看Euclid算法和实现以获取更多信息。
答案 1 :(得分: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);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
您应该int i = num1;
替换i = num1;
int i = num2;