c语言不能打开文件,路径设置对了

#include<stdio.h>#include<math.h>#include<stdlib.h>typedefstructstudent{intnum;floatn... #include <stdio.h>
#include <math.h>
#include<stdlib.h>
typedef struct student
{
int num;
float name[10];
int age;
float sex[2];
int grade;
int score;
struct student *next;
} STUDENT;

STUDENT *readfile()
{
FILE *fg;
STUDENT *head;
STUDENT *last;
STUDENT *p;
head = (STUDENT*)malloc(LED);
head->next=NULL;
last=head;
fg=fopen("C:\Users\hust\Desktop\新建文件夹\student.dat","rb");
if(fg==NULL);
{
printf("找不到数据文件");
return NULL;
}
while(!feof(fg))
{
p=(STUDENT*)malloc(LED);
if(fread(p,sizeof(STUDENT),1,fg)==1)
{
p->next=NULL;
last->next=p;
last=p;
}

}
fclose(fg);
return head;

}
void main()
{
FILE *fg;
STUDENT s;
if ((fg=fopen("student.dat","wb"))==NULL)
{
printf("出现错误");
}
do
{
printf("请输入学号: ");
scanf("%d",&s.num);
if (s.num!=-1)
{
printf("请输入姓名: ");
scanf("%s",&s.num);
printf("请输入年龄: ");
scanf("%d",&s.age);
printf("请输入性别: ");
scanf("%s",&s.sex);
printf("请输入年级: ");
scanf("%d",&s.grade);
printf("请输入成绩: ");
scanf("%d",&s.score);
s.next=NULL;
fwrite(&s,sizeof(STUDENT),1,fg);
}
else break;

}
while(1);
fclose(fg);
readfile();
getch();
}
展开
 我来答
tattackor
推荐于2018-04-14 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:895万
展开全部
1.如果文件不在当前文件夹当中,需要输入绝对路径。或者,使用system("CD")指令更改当前路径,在目标文件路径下打开文件。

2.对于程序来说,不管后缀名如何,文件分为两种类型:文本文件和二进制文件。
C语言里有一系列文件操作函数。区分文本和二进制文件,需要在打开文件时设置不同的控制符mode的变量即可。

3.fopen的函数原型:FILE * fopen(const char * path,const char * mode);
fopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:
  r 以只读方式打开文件,该文件必须存在。
  r+ 以可读写方式打开文件,该文件必须存在。
  rb+ 读写打开一个二进制文件,允许读数据。
  rw+ 读写打开一个文本文件,允许读和写。
  w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
  w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
  a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
  a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
  wb 只写打开或新建一个二进制文件;只允许写数据。
  wb+ 读写打开或建立一个二进制文件,允许读和写。
  wt+ 读写打开或着建立一个文本文件;允许读写。
  at+ 读写打开一个文本文件,允许读或在文本末追加数据。
  ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
  上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
chyk87
2013-02-25 · 超过14用户采纳过TA的回答
知道答主
回答量:120
采纳率:50%
帮助的人:13.6万
展开全部
在那不错了,你在路径里不要用中文名,再试试,如果还不行,把路径改为D盘或E盘再试试,或者再把打开方式改为:
将“ fg=fopen("C:\Users\hust\Desktop\新建文件夹\student.dat","rb"); ” 改为:
“ fg=fopen("C:\\Users\\hust\\Desktop\\新建文件夹\\student.dat","rb+"); ”

将 “ if ((fg=fopen("student.dat","wb"))==NULL) ” 改成:
“ if ((fg=fopen("student.dat","wb+"))==NULL)”
再试试,应该会好的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2976c9b
2013-02-25 · TA获得超过1555个赞
知道小有建树答主
回答量:934
采纳率:0%
帮助的人:715万
展开全部
把这个fg=fopen("C:\Users\hust\Desktop\新建文件夹\student.dat","rb");
换成下面看看
fg=fopen("C:\\Users\\hust\\Desktop\\新建文件夹\\student.dat","rb");

因为一个\是转义字符,多一个才行
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
兔子和小强
2013-02-25 · TA获得超过6946个赞
知道大有可为答主
回答量:3332
采纳率:74%
帮助的人:1439万
展开全部
要用\\转移字符
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式