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

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 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料