如何仅在范围内 fscanf 数据,而不是保存整个数据?

How do I fscanf data within range only, instead of saving the whole data?

基本上我有数据行和列。我知道我可以使用 fgets 逐行读取,然后用 strtok 标记该行。之后,我可以使用 atoi() 检查最后 2 个 tokens/values 是否在范围内,如果在范围内,我可以将它们存储到一个数组中。但是,我听说 strtok 是一种糟糕的做事方式,而 fscanf 似乎是一种更简洁的方法。 fscanf 的问题在于,如果我使用它,我必须先将所有值存储在数组中,然后检查哪些值在范围内。由于我有很多行,我不知道数组应该有多大,这样会浪费很多space。有没有办法用 if 语句进行 fscanf?

我不知道这是不是一个愚蠢的问题,谢谢。

无论你浪费什么,它都不会超过行的长度。由于您的格式显然是文本格式,因此 1024 行长度通常是限制¹。

因此,在最坏的情况下,您需要(几个?)千字节的内存来解析每一行。您可以重用该缓冲区并忽略无趣的值。

当然,您可以编写自己的解析器并提高内存效率。

更新

还有这个:scanf:

  • (可选)赋值抑制字符*。如果存在此选项,则该函数不会将转换结果分配给任何接收参数。

¹ 当然可能会有所不同