You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用void函数打印结构体书籍信息时输出值异常的问题

你的结构体定义错误导致页数计算异常

你的代码核心问题是结构体定义错误,把单本书的页数声明成了数组,而非单个整数。以下是具体问题和修正方案:

1. 结构体定义错误

原结构体中:

struct book{
    char title[N];
    char author[N];
    int pages[N]; // 错误:每本书的页数是单个整数,不是数组
};

每本书仅对应一个页数数值,应将pages定义为单个int类型,而非数组。

2. 输入页数时的地址错误

原代码中scanf("%d",vivlio[i].pages);,若pages是数组,此处传递的是数组首地址;修正为单个int后,需传递变量地址:scanf("%d", &vivlio[i].pages);

3. 最小值计算的类型错误

原代码中min = vivlio[0].pages;,若pages是数组,实际是把数组地址赋值给int类型的min,会导致完全错误的数值比较。修正后直接取vivlio[0].pages即可。

4. 打印页数时的错误

原printbook函数中printf("%d",x.pages);,若pages是数组,此处打印的是数组地址而非页数数值。修正后直接打印x.pages。

修正后的完整代码

#include <stdio.h>
#include <stdlib.h>
#define N 3

struct book{
    char title[N];
    char author[N];
    int pages; // 改为单个整数
};

void printbook(struct book);

int main(){
    int i,thesh;
    int min;
    struct book vivlio[N];

    for(i=0;i<3;i++){
        printf("\ndwse titlo tou vivliou: ");
        scanf("%s",vivlio[i].title);
        printf("\ndwse suggrafea tou vivliou: ");
        scanf("%s",vivlio[i].author);
        printf("\ndwse selides tou vivliou: ");
        scanf("%d", &vivlio[i].pages); // 传递变量地址
    }
    min = vivlio[0].pages;
    thesh = 0;

    for(i=1;i<3;i++){
        if(vivlio[i].pages < min){ // 直接比较页数数值
            min = vivlio[i].pages;
            thesh = i;
        }
    }
    printbook(vivlio[thesh]);
    return 0;
}

void printbook(struct book x){
    printf("\nTo vivlio me tis ligoteres selides exei ton titlo: %s",x.title);
    printf("\nTo vivlio me tis ligoteres selides exei ton suggrafea: %s",x.author);
    printf("\nTo vivlio me tis ligoteres selides exei arithmo selidwn: %d",x.pages); // 打印页数数值
}

内容的提问来源于stack exchange,提问作者hpethera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 03:23:32