鱼C论坛

 找回密码
 立即注册
查看: 99|回复: 1

[已解决]结构体指针作为函数参数

[复制链接]
发表于 2024-10-10 21:37:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求助:编译器提醒
14        7        D:\code\C\homework\九\1\新文件3.cpp        [错误] 'void D(main()::Date*)', declared using local type 'main()::Date', is used but never defined [-fpermissive]

这是为什么?
#include <stdio.h>

int main()
{
        struct Date
        {
                int year;
                int month;
                int day;
        }date;
        
        struct Date *p;
        p = &date;
        void D(struct Date *p);
        
        printf("请输入年 月 日:\n");
        scanf("%d %d %d",p->year,p->month,p->day);
        
        D(p);
        
        return 0;
}

void D(struct Date *p)
{
        int i,n=0;
        for(i = 1;i < p->month;i++)
        {
                
                        switch(i)
                        {
                                
                                case 1:
                                case 3:
                                case 5:
                                case 7:
                                case 8:
                                case 10:
                                case 12:n=n+31;break;
                                 case 2:n=n+28;break;
                                case 4:
                                case 6:
                                case 9:
                                case 11:n=n+30;break;
                        }
        }
        
        if(p->year%4==0&&p->year%100!=0||p->year%400==0)
        {
                n = n+1;
        }
        
        n = n+p->day;
        
        printf("%d年%d月%d日是%d年的第 %d 天\n",p->year,p->month,p->day,p->year,n);
}
最佳答案
2024-10-10 21:37:28
你遇到的错误是因为你在 `main` 函数中定义的 `Date` 结构体是局部类型,这意味着它的作用范围仅限于 `main` 函数内。这导致在其他地方(如 `D` 函数)无法访问到这个结构体类型。

为了修复这个问题,可以将 `Date` 结构体的定义移到函数外部,使其成为一个全局可访问的类型,像这样:
#include <stdio.h>

struct Date
{
    int year;
    int month;
    int day;
};

void D(struct Date *p);

int main()
{
    struct Date date;
    struct Date *p;

    p = &date;
    
    printf("请输入年 月 日:\n");
    scanf("%d %d %d", &p->year, &p->month, &p->day);
    
    D(p);
    
    return 0;
}

void D(struct Date *p)
{
    int i, n = 0;
    for(i = 1; i < p->month; i++)
    {
        switch(i)
        {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12: n = n + 31; break;
            case 2: n = n + 28; break;
            case 4:
            case 6:
            case 9:
            case 11: n = n + 30; break;
        }
    }
    
    if((p->year % 4 == 0 && p->year % 100 != 0) || p->year % 400 == 0)
    {
        n = n + 1;
    }
    
    n = n + p->day;
    
    printf("%d年%d月%d日是%d年的第 %d 天\n", p->year, p->month, p->day, p->year, n);
}

这里我还修正了 `scanf` 的用法,你需要传递变量的地址给 `scanf`。请注意对 `scanf` 参数的修改:`&p->year`, `&p->month`, `&p->day`。这样代码就能正确编译和运行了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-10-10 21:37:28 | 显示全部楼层    本楼为最佳答案   
你遇到的错误是因为你在 `main` 函数中定义的 `Date` 结构体是局部类型,这意味着它的作用范围仅限于 `main` 函数内。这导致在其他地方(如 `D` 函数)无法访问到这个结构体类型。

为了修复这个问题,可以将 `Date` 结构体的定义移到函数外部,使其成为一个全局可访问的类型,像这样:
#include <stdio.h>

struct Date
{
    int year;
    int month;
    int day;
};

void D(struct Date *p);

int main()
{
    struct Date date;
    struct Date *p;

    p = &date;
    
    printf("请输入年 月 日:\n");
    scanf("%d %d %d", &p->year, &p->month, &p->day);
    
    D(p);
    
    return 0;
}

void D(struct Date *p)
{
    int i, n = 0;
    for(i = 1; i < p->month; i++)
    {
        switch(i)
        {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12: n = n + 31; break;
            case 2: n = n + 28; break;
            case 4:
            case 6:
            case 9:
            case 11: n = n + 30; break;
        }
    }
    
    if((p->year % 4 == 0 && p->year % 100 != 0) || p->year % 400 == 0)
    {
        n = n + 1;
    }
    
    n = n + p->day;
    
    printf("%d年%d月%d日是%d年的第 %d 天\n", p->year, p->month, p->day, p->year, n);
}

这里我还修正了 `scanf` 的用法,你需要传递变量的地址给 `scanf`。请注意对 `scanf` 参数的修改:`&p->year`, `&p->month`, `&p->day`。这样代码就能正确编译和运行了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 15:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表