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

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 vue3+element-plus页面崩溃
  • ¥15 像这种代码要怎么跑起来?
  • ¥15 怎么改成循环输入删除(语言-c语言)
  • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection
  • ¥15 nginx代理报502的错误
  • ¥100 当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧
  • ¥15 图示五个参数的模型校正是用什么方法做出来的。如何建立其他模型
  • ¥100 描述一下元器件的基本功能,pcba板的基本原理