首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于"isspace“的问题

关于"isspace“的问题
EN

Stack Overflow用户
提问于 2009-12-13 23:35:04
回答 3查看 948关注 0票数 0

我正在编写一个程序来计算文本文件中的空格字符的数量。我使用"isspace“来计算它。文本文件中的内容是"1 1 1",但计数器仍然为0,代码有什么问题?

代码语言:javascript
复制
#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;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-13 23:36:52

正如我之前指出的,您需要使用fgetc(),而不是fscanf()。fscanf()不读取空格。

票数 3
EN

Stack Overflow用户

发布于 2009-12-13 23:37:32

当空格出现在格式字符串中时,scanf系列函数将自动跳过空格。考虑改用fgetc

票数 4
EN

Stack Overflow用户

发布于 2009-12-14 00:02:56

我认为在这种情况下使用fgetc (或getc)是更好的解决方案,但在这种情况下关于fscanf的其他答案是错误的。如果您使用"%c"作为格式,scanf系列函数将不会跳过空格。您的调用不工作的原因是您的格式中有一个空格!因此,您需要使用不带前导空格的"%c"而不是" %c"作为格式。前导空格告诉fscanf:跳过所有空格,然后给我下一个非空格字符。fscanf会这样做,确保您在x中获得的任何值都不是空格。因此,您的isspace测试正在测试一个已知为假的条件!

您可以通过将格式规范更改为"%c"来轻松解决此问题。

话虽如此,我认为不管怎样,使用fgetc/getc要好得多,因为正如您已经发现的,scanf系列函数很难正确使用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1896837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档