C语言怎么判断文件的行尾??
假如一个文件,每一行的字节都是不一样的,也不确定的,怎么用C语言判断文件的行尾,或者怎么读取一行的内容。用fscanf感觉没用,遇到空格就断了。...
假如一个文件,每一行的字节都是不一样的,也不确定的,怎么用C语言判断文件的行尾,或者怎么读取一行的内容。用fscanf感觉没用,遇到空格就断了。
展开
4个回答
展开全部
fgets()函数,读出来,如果有行尾,最后一个是'\n'之后是结束符
gets()从键盘读取一行会把换行符丢弃,但是fgets()不会丢弃,换行符是文件内容之一,如果一行太大,分几次读了,前几次都没有'\n‘ 一个'\n'也可以看做是一个段的结束符。
要用文本方式打开文件,找到'\n'就是行尾了,如果用二进制方式打开,则可能是'\r'和'\n'两个字符,读和写都用文本方式,读出来只要处理'\n'就可以
把行缓冲区定到够大,如10240,这样一次最多读10240字节,一般地都可以一次一整行了,除非10K以上的大段落举例:
#define YOURFILEPATH "D:\\test.txt"
char buf[1024];
FILE* rp;
if((rp=fopen(YOURFILEPATH,"rt"))==NULL){printf("文件%s打开失败",YOURFILEPATH);exit(1);}
while(!feof(rp)){
if(fgets(buf,10240,rp)==buf) printf(buf); //一次一行 读出来打到屏幕上
}
gets()从键盘读取一行会把换行符丢弃,但是fgets()不会丢弃,换行符是文件内容之一,如果一行太大,分几次读了,前几次都没有'\n‘ 一个'\n'也可以看做是一个段的结束符。
要用文本方式打开文件,找到'\n'就是行尾了,如果用二进制方式打开,则可能是'\r'和'\n'两个字符,读和写都用文本方式,读出来只要处理'\n'就可以
把行缓冲区定到够大,如10240,这样一次最多读10240字节,一般地都可以一次一整行了,除非10K以上的大段落举例:
#define YOURFILEPATH "D:\\test.txt"
char buf[1024];
FILE* rp;
if((rp=fopen(YOURFILEPATH,"rt"))==NULL){printf("文件%s打开失败",YOURFILEPATH);exit(1);}
while(!feof(rp)){
if(fgets(buf,10240,rp)==buf) printf(buf); //一次一行 读出来打到屏幕上
}
更多追问追答
追问
有没有类似vbs中的readline方法??
追答
就是fgets();下次读一行或读满指定字节.
只要指定的字节(也就是缓冲区大小)够大就是一次读一行了.
如果想要readline完全等同的效果,你得自己写函数
展开全部
有特殊符号的
一般是26
也就是CTRL_Z
你用dubug看一个小的文件就可以知道了
好像有函数可以知道是否文件尾,EOF()?
一般是26
也就是CTRL_Z
你用dubug看一个小的文件就可以知道了
好像有函数可以知道是否文件尾,EOF()?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
WINDOWS下行结束是\r\n
LINUX下,则是\n
LINUX下,则是\n
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
供参考。
char cx;
FILE *fp;//声明一个文件指针变量fp
if((fp=fopen("filename","r"))==NULL){//读打开名为filename的文件并检查是否成功
printf("文件打开失败!\n");
exit(0);
}
while((cx=getc(fp)!=EOF)//EOF是文件结尾标志。不到结尾继续
putchar(cx);//把从文件读到的字符写到屏幕
fclose(fp);//关闭文件。
另一些函数如fgets()、fread()等都可以使用,具体要查看这些函数的原型声明和要求……
char cx;
FILE *fp;//声明一个文件指针变量fp
if((fp=fopen("filename","r"))==NULL){//读打开名为filename的文件并检查是否成功
printf("文件打开失败!\n");
exit(0);
}
while((cx=getc(fp)!=EOF)//EOF是文件结尾标志。不到结尾继续
putchar(cx);//把从文件读到的字符写到屏幕
fclose(fp);//关闭文件。
另一些函数如fgets()、fread()等都可以使用,具体要查看这些函数的原型声明和要求……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询