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,
ему всё равно.. В чем дело то?
Спасибо.

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

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

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

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

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

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от kosmonavt

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

pisun
() автор топика
Ответ на: комментарий от kosmonavt

PS. Сравни:

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

и

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

kosmonavt
()
Ответ на: комментарий от kosmonavt

угу, прочитал :/..
подскажите, пожалуйста, как лучше сделать тогда.
И всё-таки, почему первый кусок то работет %)

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