我正在尝试制作一个程序,使用一个结构来存储作者的标题和一本书的页数。然后我希望它找到哪一本的页数最少,然后使用 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);
}
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
来读取名称和标题。这只会从输入中提取一个单词,因此您将无法输入带空格的姓名和标题。