关于“空间”的问题
我正在编写一个程序来计算文本文件中的空白字符数。 我使用“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; }
正如我之前所指出的,你需要使用fgetc(),而不是fscanf()。 fscanf()不读取空白。
scanf-family函数将在格式字符串中出现时自动跳过空格。 考虑使用fgetc
代替。
我认为在这种情况下使用fgetc
(或getc
)是一个更好的解决方案,但在这种情况下fscanf
的其他答案是错误的。 如果使用"%c"
作为格式, scanf
系列函数将不会跳过空格。 你的电话不起作用的原因是因为你的格式有空格! 因此,代替" %c"
作为格式,您需要使用"%c"
而不使用前导空格。 领先的空间告诉fscanf
:跳过所有空格,然后给我下一个非空白字符。 fscanf
执行此操作,确保您在x
获得的任何值都不是空格。 因此,您的isspace
测试正在测试一个已知为假的条件!
您可以通过将格式规范更改为"%c"
来轻松修复它。
话虽如此,我认为最好还是使用fgetc
/ getc
,因为你已经发现, scanf
系列function很难做到。