谢长留 2019-12-04 20:18 采纳率: 66.7%
浏览 2475
已采纳

C语言fopen打开文件失败

一个单链表创建学生信息的作业,要求要用文件的输入输出。

打全部路径会出现如图的错误。

打“C:\\student_info.txt”也不行。

把文件移到project8的文件夹下面打“student_info.txt”也不行。

已确定文件在文件夹内是存在的。F11调试确定就是fopen那块儿出的问题

求问怎么改......崩溃

图片说明
#define _CRT_SECURE_NO_DEPRECATE
#include
#include
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;
FILE fp;
/
①单链表数据结构定义*/
typedef struct
{
int num; //学号
//char name[20]; //姓名
//int sex; //性别
//int dorm; //宿舍
//int tel; //电话
}Student;
//结点定义
typedef struct LNode
{
Student data;
struct LNode next;
}LNode;
//链表定义
typedef struct
{
LNode
head; //指向头结点的指针
int length; //链表长度
}LinkList;
/*②单链表基本操作接口定义*/
//初始化链表:创建头结点,给L字段赋初值
//返回一个空的单链表
Status InitList(LinkList &L);

//初始条件:线性表L已经初始化
//采用头插法创建一个单链表,元素类型为整形,输入-9999时结束
Status CreateFromHead(LinkList &L);

//初始条件:线性表L已经初始化
//采用尾插法创建一个单链表,元素类型为整形,输入-9999时结束
Status CreateFromTail(LinkList &L);

//初始条件:线性表L已经存在
//打印出所有元素
void PrintElem(LinkList L);

//初始条件:线性表L已经存在
//查找第i个结点,若找到(1≤i≤n),则由e返回其值
Status GetElem_L(LinkList L, int i, ElemType &e);

//初始条件:线性表L已经存在
//在单链线性表L的第i个元素之前插入元素e
Status ListInsert_L(LinkList &L, int i, ElemType e);

//初始条件:线性表L已经存在
//删除第i个元素,并由e返回其值
Status ListDelete_L(LinkList &L, int i, ElemType &e);
int main()
{
LinkList L;
InitList(L);
CreateFromHead(L);
PrintElem(L);
system("pause");
}

/*③部分单链表操作的实现函数*/
Status InitList(LinkList &L) //初始化链表
{
L.head = (LNode*)malloc(sizeof(LNode));
if (!L.head)exit(OVERFLOW);
L.length = 0;
L.head->next = NULL;
return OK;
}
//初始条件:线性表L已经初始化
//采用头插法创建一个单链表,元素类型为整形,输入-9999时结束
Status CreateFromHead(LinkList &L)
{
LNode s;
int flag = 1;
int e;
L.head = (LNode
)malloc(sizeof(LNode));
L.head->next = NULL;
while (flag)
{
fp = fopen("C:\Users\解诗雨\source\student_info.txt", "r+");
if (fp==NULL)
{
printf("打不开\n");
return OK;
}
fscanf(fp,"%d", &e);
if (e)
{
s = (LNode*)malloc(sizeof(LNode));
s->data.num = e;
s->next = L.head->next;
L.head->next = s;
++L.length;
}
else flag = 0;
fclose(fp);
}
return OK;
}

//初始条件:线性表L已经存在
//打印出所有元素
void PrintElem(LinkList L)
{
LNode* p;
p = L.head->next;
printf("当前的结点数为:%d\n", L.length);
while (p)
{
printf("%4d ", p->data.num);
p = p->next;
}
printf("\n");
}

文本:
图片说明

因为现在还在创建链表其他还没弄完...

  • 写回答

4条回答 默认 最新

  • J4cks0n 2019-12-04 21:17
    关注

    全路径 '\'全部换为 '/' 或者'\'

    C:\Users\****\source\student_info.txt
    C:/Users/****/source/student_info.txt

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 TMC2209串口模式下读取不到寄存器的值串口助手蓝色字体是发过去的消息,绿色字体是收到的消息,第二行发送读取寄存器的指令但是没有读取到寄存器的值串口助手如下图:接线如下图,如何解决?
  • ¥15 高通安卓11提取完整线刷包软件,或者优博讯dt50顺丰刷机包
  • ¥20 C,有个译码器,换了信道就跑不出原来数据
  • ¥15 MIMIC数据库安装问题
  • ¥60 基于JTag协议开发Fpga下载器上位机,哪位大🐂有偿指导?
  • ¥20 全书网Java爬取数据
  • ¥15 怎么获取红包封面的原始链接,并且获取红包封面序列号
  • ¥100 微信小程序跑脚本授权的问题
  • ¥100 房产抖音小程序苹果搜不到安卓可以付费悬赏
  • ¥15 STM32串口接收问题