(!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 )
}