我正在尝试使用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);
}
答案 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;
}