C语言 格式读取 fscanf() 如何读取至末尾结束(txt)
个人的愚蠢做法,举例以示意while(ch!=EOF{fscanf(fp,"%d\n%s\n%s\n%s\n\n",&tact[a].num,&tact[a].name,...
个人的愚蠢做法,举例以示意
while(ch!=EOF
{
fscanf(fp,"%d\n%s\n%s\n%s\n\n",&tact[a].num,&tact[a].name,&tact[a].phone,&tact[a].note);
ch=fgetc(fp);
}
请指教...谢谢 展开
while(ch!=EOF
{
fscanf(fp,"%d\n%s\n%s\n%s\n\n",&tact[a].num,&tact[a].name,&tact[a].phone,&tact[a].note);
ch=fgetc(fp);
}
请指教...谢谢 展开
5个回答
展开全部
在C语言中,或更精确地说成C标准函数库中表示文件结束符(end of file)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~127,不可能出现-1,因此可以用EOF作为文件结束标志。
扩展资料:
应用
档案存取或其它 I/O 功能可能传回等于象征符号值 (巨集) EOF 指示档案结束的情形发生。实际上 EOF 的值通常为 -1,但它依系统有所不同。巨集 EOF会在编译原始码前展开实际值给预处理器。
C语言中,EOF常被作为文件结束的标志。还有很多文件处理函数处错误后的返回值也是EOF,因此常被用来判断调用一个函数是否成功。
展开全部
fscanf如果读取到文件尾会返回NULL, 可以从这点判断是不是到文件尾.
while(!fscanf(stream, "format", ...));
这样就可以把一个文件的内容读取完毕.
stream是输入流, 即文件指针.
"format"是格式字符串, 即用于写%s, %d的地方.
... 即后面跟的不定参数.
while(!fscanf(stream, "format", ...));
这样就可以把一个文件的内容读取完毕.
stream是输入流, 即文件指针.
"format"是格式字符串, 即用于写%s, %d的地方.
... 即后面跟的不定参数.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
fscanf是有返回值的。如果返回EOF,证明到达文件结尾
追问
哈哈 谢谢你,尝试如下代码,读取成功!
while(fscanf(fp,"%d\n%s\n%s\n%s\n\n",&tact[a].num,&tact[a].name,&tact[a].phone,&tact[a].note)!=EOF)
++a;
追答
相互帮助嘛。满意请采纳
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
引用刘文正粉丝的回答:
fscanf如果读取到文件尾会返回NULL, 可以从这点判断是不是到文件尾.
while(!fscanf(stream, "format", ...));
这样就可以把一个文件的内容读取完毕.
stream是输入流, 即文件指针.
"format"是格式字符串, 即用于写%s, %d的地方.
... 即后面跟的不定参数.
fscanf如果读取到文件尾会返回NULL, 可以从这点判断是不是到文件尾.
while(!fscanf(stream, "format", ...));
这样就可以把一个文件的内容读取完毕.
stream是输入流, 即文件指针.
"format"是格式字符串, 即用于写%s, %d的地方.
... 即后面跟的不定参数.
展开全部
应取下面的办法↓
fscanf返回值null的办法报错
fscanf返回值null的办法报错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以用fgets()按行读取内容到
字符串变量里,然后处理。
假如已读入到
str[80]
里:
char
str[80]="or2_x2
c401
(
.a1(n66),
.a2(n85),
.zn(n142)
)";
多行这样的文字格式,
如果位置固定,可以直接读出:
char
r[4][5];
sscanf(str,"%s",r[0]);
r[0][3]='\0';printf("%s\n",r[0]);
sscanf(str+18,"%s",r[1]);
r[1][2]='\0';printf("%s\n",r[1]);
sscanf(str+28,"%s",r[2]);
r[2][3]='\0';printf("%s\n",r[2]);
sscanf(str+38,"%s",r[3]);
r[3][4]='\0';printf("%s\n",r[3]);
------------------------
如果位置不固定,我们可以用查找
点号的位置加4:
int
i,j,l[3];
j=0;
for
(i=0;i
评论
0
0
0
加载更多
字符串变量里,然后处理。
假如已读入到
str[80]
里:
char
str[80]="or2_x2
c401
(
.a1(n66),
.a2(n85),
.zn(n142)
)";
多行这样的文字格式,
如果位置固定,可以直接读出:
char
r[4][5];
sscanf(str,"%s",r[0]);
r[0][3]='\0';printf("%s\n",r[0]);
sscanf(str+18,"%s",r[1]);
r[1][2]='\0';printf("%s\n",r[1]);
sscanf(str+28,"%s",r[2]);
r[2][3]='\0';printf("%s\n",r[2]);
sscanf(str+38,"%s",r[3]);
r[3][4]='\0';printf("%s\n",r[3]);
------------------------
如果位置不固定,我们可以用查找
点号的位置加4:
int
i,j,l[3];
j=0;
for
(i=0;i
评论
0
0
0
加载更多
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询