制作结构数组和整理单词时遇到的问题

时间:2017-03-13 15:57:31

标签: c arrays struct

我刚刚练习了使用指定变量编写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);
    }
}

出了什么问题?

2 个答案:

答案 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的另一个答案也可能适用于此。

仍有改进的余地。