0

我正在尝试通过在 C 上使用 struct 来解决问题。

它应该找到 3 个值中最大的一个,如果它是素数,则添加到所有其他值。如果不只是将最大的数字返回给主函数。我找不到我做错的地方。

#include <stdio.h>
#include <stdlib.h>
struct q {
    int a, b, c, max;
}d;

func(struct q d1)
{
    int max1;
    max1=0;
    int w=0;
    int i;
    if (d1.a>d1.b && d1.a>d1.c)
        max1=d1.a;
    if (d1.b>d1.a && d1.b>d1.c)
        max1=d1.b;
    if (d1.c>d1.b && d1.c>d1.a)
        max1=d1.c;

    for(i=2;i<max1;i++)
    {
        if (max1%i==0)
            w=1;
    }
    if (w==0)
    {
        d1.a=d1.a+max1;
        d1.b=d1.b+max1;
        d1.c=d1.c+max1;
    }
    if (w==1)
    {
            d1.max=max1;
    }
}

int main()
{
    int i;
    for(i=0;i<1;i++)
    {
        d.max=0;
        puts("enter value of a b c:");
        scanf("%d %d %d",&d.a,&d.b,&d.c);
        func(d);
        if(d.max==0) printf("%d %d %d",d.a,d.b,d.c);
        else printf("%d",d.max);
    }

}
4

2 回答 2

3

我不确定算法逻辑。但错误是——

func(struct q d1) 

func(d);

d1是传递参数的副本d。因此,修改d1, 不会影响传递的参数d

您实际上应该将对象的地址传递d给函数。

于 2013-03-31T15:56:02.317 回答
0

在 func() 你必须传递结构的地址......因为如果你只传递 struct 变量,那么它的值会受到影响,直到只有那个缓冲区......

于 2013-03-31T16:12:56.560 回答