LINUX.ORG.RU

Условие выхода из цикла =).


0

0

Опять глупый вопрос =).
Делаю так:
   
     char buffer[1024];
     do
      {
         do
           {
             scanf("%s", buffer);
             buffer[strlen(buffer)+1]='\0';
           } while (strncmp("bye\0",buffer,4)!=0);
           printf("hello");
      }while (strncmp("bye\0",buffer,4)!=0);

когда выполняется, то мы выходим из внутреннего do, выводим "hello",
а затем выходим из внешнего do. Все а порядке.
потом к условию вложенного do добавляю кусочек и получается так:

     char buffer[1024];
     do
      {
         do
           {
             scanf("%s", buffer);
             buffer[strlen(buffer)+1]='\0';
           } while (strncmp("bye\0",buffer,4)!=0 || strncmp(".\0",buffer,2)!=0);
           printf("hello");
      }while (strncmp("bye\0",buffer,4)!=0);

а вот теперь ему пое*ать на условие вложенного do, пускай я введу bye\0, пускай .\0,
ему всё равно.. В чем дело то?
Спасибо.

Re: Условие выхода из цикла =).

> buffer[strlen(buffer)+1]='\0';

Кошмар! Это что и зачем?

> while (strncmp("bye\0",buffer,4)!=0 || strncmp(".\0",buffer,2)!=0)

1. Зачем нулевой символ прописывать явно?

2. Этот цикл будет крутиться вечно, потому что это условие записывается словами так: Пока buffer не равен "bye" или не равен ".". Что есть всегда истина, т.к. нет строки, которая была бы равна и "bye" и ".".

watashiwa_daredeska ★★★★ ()

Re: Условие выхода из цикла =).

И не забудь вставить проверку по `feof(stdin)'. Без него тоже возможно зацикливание.

kosmonavt ()
Ответ на: Re: Условие выхода из цикла =). от kosmonavt

Re: Условие выхода из цикла =).

>Этот цикл будет крутиться вечно, потому что это условие записывается
>словами так: Пока buffer не равен "bye" или не равен ".". Что есть
>всегда истина, т.к. нет строки, которая была бы равна и "bye" и ".".
спасибо. Но ведь первый кусочек работает. И почему не может
быть строки "bye" или "."?

pisun ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.