C语言从TXT文档中读取一组数字时如何判断已经读到最后一个数字?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言从TXT文档中读取一组数字时如何判断已经读到最后一个数字?相关的知识,希望对你有一定的参考价值。

C语言从TXT文档中读取一组数字时如何判断已经读到最后一个数字?

参考技术A 判断文件指针是否到达文件结尾的位置。
如果feof(fp) != EOF为真,则没有到文件结尾,否则就是到文件结尾了。 fp为文件指针。
参考技术B 可以判断是否最后一个等于'\0' 参考技术C while(fscanf(fp, "%d", &num) != EOF)

....;

参考技术D 直接的就是fopen()==NULL

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的答案很好,但有几点需要注意:

  1. fscanf在文件末尾返回一个(负)值,因此循环不会正确终止。
  2. 即使没有读取任何内容,i也会递增,因此最终会指向一个超过数据结尾的内容。
  3. 此外,如果在格式参数之间留出空格,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语言从TXT文档中读取一组数字时如何判断已经读到最后一个数字?的主要内容,如果未能解决你的问题,请参考以下文章

关于C语言中文本文件的逐行读取的实现

c语言读取文件数据乱码

C语言怎样读取TXT文档中两行字符之间的数据,如begin和end之间的3行数据

C语言怎么把文件的内容读到链表里面?

C语言怎样将数字从文件里逐个读取出来

C语言 读取数字