可以使用C++的库函数getline实现。
getline会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。
1)读到文件结束符;
2)遇到函数指定的结束符;
3)输入达到最大限度。
getline有两种重载:
istream &getline( char *buffer, streamsize num )
istream &getline( char *buffer, streamsize num, char delim )
参数说明:
buffer: 读取的数据将存在buffer中。
num:最多读取num个字符。即之前所说的最大限度。
delim:结束符,当遇到指定的结束符时将结束输入。在第一种重载中,结束符为\n,即遇到换行结束。
所以要实现整行读取,使用第一种重载就可以了。示例代码如下:
#include <iostream>using namespace std
int main()
{
char buf[1024]//存储的buf。
while(getline(buf,sizeof(buf)))//读取一行。
{
cout << "read line:" <<buf<<endl//输出读取到的数据。
}
return 0
}
关键技巧: 每行数据个数随机,可用 c = fgetc(fin) ungetc(c,fin) 检查是否读到 换行符或文件结束符。例如:
a.txt
1 2 3 45 56
67
8 9 10
至于记录每行数据个数,存放到数组,等等,可以自己补充完善。
程序:
#include <stdio.h>
int main( )
{
FILE *fin
int a,c
fin=fopen("a.txt","rw")
while(1){
c = fgetc(fin)
if (c==EOF) break
if (c=='\n') {printf("\n==========\n")continue}
ungetc(c,fin)
fscanf(fin,"%d",&a)printf("%d ",a)
}
fclose(fin)
return 0
}
C语言逐行读取文件内容 ,参考代码如下:
#include <stdio.h>#include <stdlib.h>
#include <string.h>
#define MAX_LINE 1024
int main()
{
char buf[MAX_LINE] /*缓冲区*/
FILE *fp /*文件指针*/
int len /*行字符个数*/
if((fp = fopen("test.txt","r")) == NULL)
{
perror("fail to read")
exit (1)
}
while(fgets(buf,MAX_LINE,fp) != NULL)
{
len = strlen(buf)
buf[len-1] = '\0' /*去掉换行符*/
printf("%s %d \n",buf,len - 1)
}
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)