while循环有什么问题?C基础

while循环有什么问题?C基础,c,C,我试图在空格前数一数一个单词的字母数。例如,“Hello how”是我的输入字符串,我试图计算第一个单词中的字母数 #include<stdio.h> #include<string.h> int main() { char a[30]; int count = 0; printf("Enter the string.\n"); // Enter hello how as string here. gets(a); for ( i = 0; a[i]

我试图在空格前数一数一个单词的字母数。例如,“Hello how”是我的输入字符串,我试图计算第一个单词中的字母数

#include<stdio.h>
#include<string.h>

int main()
{
  char a[30];
  int count = 0;
  printf("Enter the string.\n"); // Enter hello how as string here.
  gets(a);
  for ( i = 0; a[i] != '\0'; i++ )
      {
      while( a[i+1] != ' ' )
      count++;
      }                        
  printf("%d\n",count);
 }
#包括
#包括
int main()
{
chara[30];
整数计数=0;
printf(“输入字符串。\n”);//在此处输入hello how作为字符串。
获得(a);
对于(i=0;a[i]!='\0';i++)
{
while(a[i+1]!='')
计数++;
}                        
printf(“%d\n”,计数);
}

这是一个更大代码的一小部分,我实际上希望count的值是5,但它进入了某种我无法理解的无限循环。如果我使用If而不是while,我会得到预期的答案。我知道gets不是很可靠,一旦我在编程方面有了进步,我就不会使用它了,所以你最好把关于循环的答案贴出来,而不是gets。多谢各位

NUL字符是用反斜杠(
\
)编写的,而不是正斜杠(
/

此外,内部循环不会终止,因为您没有递增
i

while (a[i] != ' ') {
    i++;
    count++;
}
实际上,不应该有两个循环。一个循环就是你所需要的

for (i = 0; a[i] != '\0' && a[i] != ' '; i++) {
    count++;
}     
while语句中的表达式不依赖于
count
。因此,随着while循环的每次迭代,
计数将增加,但这对while条件没有影响,因此它将无限循环或从不循环,这取决于
a[i+1]
处的字符


除此之外,for循环的条件语句也没有正确编写。NUL字符的字符串转义为
\0
(反斜杠)。或者,您可以将其与具有完全相同结果的
0
literal进行比较(尽管当涉及到C的微妙之处时,这并不意味着完全相同,但这令人毛骨悚然).

在for循环条件中使用
'\0'
而不是
'/0'
,while循环条件永远不会为假,因为我保持不变

这是问题的正确答案,尽管关于NUL的观察结果也是正确的。(您也可以只写数值0,这是NUL的ASCII/Unicode值;这更像C语言。)@keshlam:我在编写注释时正在将其写入编辑:)您的count变量有些毫无意义,因为您可以在测试表达式中使用多个条件,然后使用
i
作为打印结果<代码>用于(i=0;a[i]&&(a[i]!='';++i)。不要使用
get()
。这是邪恶的。请改用
fgets()
。感谢您指出代码中有关空字符的错误,但这只是我在这里输入的错误@WhozCraig:关于循环是的,这就是我说它是一个更大程序的一部分时的意思,我希望它成为我的外循环,我可以在其中放入更多的语句。啊,如果是这样的话,你仍然可以在内部使用一个for语句来计算当前单词的字符数。之后该怎么办就变得有点棘手了。但很高兴它有意义。或者干脆
for(i=0;a[i]&&a[i]!='';i++)其中我将是第一个单词中的字母数。
for (i = 0; a[i] != '\0' && a[i] != ' '; i++) {
    count++;
}