C语言 格式读取 fscanf() 如何读取至末尾结束(txt)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 格式读取 fscanf() 如何读取至末尾结束(txt)相关的知识,希望对你有一定的参考价值。
个人的愚蠢做法,举例以示意 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); 请指教...谢谢
参考技术A fscanf如果读取到文件尾会返回NULL,可以从这点判断是不是到文件尾.
while(!fscanf(stream,
"format",
...));
这样就可以把一个文件的内容读取完毕.
stream是输入流,
即文件指针.
"format"是格式字符串,
即用于写%s,
%d的地方.
...
即后面跟的不定参数.
C中的fscanf - 如何确定逗号?
我正在通过fscanf()从文件中读取一组数字,我希望将每个数字放入数组中。问题是thosose数字用“,”分隔如何确定fscanf应该读取几个密码,当它在文件中找到“,”时,它会将它保存为整数?谢谢
答案
这可能是一个开始:
#include <stdio.h>
int main() {
int i = 0;
FILE *fin = fopen("test.txt", "r");
while (fscanf(fin, "%i,", &i) > 0)
printf("%i
", i);
fclose(fin);
return 0;
}
使用此输入文件:
1,2,3,4,5,6,
7,8,9,10,11,12,13,
...输出是这样的:
1
2
3
4
5
6
7
8
9
10
11
12
13
你究竟想做什么?
另一答案
我可能会使用类似的东西:
while (fscanf(file, "%d%*[,
]", &numbers[i++]))
;
%d转换一个数字,“%* [, t n]]”读取(但不指定)任何连续的分隔符运行 - 我将其定义为逗号,空格,制表符,换行符,尽管这是改变你认为合适的东西是相当微不足道的。
另一答案
fscanf(file, "%d,%d,%d,%d", &n1, &n2, &n3, &n4);
但如果数字之间有空格则不起作用。 This answer展示了如何做到这一点(因为没有库函数)
另一答案
Jerry Coffin的答案很好,但有几点需要注意:
- fscanf在文件末尾返回一个(负)值,因此循环不会正确终止。
- 即使没有读取任何内容,
i
也会递增,因此最终会指向一个超过数据结尾的内容。 - 此外,如果在格式参数之间留出空格,fscanf会跳过所有空格(包括
我会选择这样的东西。
int numbers[5000];
int i=0;
while (fscanf(file, "%d %*[,] ", &numbers[i])>0 && i<sizeof(numbers))
{
i++;
}
printf("%d numbers were read.
", i);
或者,如果要强制执行数字之间的逗号,可以使用"%d , "
替换格式字符串。
以上是关于C语言 格式读取 fscanf() 如何读取至末尾结束(txt)的主要内容,如果未能解决你的问题,请参考以下文章