2013-03-31 35 views
0

约结构我想利用结构上C.算法基于C

应该找到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); 
    } 

} 

回答

3

我不确定算法的逻辑。但是,错误是 -

func(struct q d1) 

func(d); 

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

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

在FUNC
+1

方式:传递一个指针函数,通过指向结构的指针修改结构而不是结构的副本。 –

+0

非常感谢你,最后我得到了如何使用指针 –

0

(),您必须通过结构的地址... 因为如果你只传递结构体变量那么它的价值会受到影响,直到只有缓冲......