我正在编写一个程序来计算文本文件中的空格字符的数量。我使用"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;
}发布于 2009-12-13 23:36:52
正如我之前指出的,您需要使用fgetc(),而不是fscanf()。fscanf()不读取空格。
发布于 2009-12-13 23:37:32
当空格出现在格式字符串中时,scanf系列函数将自动跳过空格。考虑改用fgetc。
发布于 2009-12-14 00:02:56
我认为在这种情况下使用fgetc (或getc)是更好的解决方案,但在这种情况下关于fscanf的其他答案是错误的。如果您使用"%c"作为格式,scanf系列函数将不会跳过空格。您的调用不工作的原因是您的格式中有一个空格!因此,您需要使用不带前导空格的"%c"而不是" %c"作为格式。前导空格告诉fscanf:跳过所有空格,然后给我下一个非空格字符。fscanf会这样做,确保您在x中获得的任何值都不是空格。因此,您的isspace测试正在测试一个已知为假的条件!
您可以通过将格式规范更改为"%c"来轻松解决此问题。
话虽如此,我认为不管怎样,使用fgetc/getc要好得多,因为正如您已经发现的,scanf系列函数很难正确使用。
https://stackoverflow.com/questions/1896837
复制相似问题