C:读取过程中的结构分数

C:读取过程中的结构分数,c,struct,procedure,C,Struct,Procedure,我正在尝试创建一个程序,使用过程将数字读取为类型分数。这是我的代码(编译器在readFraction()第9行中给了我一个错误): 我知道我可以用readFraction(&a.num,&a.den)之类的方法来解决这个问题或a=readFraction()函数返回分数,但我想知道是否可以将分数作为参数传递。代码的问题在于C运算符的相对优先级。结构成员选择的优先级高于解引用运算符,因此子表达式*f.num表示“指向f.num的对象”,而不是指向f的对象的“成员num”。前者是错误的,因为f是指针

我正在尝试创建一个程序,使用过程将数字读取为类型分数。这是我的代码(编译器在readFraction()第9行中给了我一个错误):


我知道我可以用
readFraction(&a.num,&a.den)之类的方法来解决这个问题
a=readFraction()
函数返回分数,但我想知道是否可以将分数作为参数传递。

代码的问题在于C运算符的相对优先级。结构成员选择的优先级高于解引用运算符,因此子表达式
*f.num
表示“指向
f.num
的对象”,而不是指向
f
的对象的“成员
num
”。前者是错误的,因为
f
是指针,而不是结构或联合

可以通过添加括号覆盖默认优先级:

  scanf("%d/%d", &(*f).num, &(*f).den);
,但使用间接成员选择运算符更为惯用:

  scanf("%d/%d", &f->num, &f->den);

由于我们在这里讨论的是优先级,因此值得注意的是,
->
运算符的优先级高于
&
,因此在这种情况下不需要括号。

fraction.c:在函数“readFraction”中:fraction.c:9:21:错误:“f”是指针;你想用'->'吗?scanf(“%d/%d”,&*f.num,&*f.den);^->分数c:9:30:错误:“f”是指针;你想用'->'吗?scanf(“%d/%d”,&*f.num,&*f.den);^->
&*f.num
应该是什么?编译器会准确地告诉您需要进行哪些更改。进行这些更改。你认为“你是想使用'->'吗?”“当它指向点时是什么意思?@williampersell我想用scanf()给变量f赋值,它指向main()中的变量a谢谢,这完全有道理!
  scanf("%d/%d", &(*f).num, &(*f).den);
  scanf("%d/%d", &f->num, &f->den);