关于“空间”的问题

我正在编写一个程序来计算文本文件中的空白字符数。 我使用“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很难做到。