使用while循环计算C中不包含空格的字符

时间:2018-10-31 16:25:32

标签: c

我正在尝试使用while循环计算用户作为输入的字符数,但是由于某种原因,输出计数总是比期望值多一个。 (我是新手,所以请不要为此而恨我。)

这是我的代码:

#include <stdio.h>
#include <string.h>
int main() {
    int len,i;
    char sttr[29];
    fgets(sttr,29,stdin);
    len = 0;
        i=0;
        while(sttr[i] != '\0'){
        if (sttr[i] != ' '){
            len++;
        }
        i++;

    }
   printf("%d\n",len);

}

2 个答案:

答案 0 :(得分:4)

fgets函数读取一行文本并存储该文本,包括换行符(如果有空间的话)。

由于换行,所以输出又增加了一个。

答案 1 :(得分:0)

  

我是新手,所以

值得一提的是,您的while循环完成是完全依赖,是基于在\0中找到了空字符sttr[]的事实。

由于使用了功能fgets(),因此在输入存储在\0中之后,它将自动附加一个sttr[]字符,因此这可能永远不会成为问题,但是... < / p>

如果您要解析这样的字符串,请意识到在不同的情况下,while循环很有可能成为无限循环,因为它从未发现\0字符会终止。

所以例如这样的东西会更健壮:

不要假设您的字符串中总是存在空字符

# include <stdio.h>
# include <string.h>
# define MAX 29

int main ( void )
{
    int len, i;
    char sttr[MAX];

    fgets( sttr, MAX, stdin );

    len = 0;
    i = 0;

    /* make sure i does not index past sttr[MAX] */
    while ( ( sttr[i] != '\0') && ( i < MAX ) )
    {
        if ( sttr[i] != ' ' )
        {
            len++;
        }
        i++;
    }
    printf("%d\n",len);
    return 0;
}