Member 12537459 Ответов: 1

RE: ошибка в программе, бесконечный цикл


следующая программа выполняется без ошибок, но дает бесконечный цикл ввода текста..

Что я уже пробовал:

#include<iostream.h>
#include<conio.h>
#include<string.h>
#include<stdio.h>
int change(char[]);

void main()
{
	int i,y,j=0,w;
	char str[100],word[1000];
	clrscr();
	cout<<" enter text"<<endl;
	gets(word);
	cout<<"The string before block"<<endl;
	puts(word);
	cout<<"The string after block"<<endl;
	for(i=0;word[i]!='\0';++i)
	{
		if(word[i]!=' ')
		{
			str[j] = word[i];
			j++;
		}
		if(word[i]==' ')
		{
			w=change(str);
			if(w==1)
			{
				for(i=1;i<j-1;++i)>
				{
					str[i]='*';
				}
				cout<<str<<" ";
				j=0;
			}
			if(w==0)
			{
				cout<<str<<" ";
				j=0;
			}
		}
	}
	getch();
}

int change(char  str[])
{

	if((strcmp(str,"poop")==0)||(strcmp(str,"bad")==0))
	return 1;
	else return 0;
}

phil.o

Правильная идентификация вашего кода сделает вашу жизнь, да и нашу, намного проще :)

1 Ответов

Рейтинг:
1

OriginalGriff

Отступы очень, очень помогают при написании кода: они значительно упрощают определение того, что происходит:

for (i = 0; word[i] != '\0'; ++i)
    {
    if (word[i] != ' ')
        {
        str[j] = word[i];
        j++;
        }
    if (word[i] == ' ')
        {
        w=change(str);
        if (w == 1)
            {
            for (i = 1; i < j - 1; ++i)
                {
                str[i] = '*';
                }
            cout<<str<<" ";
            j = 0;
            }
        if (w == 0)
            {
            cout<<str<<" ";
            j = 0;
            }
        }
    }

В этом случае было бы очевидно, что вы используете одну и ту же переменную для двух вложенных циклов...это означает, что после второго цикла значение i всегда будет одинаковым.
И если бы вы использовали отладчик, это также сделало бы это довольно очевидным!


nv3

+5