一颗钻石 2023-03-26 17:41 采纳率: 0%
浏览 33

C语言结构体:图书馆数据查找系统输入问题

做一个图书馆数据的输入程序,用结构体,第一行输入书本个数,之后每一行输入顺序依次是:书名(char),书本编号(int),书本地址(int)。
问题:第一行输入的书本个数无论是多少,之后最多只能输入3行。
代码如下:

#include<stdio.h>
#include<string.h>
int main()
{   
    int a,b;
    int ch;
    
    struct m{
        int number;
        char *name;
        float cost;
        int id;
    }library[100];
    
    scanf("%d",&a);
    for(b=0;b<a;b++)
    {
        //gets();
        scanf("%s%f%d",library[b].name,&library[b].cost,&library[b].id);
        (library[b].number)++;    
    }
  • 写回答

4条回答 默认 最新

  • IT_service_mesh 2023-03-26 17:43
    关注

    参考GPT和自己的思路:您的代码存在几个问题。首先,结构体中的name成员变量应该是一个字符数组而不是一个指针。其次,在循环中应该判断输入的行数是否超过3行。最后,根据题目要求应该给每个图书对象初始化number成员变量为0,而不是在输入时递增。

    下面是修正后的代码:

    #include <stdio.h>
    #include <string.h>
    
    struct book {
        int number;
        char name[50];
        int id;
    };
    
    int main() {
        int book_count;
        scanf("%d", &book_count);
    
        struct book library[100];
        for (int i = 0; i < book_count; i++) {
            if (i >= 3) {
                printf("You can only input up to 3 books\n");
                break;
            }
            memset(library[i].name, 0, sizeof(library[i].name)); // 初始化字符串
            scanf("%s %d %d", library[i].name, &library[i].id, &library[i].number);
            library[i].number = 0; // 初始化number成员变量
        }
    
        // 输出输入的书籍信息
        for (int i = 0; i < book_count && i < 3; i++) {
            printf("Book %d: %s, ID: %d, number: %d\n", i + 1, library[i].name, library[i].id, library[i].number);
        }
    
        return 0;
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 3月26日

悬赏问题

  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振
  • ¥20 pip2.40更新pip2.43时报错
  • ¥15 换yum源但仍然用不了httpd