weixin_45862553
谢长留
2019-12-04 20:18
采纳率: 16.7%
浏览 1.7k

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
    J4cks0n 2019-12-04 21:17
    已采纳

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

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

    点赞 评论
  • weixin_45481655
    轻语知花香 2019-12-05 11:38

    错了,需要转义符猜行,有“\”的地方全部换成“\”就可以了。

    点赞 评论
  • qq_29712659
    zeroming- 2020-06-29 09:45

    读取的格式要和文件里面统一,不然读不出来

    点赞 评论
  • Neymagico
    Neymagico 2020-07-07 21:05

    您好,我也是遇到这样的问题,我用的是绝对路径,但是就是无法读取:

    fp = fopen("C:/Vivado/BC/MB_demo_v11/workplace/picture_encrypt/emoji.png","rb");
    if (NULL == fp)
    {
    printf("open_error\n");
    exit(1);
    }

    可以分享一下您是如何解决问题的吗?

    点赞 评论

相关推荐