#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N sizeof(struct Category)
struct Category //define the category structure
{
int categoryNo; //Category no
char name[50]; //Name
struct category *next;
};
typedef struct Category category;
typedef category *pcategory;
void save_Category(pcategory p);
int main()
{
pcategory p;
char name[20];
int categoryNo;
char t;
do
{
p = (pcategory)malloc(N);
printf("请输入category:");
scanf("%s", name);
printf("请输入num:");
scanf("%d", &categoryNo);
p->categoryNo = categoryNo;
strcpy(p->name, name);
save_Category(p);
printf("添加成功!是否继续?(1.是 2.否)");
while (1)
{
t = getchar();
if (t == '1')
break;
else if (t == '2')
break;
}
if (t == '2')
break;
} while (1);
}
void save_Category(pcategory p) //保存主食信息
{
FILE *fp; //文件指针
fp = fopen("category.csv", "a+"); //以追加的方式打开文件
if (fp == NULL)
{
printf("cannot open file\n");
}
if (fwrite(p, N, 1, fp) != 1) //将p1所指向的1个大小为N的数据结构写入fp所指向的文件中
{
printf("file write error\n");
}
fclose(fp); //关闭文件
}
pcategory readCategoryFile() //从主食文件中读取用户信息,返回一个表头地址
{
FILE *fp; //文件指针
int n = 0; //记录链表 的结点数
pcategory head = NULL; //定义头指针
pcategory p2, p, pre;
fp = fopen("StapleFood.txt", "a+"); //以只读的方式打开文件
if (fp == NULL)
{
printf("cannot open file\n");
}Ï
else
{
while (!feof(fp)) //判断文件位置标志是否移动到文件末尾
{
n++;
p = (pcategory)malloc(N); //向内存申请一段空间
fread(p, N, 1, fp); //将fp所指向的文件中的内容赋给p
if (n == 1)
{
head = p;
p2 = p;
}
else //创建链表
{
pre = p2;
p2->next = p;
p2 = p;
}
}
p2->next = NULL;
}
if (n <= 2)
head->next = NULL;
else
pre->next = NULL;
fclose(fp); //关闭文件
return head; //返回头指针
}Ï
c语言 创建菜单的时候遇到了incompatible pointer types assigning to 'struct category *' from 'pcategory'的error
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 技术专家团-小桥流水 2021-12-08 18:52关注
结构体的定义错误,修改如下
struct Category //define the category structure { int categoryNo; //Category no char name[50]; //Name struct Category *next; //修改1 category };
(2)#define N sizeof(struct Category)宏定义预先编译,编译的时候还不知道结构体Category是什么东西,所以N的值得到的不一定是结构体的实际大小,不建议你这么用,直接 用变量吧,别用宏定义了
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 MATLAB代码补全插值
- ¥15 Typegoose 中如何使用 arrayFilters 筛选并更新深度嵌套的子文档数组信息
- ¥15 前后端分离的学习疑问?
- ¥15 stata实证代码答疑
- ¥50 husky+jaco2实现在gazebo与rviz中联合仿真
- ¥15 dpabi预处理报错:Error using y_ExtractROISignal (line 251)
- ¥15 在虚拟机中配置flume,无法将slave1节点的文件采集到master节点中
- ¥15 husky+kinova jaco2 仿真
- ¥15 zigbee终端设备入网失败
- ¥15 金融监管系统怎么对7+4机构进行监管的