我正在编写一个程序来计算文本文件中的空白字符数。 我使用“isspace”来计算它。文本文件中的内容为“1 1 1”,但计数器仍为0,代码有什么不对?
#include "stdafx.h"
#include "ctype.h"
int _tmain(int argc, _TCHAR* argv[])
{
FILE* input;
char x;
int space = 0;
input = fopen("123.txt", "r");
while ((fscanf(input, " %c", &x)) == 1)
{
if (isspace(x))
space++;
}
printf("space : %d\n", space);
return 0;
}
答案 0 :(得分:4)
scanf-family函数会在格式字符串中出现时自动跳过空格。请考虑改为使用fgetc
。
答案 1 :(得分:4)
我认为在这种情况下使用fgetc
(或getc
)是更好的解决方案,但在这种情况下,fscanf
的其他答案是错误的。如果您使用scanf
作为格式,"%c"
系列函数将不会跳过空格。你的电话不起作用的原因是因为你的格式有空格!因此,您需要使用" %c"
而不是前导空格,而不是"%c"
作为格式。领先的空间告诉fscanf
:跳过所有空格,然后给我下一个非空白字符。 fscanf
执行此操作,确保您在x
中获得的任何值不一个空格。因此,您的isspace
测试正在测试已知为假的条件!
您可以通过将格式规范更改为"%c"
来轻松解决此问题。
话虽如此,我认为最好还是使用fgetc
/ getc
,因为正如您所知,scanf
函数系列难以正确使用。
答案 2 :(得分:3)
正如我之前所指出的,你需要使用fgetc(),而不是fscanf()。 fscanf()不读取空白。