使用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
相关产品推荐
相关产品推荐

