请帮我发现我的错误

时间:2014-03-15 01:59:04

标签: c

嘿我正在编写一个添加分数的简单程序。 但每当我运行程序时,它都不会执行操作。 它只扫描输入,但没有输出。

请发现我的错误! >>>>>>>不能使用FLOATS<<<<<<<<<<

#include <stdio.h> 

int main ( void )

{
        int lcd, d1, d2, num1, num2, sum;

       printf("Enter the first number:");
       printf("Enter the numerator:");
         scanf("%d", num1);
       printf("Enter the denominator:");
         scanf("%d", &d1);

       printf("Enter the second number:");
       printf("Enter the numerator:");
         scanf("%d", &num2);
       printf("Enter the denominator:");
         scanf("%d", &d2);


       for (lcd = d1; lcd % d2 != 0; lcd+= d1);


       num1 *= lcd / d1;
       num2 *= lcd / d2;

       sum = num1 + num2;

       printf("%d", sum); 



       return 0; 
}

3 个答案:

答案 0 :(得分:2)

scanf必须收到指针

scanf("%d", num1) - &gt; scanf("%d", &num1)

因为scanf使用按引用调用。那是什么?请参阅以下代码。

#include <stdio.h>

void foo(int i)
{
    i = 1;
}
void bar(int *pi)
{
    *pi = 1;
}

int main()
{
    int a = 2;

    foo(a);
    printf("%d", a); /* output is 2 */

    bar(&a);
    printf("%d", a); /* output is 1 */
}

foo(a)中,我们使用按值调用。这意味着当我们调用a时,foo复制i = 1的代码foo仅更改a的副本,并且不会更改a的实际值。

bar(&a)中,我们使用按引用调用。你能找到区别吗?是的,它是bar(&a),而不是bar(a)。 “&”运算符获取a的指针,我们用指针调用bar。因此pi引用a*pi = 1成功更改a的实际值。


这里有一个真实的例子:printfscanf

int i = 0;
printf("output number : %d\n", i);
scanf("%d", &i); /* input number */

printf不需要更改其参数,因此它使用call-by-value。

但是,scanf接收用户的输入并将其参数更改为用户的输入。所以它使用call-by-reference。因此,我们应该使用&i,而不是i

答案 1 :(得分:0)

它需要那么复杂吗?为什么不把分子除以分母?

另外,你使用整数。我想你想要漂浮物。

#include <stdio.h> 

int main ( void )

{
    int d1, d2, num1, num2;

   printf("Enter the first number:");
   printf("Enter the numerator:");
     scanf("%d", &num1);
   printf("Enter the denominator:");
     scanf("%d", &d1);

   printf("Enter the second number:");
   printf("Enter the numerator:");
     scanf("%d", &num2);
   printf("Enter the denominator:");
     scanf("%d", &d2);

   printf("%f", 
       ((float) num1 / (float) d1) + ((float) num2 / (float) d2)
   ); 

   return 0; 
}

答案 2 :(得分:0)

如果要计算两个分数的非简化总和,只需使用以下公式

a/b + c/d = (a*d + c*b)/(b*d)

因此,以下代码可用于实现您的目标

#include <stdio.h> 

int main ( void )

{
    int den1, den2, num1, num2, sum_num, sum_den;

    printf("Enter the first number:\n");
    printf("\tEnter the numerator:");
    scanf("%d", &num1);
    printf("\tEnter the denominator:");
    scanf("%d", &den1);

    printf("Enter the second number:\n");
    printf("\tEnter the numerator:");
    scanf("%d", &num2);
    printf("\tEnter the denominator:");
    scanf("%d", &den2);

    sum_num = num1 * den2 + num2 * den1;
    sum_den = den1 * den2;

    printf("sum = %d/%d\n", sum_num, sum_den);

    return 0; 
}