c语言读取文本文件

Python09

c语言读取文本文件,第1张

while

(!feof(fp)

首先读取文件

fgets

读一行字符串(最大长度255),

再加上一个换行符

lstrcat

将读取的text字符串放在合并到end[0]未尾,<所以内容放在了end[0]里面了>

end[0][w]在全并的字符串加上'\0'表示一次text的字符串

在end[0]

符加一个换行符,即用'\n'先替代前而的'\0',再在后而加一个'\0',即'\n\0'

所以end[0]

=

"<text>\n\0<text>\n\0....",当然end[0]总共的容量是max_path

*

max_path,

国为end[0]的地址是end,

而end保留的容量是

max_path

*

max_path

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

序号 姓名 成绩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

}

以下是运行结果:

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

C语言可以使用fopen()函数读取txt文本里。

示例:

#include <stdio.h>

FILE *stream, *stream2

void main( void )

{

int numclosed

/* Open for read (will fail if file "data" does not exist) */

if( (stream  = fopen( "data", "r" )) == NULL )

printf( "The file 'data' was not opened\n" )

else

printf( "The file 'data' was opened\n" )

/* Open for write */

if( (stream2 = fopen( "data2", "w+" )) == NULL )

printf( "The file 'data2' was not opened\n" )

else

printf( "The file 'data2' was opened\n" )

/* Close stream */

if(fclose( stream2 ))

printf( "The file 'data2' was not closed\n" )

/* All other files are closed: */

numclosed = _fcloseall( )

printf( "Number of files closed by _fcloseall: %u\n", numclosed )

}

扩展资料

使用fgetc函数

#include <stdio.h>

#include <stdlib.h>

void main( void )

{

FILE *stream

char buffer[81]

int  i, ch

/* Open file to read line from: */

if( (stream = fopen( "fgetc.c", "r" )) == NULL )

exit( 0 )

/* Read in first 80 characters and place them in "buffer": */

ch = fgetc( stream )

for( i=0(i <80 ) &&( feof( stream ) == 0 )i++ )

{

buffer[i] = (char)ch

ch = fgetc( stream )

}

/* Add null to end string */

buffer[i] = '\0'

printf( "%s\n", buffer )

fclose( stream )

}