关于“空间”的问题

时间:2009-12-13 15:35:04

标签: c

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

3 个答案:

答案 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()不读取空白。