有没有一种方法可以从文件中读取信息而不将信息存储在某处?

时间:2019-01-31 07:41:49

标签: c

是否可以在不将信息存储到某处的情况下读取文件?

如果我使用tempButton = document.getElementById('myButton'); //snag button tempButton.innerHTML = '<i class = "fa fa-spinner fa-spin"></i> Please wait...'; ,则必须将fscanf(in, "%s %d", string, &number)存储在%s中,将string存储在%d中。有没有办法不这样做?我需要扫描,因为我想知道该文件中有多少记录。

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

1 个答案:

答案 0 :(得分:8)

问题的原始版本仅以格式列出"%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分配一个大于零的值(因为字符串必须至少为一个字符,并且数字必须至少为一个字符,并且两个字符之间必须至少有一个空格。字符串和数字)。因此,显示的代码将检测读取是否成功。