gpt4 book ai didi

c - 有没有办法在不将信息存储在某处的情况下从文件中读取?

转载 作者:行者123 更新时间:2023-12-01 16:16:10 24 4
gpt4 key购买 nike

有没有办法在不将信息存储在某处的情况下从文件中读取信息?

如果我使用 fscanf(in, "%s %d", string, &number) 我被迫将 %s 存储在 string%dnumber 中。有没有办法不这样做?我需要扫描,因为我想知道该文件中有多少条记录。

“记录”是指 %s%d 的出现。

最佳答案

问题的原始版本只在格式中列出了"%s";它已更新为询问有关 "%s %d" 作为记录格式的问题。

在很多方面都是一个奇怪的要求。您可以使用分配抑制,但要小心,因为它会限制您的错误检查。请注意,%s 转换规范读取以空格分隔的单词 — 大概就是您所说的“记录”的意思,因为这是您正在使用的函数和格式。

size_t count = 0;
while (fscanf(in, "%*s") == 0)
count++;

printf("There are %zu words in the input\n", count);

您可以像这样使用固定存储:

int offset = 0;
size_t count = 0;

while (fscanf(in, "%*s%n", &offset) == 0 && offset != 0)
{
count++;
offset = 0;
}

scanf()手册页值得仔细阅读、重读和重读。


分配抑制的相同基本思想适用于 "%s %d" 记录格式。问题是抑制的转换不计入 fscanf() 的返回值中 — 并且 %n 转换规范也不计入。所以,你可以使用:

int offset = 0;
size_t count = 0;

while (fscanf(in, "%*s %*d%n", &offset) == 0 && offset != 0)
{
count++;
offset = 0;
}

这只是对之前发生的事情的一个微不足道的修改。如果 %*s%*d 转换失败,则 %n 将不会执行,因此 offset不会改变。如果两者都成功,那么offset会被赋一个大于零的值(因为字符串至少要有一个字符,而数字至少要有一个字符,而且至少有一个字符串和数字之间的空白)。因此,显示的代码检测读取是否成功。

关于c - 有没有办法在不将信息存储在某处的情况下从文件中读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54455558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com