做一个图书馆数据的输入程序,用结构体,第一行输入书本个数,之后每一行输入顺序依次是:书名(char),书本编号(int),书本地址(int)。
问题:第一行输入的书本个数无论是多少,之后最多只能输入3行。
代码如下:
#include
#include
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//gets();
scanf("%s%f%d",library[b].name,&library[b].cost,&library[b].id);
(library[b].number)++;
}
参考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;
}
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
问题可能是由于输入时混淆了换行符导致的。可以尝试在输入完每一行后使用getchar()清空缓冲区,避免换行符对下一次输入造成干扰。此外,结构体中的name应该使用字符数组而不是字符指针,并在结构体定义中指定其最大长度,以避免缓冲区溢出。
以下是修改后的代码示例:
#include <stdio.h>
#include <string.h>
#define MAX_NAME_LENGTH 100
struct book {
int number;
char name[MAX_NAME_LENGTH];
int id;
};
int main() {
int n;
printf("请输入书本个数:\n");
scanf("%d", &n);
struct book library[100];
int i;
for (i = 0; i < n; i++) {
printf("请输入第%d本书的信息(书名 书本编号 书本地址):\n", i + 1);
scanf("%s%d%d", library[i].name, &library[i].number, &library[i].id);
getchar(); // 清空缓冲区
}
printf("输入完毕,共输入%d本书的信息:\n", n);
for (i = 0; i < n; i++) {
printf("第%d本书:名称=%s 编号=%d 地址=%d\n", i + 1, library[i].name, library[i].number, library[i].id);
}
return 0;
}
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
你的name没有分配内存就输入了。name应该定义成字符数组,或者用malloc函数分配内存。这个是定义成字符数组的改法:
#include<stdio.h>
#include<string.h>
int main()
{
int a,b;
int ch;
struct m{
int number;
char name[100];
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)++;
}
}
这是运行结果:
1.创建一个用户交互菜单
2.创建一个棋盘并初始化
3.打印一个棋盘
4.玩家落子
5.判定胜负关系
6.电脑落子
7.判定胜负关系
8.结束