c - 为什么我们不能将结构返回给函数?

标签 c function structure

为什么我们不能返回一个结构作为返回值?我也想打印它吗?我想打印返回结构的变量。

#include <stdio.h>

struct distance
{
    int feet;
    float inch;
};

distance add(struct distance d1,struct distance d2);

distance d3;
int main()
{
    struct distance dist1, dist2,dist3;
    printf("first distance\n");
    scanf("%d",&dist1.feet);
    scanf("%f",&dist1.inch);
    printf("second distance\n");
    scanf("%d",&dist2.feet);
    scanf("%f",&dist2.inch);
    dist3 = add(dist1,dist2);
    printf("sum of distances= %d\'-%.1f\"",dist3.feet,dist3.inch);
    return dist3;
}

 distance add(struct distance d1,struct distance d2){
    //Adding distances d1 and d2 and storing it in d3
    d3.feet = d2.feet+d1.feet;
    d3.inch = d2.inch+d1.inch;
    if(d3.inch>12){
        d3.inch-=12;
        ++d3.feet;
    }
}

显示如下错误信息 prog.c:7:1: 错误:未知类型名称“距离” distance add(结构距离d1,结构距离d2);

最佳答案

是的,你当然可以返回一个结构,但你必须使用 return 语句实际返回它:

struct distance add(struct distance d1, struct distance d2)
{
  d1.feet += d2.feet;
  d1.inches += d2.inches;
  while(d1.inches > 12)
  {
    ++d1.feet;
    d1.inches -= 12;
  }
  return d1;  /* Return the result. */
}

也没有必要创建 d3(当然不是全局的!),只需使用其中一个参数作为新值,然后返回即可。

使用循环来调整溢出更好,所以我也这样做了。

最后,你没有 typedef struct distance 所以你不能只说 distance 作为返回类型,它必须像参数一样是 struct distance

关于c - 为什么我们不能将结构返回给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43141277/

相关文章:

eclipse - 如何为gradle subProjects创建目录结构?

ios - 来自蓝牙模块的未知数据类型

C素数分解(循环失败?)

objective-c - 随机 C/Objective-C 问题

指针和整数之间的比较[默认启用]

sql - 这个地址数据库有多糟糕?

c - Linux 控制台; CLS 未找到错误

algorithm - 将此算法转换为不使用递归的过程

c - 将 C 数组作为 char* 函数参数传递时出错

c - 结构数组中的内存对齐