cara_celia 2018-06-01 09:56 采纳率: 0%
浏览 980
已结题

c语言 打印不出来?文件用得对吗

#include
#include
#include
#include
#define max 100
//定义全局变量
int isEmpty=0;//标志,判断链表是否为空

//!!!定义单链表结构体!!! <货物类型>
typedef struct Node{
char NAME[100];//各类型名称
int NUM; //各类型下的货物总数
struct Node*next;
}Node;

// 定义单个货物
typedef struct Goods{
char name[100];//货物名称
double price;//货物价格
int num;//货物库存
int id;//所属类型的id
}Goods;

//函数声明
void Create_File_List(); //创建文件
void add_kinds();//将种类信息录入文件中
Node*CreateList();//创建链表(将信息放到链表中)
void Print_List(Node*head);//打印链表

//主函数
void main()
{
int x;
Node head;
if(!(head=(Node *)malloc(sizeof(Node)))) //分配空间
{
printf("\n");
exit(1);
}
Create_File_List();//创建文件
printf("欢迎使用我的仓库管理系统!\n");
while(1)
{
//主菜单开始
printf("==========================\n");
printf("1.显示货物类型列表\n");
printf("2.增加货物类型\n");
printf("3.删除货物类型\n");
printf("4.货物入库\n");
printf("5.货物出库\n");
printf("6.库存显示\n");
printf("7.退出\n");
printf("==========================\n");
//主菜单结束
printf("选择1-7:");
scanf("%d",&x);
switch(x)
{
case 1:Print_List(head);break;
case 2:add_kinds();
CreateList();
break;
case 3:printf("
*****请输入要删除货物类型的编号:******\n");
break;
case 4:;break;
case 5:;break;
case 6:;break;
case 7:printf("bye!see you next time!\n");
exit(0);
break;
default:printf("input error!\nplaese input1-7");
}

}

}

//函数
//创建文件是否成功
void Create_File_List()
{
FILE fp;//需要在每个函数写这句吗
if ((fp = fopen("storehouse.txt","r"))==NULL) /
如果此文件不存在*/
{
if ((fp = fopen("student.txt","w"))==NULL)
{
printf( "无法建立文件!");

}
}
}
//录入货物信息到文件中
void add_kinds()
{
FILE*fp;
struct Node Node;
fp = fopen("storehouse.txt","a+");
Create_File_List();
printf("请输入货物名称:");
scanf("%s",&Node.NAME);
printf("请输入货物总数:");
scanf("%d",&Node.NUM);
fwrite(&Node,sizeof(Node),1,fp);//这两个fwrite有区别吗
fclose(fp);
}

//从已经写入的文件中读到链表中(函数功能:创建链表)
Node*CreateList()
{
Node*p,*head,*q;//p指针总是指向新申请的节点,q总是指向尾节点
p=(Node*)malloc(sizeof(Node));
head=p;//开辟头/尾节点内存 (头结点没有信息)
q=p;
q->next=NULL;//标志链表的结束
FILE*fp;
fp=fopen("storehouse.txt","r");
struct Node Node;
while(fread(&Node,sizeof(Node),1,fp)!=0)//从文件中读结构块体
{
//p=(Node*)malloc(sizeof(Node));
strcpy(p->NAME,Node.NAME);
p->NUM=Node.NUM;
//下面两句没看懂
q->next=p;//把新节点挂到尾节点后

q=q->next;//q指针指向新的尾节点
//第二句不就是q=p吗?
}
q->next=NULL;//标志链表的结束
fclose(fp);
return head;
}

//从链表中输出打印到屏幕中数据(输出链表)
void Print_List(Node*head)
{
Node*p;
p=head->next;//跳过无数据的头结点
while(p!=NULL)
{
printf("%s",p->NAME);
printf("%d",p->NUM);
p=p->next;//指向下一个节点
}
}
图片说明

  • 写回答

4条回答

  • threenewbee 2018-06-01 11:36
    关注

    让你用fscanf和fprintf,起码你试试看吧。

    评论

报告相同问题?

悬赏问题

  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛