使用 void 函数从结构中打印值时出现问题

问题描述 投票:0回答:1

我正在尝试制作一个程序,使用一个结构来存储作者的标题和一本书的页数。然后我希望它找到哪一本的页数最少,然后使用 void 函数来打印其详细信息。每当我运行代码时,它似乎都可以工作,但总是打印错误的值。我还不是 100% 熟悉结构,我想知道是否有人知道为什么这不起作用。


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

struct book{
    char title[N];
    char author[N];
    int pages[N];
};

void printbook(struct book);

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

    for(i=0;i<3;i++){
        printf("\n\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("\n\nTo vivlio me tis ligoteres selides exei ton titlo: %s",x.title);
    printf("\n\nTo vivlio me tis ligoteres selides exei ton suggrafea: %s",x.author);
    printf("\n\nTo vivlio me tis ligoteres selides exei arithmo selidwn: %d",x.pages);
}
c struct printf void
1个回答
0
投票

title
author
需要长于 3 个字符,仅允许容纳 2 个字符加上空终止符。
N
是书的数量,它不应该同时用作字符数。

pages
应该只是一个整数,而不是一个数组。然后当你用
scanf()
读取它时,你需要用
&
传递整数的地址。

您应该使用

N
作为
for
循环中的限制,而不是硬编码
3

您应该以换行符结束最后一行输出,下一个 shell 提示符不会打印在同一行。

#include <stdio.h>
#include <stdlib.h>
#define N 3
#define MAXTITLE 20
#define MAXNAME 30

struct book{
    char title[MAXTITLE];
    char author[MAXNAME];
    int pages;
};

void printbook(struct book);

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

    for(i=0;i<N;i++){
        printf("\n\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<N;i++){
        if(vivlio[i].pages<min){
            min = vivlio[i].pages;
            thesh = i;
        }
    }
    printbook(vivlio[thesh]);
    return 0;
}

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

您可能也不应该使用

%s
来读取名称和标题。这只会从输入中提取一个单词,因此您将无法输入带空格的姓名和标题。

© www.soinside.com 2019 - 2024. All rights reserved.