是否可以在不将信息存储到某处的情况下读取文件?
如果我使用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
的出现。
答案 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
分配一个大于零的值(因为字符串必须至少为一个字符,并且数字必须至少为一个字符,并且两个字符之间必须至少有一个空格。字符串和数字)。因此,显示的代码将检测读取是否成功。