我刚刚练习了使用指定变量编写2个(或更多)书籍的结构数组。从键盘插入变量,然后找出Publisher是否是" Kim Dong"然后将Book的价格改为0。
这是我的代码[我认为在整理步骤时出现问题但无法找出原因:((]:
typedef struct book {
char *author[2000];
char *id[2000];
char *name[2000];
int *price;
char *publisher[2000];
} sach;
main()
{
int i;
sach Books[10];
for(i = 0; i < 2; i++)
{
printf("Nhap thong tin cua sach thu %d:\n", i+1);
fflush(stdin);
scanf("%s", &Books[i].name);
fflush(stdin);
scanf("%s", &Books[i].author);
fflush(stdin);
scanf("%s", &Books[i].id);
fflush(stdin);
scanf("%d", &Books[i].price);
fflush(stdin);
scanf("%s", &Books[i].publisher);
}
char NXB[8] ="KimDong";
for(i = 0; i < 2; i++)
{
int j = 0;
while( ((int)NXB[j]) == ((int)Books[i].publisher[j]) )
{
j++;
}
if(j == 6)
{
Books[i].price = 0;
}
}
for(i = 0; i < 2; i++)
{
printf("\nTen sach: %s", Books[i].name);
printf("\nID sach la: %s", Books[i].id);
printf("\nTac gia la: %s", Books[i].author);
printf("\nNXB la: %s", Books[i].publisher);
printf("\nGia sach la: %d", Books[i].price);
}
}
出了什么问题?
答案 0 :(得分:0)
对于字符串比较,请使用char1[len] = '\0'
。
请注意,如果strcmp(str1,str2)
等于str1
,则返回值将为0.与类似函数的通常行为相反。
答案 1 :(得分:0)
不确定你真正想要的是什么,但它可能是这样的:
#include <stdio.h>
typedef struct book {
char author[2000];
char id[2000];
char name[2000];
int price;
char publisher[2000];
}sach;
int main() {
int i;
sach Books[10];
for (i = 0; i<2; i++) {
printf("Nhap thong tin cua sach thu %d:\n", i + 1);
scanf("%s", &Books[i].name);
scanf("%s", &Books[i].author);
scanf("%s", &Books[i].id);
scanf("%d", &Books[i].price);
scanf("%s", &Books[i].publisher);
}
char NXB[8] = "KimDong";
for (i = 0; i<2; i++) {
int j = 0;
while ((NXB[j]) == (Books[i].publisher[j])) {
j++;
}
if (j == 6) {
Books[i].price = 0;
}
}
for (i = 0; i<2; i++) {
printf("\nTen sach: %s", Books[i].name);
printf("\nID sach la: %s", Books[i].id);
printf("\nTac gia la: %s", Books[i].author);
printf("\nNXB la: %s", Books[i].publisher);
printf("\nGia sach la: %d", Books[i].price);
}
}
fflush(stdin)
无用BTW。
关于strcmp
的另一个答案也可能适用于此。
仍有改进的余地。