为什么这个for循环无限运行?

时间:2015-10-09 19:31:05

标签: c for-loop infinite-loop

我正在尝试一个问题,我必须写下#34;接受"对于以b结尾的字符串。我在使用这部分代码时遇到了问题:

char s[100];
int length,i=0;
gets(s);
length=strlen(s);
for( i=0; i<length; i+2)
{
  if(s[i]=='b' && s[i+1]=='\0')
      printf("Accept");
  else printf("Not accept");
}

但是这个循环无限运行。 当我使用它时,同样的问题得到了解决:

while(s[i]!='\0')
{ 
   if(s[i]=='b' && s[i+1]=='\0')
      printf("Accept");
   else printf("Not accept");
   i+2;
}

我知道for循环的逻辑存在问题,&amp;已经尝试了很多来解决它,但失败了。我是编程新手。可以帮助我。

5 个答案:

答案 0 :(得分:5)

for( i=0; i<length; i+2)

i未递增。所以它应该是:

for( i=0; i<length; i+=2)

答案 1 :(得分:2)

您的i循环中没有递增for

for( i=0; i<length; i+2)

所有这一切都是向i添加2并抛弃结果。您可能打算增加2,但这也不会起作用。如果你的字符串包含偶数个字符,你将永远找不到最后一个字符。

所以你需要做的是在每次迭代时增加1:

for( i=0; i<length; i++)

编辑:

更好的是,只需检查最后一个字符并完全摆脱循环:

if (s[length-1] == 'b') {
    printf("Accept\n");
} else {
    printf("Not Accept\n");
}

答案 2 :(得分:2)

你在哪里初始化你的字符串?你也错过了一个括号吗?你也许想打印&#34;不接受&#34;一旦。检查下面的解决方案。

但是如果你直接检查数组的最后一个字符,那么真的会容易得多。&#39; b&#39; (使用索引length-1),你不再需要循环(因为你知道长度)。

#include <stdio.h>
#include <string.h>
int main()
{
  char s[100];
  strcpy(s,"test");
  int length = 0, i = 0, j = 0;
  length=strlen(s);
  for( i=0; i<length; i++)
  {
    if(s[i]=='b' && s[i+1]=='\0')
    {
       printf("Accept");
       j = 1;
    }

  }
  if(j==0) printf("Not accept");
  return 0;
}

答案 3 :(得分:1)

for循环中,您永远不会增加i变量:

for( i=0; i<length; i+2) // should probably use i++ instead of i+2

答案 4 :(得分:1)

您尝试解决的问题(如果我正确地阅读了这些尝试)是您要确定最后一个字符是否为字母'b'。

您已使用以下方法找到字符串的长度:

length=strlen(s);

因此,使用此事实,您可以执行以下操作

if (length > 0 && s[length-1] == 'b') {
   printf("Accept");
}
else
{
   printf("Not accept");
}