ISBN10から書籍の出版国名と出版社名を判定するプログラムを実装しています。
現段階では、group_codeとbook_codeをユーザに入力してもらい、それをもとにそれぞれの関数(getcountryname/getpublishname)から出版国名と出版社名を判定しようとしています。
以下のコードを入力値を
2 07 1234567
とすると、
国名:China,出版社名:サポートされていません
と出力され、なぜかbook_codeから出版社国名が判定されてしまいます。
group_codeから出版社国名が判定できるようにするにはどうすればよいでしょうか。
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int group_code[1];
int book_code[2];
char other_code[7];
}isbn10;
typedef struct{
int country_code;
char *country_name;
}country_info;
typedef struct{
int company_code;
char *company_name;
}publish_info;
char *getcountryname(isbn10 x);
char *getpublishname(isbn10 y);
int main(void) {
isbn10 mybook;
printf("調べたいISBN10を入力してください。ただしグループ記号(1桁)と出版社記号(2桁)、その他の記号(7桁)の間にはスペース必須。\n");
fflush(stdout);
if(scanf("%d %d %s",mybook.group_code,mybook.book_code,mybook.other_code)!=3){
printf("サポートされていません。\n");
return -1;
}
printf("国名:%s,出版社名:%s",getcountryname(mybook),getpublishname(mybook)); return 0;
}
char *getcountryname(isbn10 x){
static country_info countries[]={
{0,"English"},
{1,"English"},
{2,"French"},
{3,"German"},
{4,"Japan"},
{5,"Russia"},
{6,"サポートされていません"},
{7,"China"},
{8,"サポートされていません"},
{9,"サポートされていません"}
};
country_info *ph; for(ph=countries;(*ph).country_code<10;ph++){ if(x.group_code[0]==(*ph).country_code){ return (*ph).country_name; } } return "サポートされていません";
}
char *getpublishname(isbn10 y){
static publish_info publishes[]={
{0,"岩波書店"},
{1,"旺文社"},
{2,"朝日新聞社"},
{3,"偕成社"},
{4,"角川書店"},
{5,"学研"},
{6,"講談社"},
{7,"主婦の友社"},
{8,"集英社"},
{9,"小学館"}
};
publish_info *ps; for(ps = publishes;(*ps).company_code<10;ps++){ if(y.book_code[0]==0&&y.book_code[1]==(*ps).company_code){ return ps->company_name; } } return "サポートされていません";
}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。