关于##include#的问题,如何解决?

程序不会报错,但在输入第一个数后就没有后续。


#include<stdio.h>
#include<stdlib.h>

struct Date
{
    int year;
    int month;
    int day;
};

struct Book
{
    char title[128];
    char author[40];
    float price;
    struct Date date;
    char publisher[40];
};

void getinput(struct Book *book);
void pb(struct Book *book);
void initlbr(struct Book *lbr[],int *b);
void plbr(struct Book *lbr[],int *b);
void release(struct Book *lbr[],int *b);

void getinput(struct Book *book)
{
    printf("name:");
    scanf("%s",book->title);
    printf("author:");
    scanf("%s",book->author);
    printf("price:");
    scanf("%f",&book->price);
    printf("day:");
    scanf("%d-%d-%d",&book->date.year,&book->date.month,&book->date.day);
    printf("pr:");
    scanf("%s",book->publisher);
}

void pb(struct Book *book)
{
    printf("name:%s\n",book->title);
    printf("author:%s\n",book->author);
    printf("price:%.2f\n",book->price);
    printf("day:%d-%d-%d\n",book->date.year,book->date.month,book->date.day);
    printf("pr:%s\n",book->publisher);
}

void initlbr(struct Book *lbr[],int *b)
{
    int i;
    for(i = 0;i < *b;i++)
    {
        lbr[i] = NULL;
    }
}

void plbr(struct Book *lbr[],int *b)
{
    int i;
    for(i = 0;i < *b;i++)
    {
        if(lbr[i] != NULL)
        {
            pb(lbr[i]);
            putchar('\n');
        }
    }
}

void release(struct Book *lbr[],int *b)
{
    int i;
    for(i = 0;i < *b;i++)
    {
        if(lbr[i] != NULL);
        {
            free(lbr[i]);
        }
    }
}


int main(void)
{
    int *b;
    int c;
    printf("Please set the maxium of books in the lbr:");
    scanf("d",&c);
    b = &c;
    struct Book *lbr[c];
    struct Book *ptr = NULL;
    int a,index = 0;
    
    initlbr(lbr,b);
    
    while(1)
    {
        printf("Do you want to register a book?\n");
        do
        {
            a = getchar();    
        }while(a != 'y' && a != 'n');
        
        if (a == 'y')
        {
            if (index < *b)
            {
                ptr = (struct Book *)malloc(sizeof(struct Book));
                getinput(ptr);
                lbr[index] = ptr;
                index++;
                putchar('\n');
            }
        }
        else
        {
            printf("no more space");
            break;
        }    
    }
    printf("over");
    plbr(lbr,b);
    release(lbr,b);
    
    return 0;
} 

scanf输入问题,应该是:

scanf("%d",&c);

上图

img


代码修改

#include <stdio.h>
#include <stdlib.h>

struct Date {
  int year;
  int month;
  int day;
};

struct Book {
  char title[128];
  char author[40];
  float price;
  struct Date date; 
  char publisher[40];
};

void getinput(struct Book *book);
void pb(struct Book *book);
void initlbr(struct Book *lbr[], int b);
void plbr(struct Book *lbr[], int b);
void release(struct Book *lbr[], int b);

void getinput(struct Book *book) {
  printf("name:");
  scanf("%s", book->title);
  printf("author:");
  scanf("%s", book->author);
  printf("price:");
  scanf("%f", &book->price);
  printf("day:");
  scanf("%d-%d-%d", &book->date.year, &book->date.month, &book->date.day);
  printf("pr:");
  scanf("%s", book->publisher);
}

void pb(struct Book *book) {
  printf("name:%s\n", book->title);
  printf("author:%s\n", book->author);
  printf("price:%.2f\n", book->price);
  printf("day:%d-%d-%d\n", book->date.year, book->date.month, book->date.day);
  printf("pr:%s\n", book->publisher);
}

void initlbr(struct Book *lbr[], int b) {
  int i;
  for (i = 0; i < b; i++) {
    lbr[i] = NULL; 
  }
}

void plbr(struct Book *lbr[], int b) {
  int i;
  for (i = 0; i < b; i++) {
    if (lbr[i] != NULL) {
      pb(lbr[i]);
      putchar('\n');
    }
  }
}

void release(struct Book *lbr[], int b) {
  int i;
  for (i = 0; i < b; i++) {
    if (lbr[i] != NULL) {
      free(lbr[i]);
    }
  }
}

int main(void) {
  int c;
  printf("Please set the maxium of books in the lbr:");
  scanf("%d", &c);

  struct Book *lbr[c];

  struct Book *ptr = NULL;
  int a, index = 0;

  initlbr(lbr, c);

  while (1) {
    printf("Do you want to register a book?\n");

    do {
      a = getchar();
    } while (a != 'y' && a != 'n');

    if (a == 'y') {
      if (index < c) {
        ptr = (struct Book*)malloc(sizeof(struct Book));
        getinput(ptr);
        lbr[index] = ptr;
        index++;
        putchar('\n');
      } else {
        printf("no more space\n");
        break;
      }
    } else {
      break;
    }
  }

  printf("over\n");
  plbr(lbr, c);
  release(lbr, c);

  return 0;
}


第90行: scanf("d",&c); “d” 里少了 ‘%’,应为: scanf("%d",&c);

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^