C语言文件读取时读不到文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言文件读取时读不到文件相关的知识,希望对你有一定的参考价值。

#include<stdio.h>#include<stdlib.h>#include<string.h>#defineLENsizeof(stu)typedefstructstudentintnum;charname[10];charsex;intgrade;intold;stu;intmain()stuarr[10];FILE*... #include<stdio.h> #include<stdlib.h> #include<string.h> #define LEN sizeof(stu) typedef struct student int num; char name[10]; char sex; int grade; int old; stu; int main() stu arr[10]; FILE *fp; char filename[30]; int i; printf("Enter the filename:\n"); scanf("%s",filename); fp=fopen(filename,"rd"); if(fp==NULL) if(strcmp(filename,"000")==0) exit(0); printf("Error\n"); main(); for(i=0;i<10;i++) fread(&arr[i],LEN,1,fp); if(fp==NULL) exit(0); printf("%d %s %c %d %d",&arr[i].num,&arr[i].name,&arr[i].sex,&arr[i].grade,&arr[i].old); fclose(fp); return 0; 文件就在EXE执行文件的同一个文件夹,试过修改filename变量直接为地址也找不到文件,包括“\\”的问题已经排除,请大神指正,谢谢。 展开

参考技术A 1、使用fopen、fread、fwrite等C语言标准库中的文件I/O函数即可对文件进行打开、读取、写入操作。下面的程序创建一个.bin的文件,然后再从里面读取数据。
#include
<stdio.h>
int
main()

FILE*
pFile;
float
buffer[]
=

2.0
,
3.0
,
8.0
;
pFile
=
fopen("myfile.bin"
,
"wb");
//
打开文件写操作
fwrite(buffer
,
1
,
sizeof(buffer)
,
pFile);
//
把浮点数组写到文件
myfile.bin
fclose(pFile);
//
关闭文件
float
read[3];
pFile
=
fopen("myfile.bin"
,
"rb");
//
重新打开文件读操作
fread(read
,
1
,
sizeof(read)
,
pFile);
//
从文件中读数据
printf("%f\t%f\t%f\n",
read[0],
read[1],
read[2]);
fclose(pFile);
//
关闭文件
return
0;

2、bin文件一般是指的二进制文件,它往往具有两种形式,一种是某种系统平台的可执行文件格式,比如windows平台的PE文件格式,Linux平台的ELF文件格式,另外一种是提取的一段二进制代码,比如系统的主引导记录mbr,就是一个包含512个字节的程序,用c语言对这类文件进行读取时,必须按一定格式进行解析。而且常用的方法不是使用C语言的I/O操作,而一般使用系统提供的文件内存映射方法。

C语言文件的文本怎么读取?

血崩了,我连读取都不会,后面还要计算,怎么弄呢?

根据你给的文件保存的数据的格式,我猜测每一行是一个学生的信息,格式如下:

序号 姓名 成绩1 成绩2 成绩3 ...

知道了题意和题目要求,那么一切将会变得简单起来,请看代码。

#include <stdio.h>

#define READ_FILE "data.txt"    /* 要读取的文件的名字 */
#define WRITE_FILE "T_data.txt" /* 要写入的文件的名字 */
#define STU_NUM 10              /* 最大学生人数       */
#define MAX_LEN 50              /* 一行的最大字符数   */
/*
 *   获取总分函数
 */
int get_sum(char const *msg) 

int sum = 0;
int tmp;
/*
 *   遍历一行字符
 */
while ( *msg != '\\0' ) 

/*
 *  以空格为一项成绩的分隔标志
 */
tmp = 0;
while ( *msg != ' ' && *msg != '\\0' ) 
/*
 *   char类型数字转int类型数字
 */
tmp = ( tmp * 10 ) + ( ( *msg ) - '0' );
msg++;

/*
 *   求总和
 */
sum += tmp;
if ( *msg == '\\0' ) 

break;

msg++;

return sum;


int main(void) 

FILE *rfp, *wfp;                /* 声明读取/写入文件指针    */
char student[STU_NUM][MAX_LEN]; /* 存放读取到的数据缓存数组 */
char ch;                       
int sum[STU_NUM];               /* 成绩总和 */
int i = 0;
int j = 0;
int k = 0;
rfp = fopen(READ_FILE, "r");    /* 打开数据文件 */
if ( rfp == NULL ) 

perror(READ_FILE);
exit(1);

for ( i = 0; i < STU_NUM; i++ ) 

sum[i] = 0;

/*
 *    逐个字符读取文件的内容,
 *    直至遇到文件结束符为止。
 */
i = 0;
while ( ( ch = fgetc(rfp) ) != EOF ) 
/*
 *   遇到换行符表示已经读取完一个学生的资料;
 *   否则继续将数据写入缓存数组中。
 */
if ( ch == '\\n' ) 

student[i][j] = '\\0';
j = 0;
i += 1;
 else 

student[i][j++] = ch;


student[i][j] = '\\0';
wfp = fopen(WRITE_FILE, "w");
/*
 *  开始分析数据
 *  根据文件存放数据的格式,从下标为2的位置开始分析数据。
 *  当遇到空格时证明后面的数据是成绩,每一科成绩分数均以空格分开。
 *  printf是显示出来。
 *  fprintf是写入另一个文件。
 */
for ( j = 0; j <= i; j++ ) 

k = 2;
printf("%c%c", student[j][0], student[j][1]);
fprintf(wfp, "%c%c", student[j][0], student[j][1]);
while ( student[j][k] != ' ' ) 

printf("%c", student[j][k]);
fprintf(wfp, "%c", student[j][k]);
k++;

printf("\\'s sum of score sum is ");
fprintf(wfp, "\\'s sum of score sum is ");
sum[j] = get_sum(&student[j][k]);
printf("%d\\n", sum[j]);
fprintf(wfp, "%d\\n", sum[j]);

/*
 *  记得关闭文件哦。
 */
fclose(rfp);
fclose(wfp);
return 0;

以下是运行结果:

这个程序仅仅是针对你的题目要求来的,文件存放的数据格式不能更改,否则会出错。每一行必须以回车键结束,最后一行的最后一个字符之后什么也不能有。我尽量以你看得懂的方法来写,关键部分都带有注释,有问题不要追问了,自己多思考思考,实在解决不来还是很欢迎可以追问的哦,哈哈哈!!!

追答

后面多打了一个sum,不过不影响。

追问

你能解释下为啥我那个不能逗号吗?我爸逗号消掉然后就可以做下去了,但还是谢谢你哈

追答

首先你要知道scanf,这个叫格式化输入。也就是说输入是有一个格式的,你加逗号的话可以把文件中的空格换成逗号,去了解一下格式化输入输出就知道了

参考技术A fscanf格式串里的逗号不能要追问

为啥啊?好迷,结构体输入时也不逗号...我记得以前数组那一块可以的

以上是关于C语言文件读取时读不到文件的主要内容,如果未能解决你的问题,请参考以下文章

C语言读取文件

C语言如何读取文件?

Java中bufferedReader的readline读取不到文件内容,显示的是null。

XML文件内容如何读取(C或C++)

c语言逐行读取文件?

C语言 读取文件到内存