Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> цикл while 
:(
    Опции темы
koljan
Дата 11.6.2006, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


VIP
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 18.12.2005
Где: г.Архангельск

Репутация: нет
Всего: 1



Код

#include <iostream.h>
#include <conio.h>
int fact(n)
{
  int q=1;
  int i;
   if(n==1) return n;
     else
    {
     for(i=2;i<=n;i++)
      {
       q=q*i;
      }
    }
    return q;
}
int main()
{
char letter;
int done=0;
int n;
while (done==0)
 {
   cout<<"Vvedite znachenie\n";
   cin>>n;
   cout<<"\n";
    cout<< fact(n)<<"\n";
   cout<<"exit(y/n)"<<"\n";
   cin>>letter;

   if ((letter == 'Y') || (letter == 'y'))
         done = 1;
         else
         done= 0;

   cout<<"\n";
   getch();
   return 0;
 }
}

у меня есть такой код хотел сделать чтобы программа завершалась при вводе n или N
но что-то не получается         что у меня не так? 


--------------------
PM MAIL ICQ   Вверх
Xenon
Дата 11.6.2006, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Код

char letter;    
int n;    
do
 {    
   cout << "Vvedite znachenie\n";    
   cin >> n;    
   cou t<< "Exit(y/n)";    
   cin >> letter;    
}while (letter!='N' && letter!='n');
 


--------------------
user posted image  
PM MAIL   Вверх
doomik
Дата 11.6.2006, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Одинокий волк
**


Профиль
Группа: Участник
Сообщений: 360
Регистрация: 25.10.2005
Где: #vingrad

Репутация: нет
Всего: 15



Не уверен в ответе, но попробуй добавить

Код

.
.
.
   if ((letter == 'Y') || (letter == 'y'))    
         done = 1;    
         else    
         done= 0;    
   cout<<"\n";
 if ( ( letter == 'N' ) || ( letter == 'n' ) )    //это добавить
   getch();    // убрать это и запустить с Alt + F5
   return 0;    
 }    
}

   

Это сообщение отредактировал(а) d00mik - 11.6.2006, 23:16


--------------------
"Единственный способ изучать новый язык программирования - писать на нем 
программы." 
- Brian Kernighan

Remember, st1ng3r 
/server irc.ircline.ru /j #vingrad
PM   Вверх
Pete
Дата 11.6.2006, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 318
Регистрация: 5.1.2006
Где: Москва

Репутация: нет
Всего: 12



Проверь, что лежит в letter (распечатыванием ascii-кода, например): очень вероятно, что там '\n'. В сях часто такая проблема, про плюс точно не знаю. Если дело в этом, то положи сразу после cin >> n вот такую строку: while (getchar() != '\n'). 


--------------------
Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу)
Не откладывай на завтра то, что можешь сделать сегодня. (Пословица)
А теперь выпишем точное значение числа пи... (Препод)
Жахни, Пендальф! © Гоблин
PM   Вверх
Xenon
Дата 11.6.2006, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Зачем вы так жизнь усложняете? Просто проверять условие letter!='N' && letter!='n' и все. Засовывать переменную done ... Нафиг? smile И здесь бы я cin заменил бы на _getche() из религиозных соображений, так как пользователя просят нажать y/n, про ENTER ничего не говорится smile Нужно с самых пеленок уметь рассчитывать на тупого пользователя. 


--------------------
user posted image  
PM MAIL   Вверх
doomik
Дата 12.6.2006, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Одинокий волк
**


Профиль
Группа: Участник
Сообщений: 360
Регистрация: 25.10.2005
Где: #vingrad

Репутация: нет
Всего: 15



XenonSk, 
Цитата
Просто проверять условие letter!='N' && letter!='n' и все

А почему на && ?  smile 
если
Цитата
...программа завершалась при вводе n или N



Добавлю к предыдушему моему посту, надо ещё именить while напривер на while ( done != 0 )    
в общеи вот код:

Код

#include <iostream.h>
int main()    
{    
char letter;    
int done;    // Здесь тоже есть изменения.
int n;    
while (done!=0)    // done никогда не будет равен нулью, и он будет выполнятся бесконечно
 {    
   cout<<"Vvedite znachenie\n";    
   cin>>n;    
   cout<<"\n";    
    cout<< "fact(n)"<<"\n";    
   cout<<"exit(y/n)"<<"\n";    
   cin>>letter;

  if ((letter == 'Y') || (letter == 'y'))     
         done = 1;     
         else          
   cout<<"\n";    
 if ( ( letter == 'n' ) || ( letter == 'N' ) )   // а вот тут он завершится если letter будет иметь значения n 
                                                               // или N.
   return 0;     
 }     
}

Должно работать, сам проверял  smile.  


--------------------
"Единственный способ изучать новый язык программирования - писать на нем 
программы." 
- Brian Kernighan

Remember, st1ng3r 
/server irc.ircline.ru /j #vingrad
PM   Вверх
Xenon
Дата 12.6.2006, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



d00mik  Блин .... Цикл выполняется, пока условие верно. Допустим пользователь нажал N. Проверяем условие - letter неравно N  или letter неравно n. letter неравно N - false, letter неравно n - true. false || true == true, поэтому цикл будет дальше крутиться. 


--------------------
user posted image  
PM MAIL   Вверх
Rockie
Дата 12.6.2006, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



господа, из цикла не вываливаются return -ом =)
Код
#include <conio.h>
#include <iostream.h>
int fact(int);

int fact(int n)  // не забываем тип аргумента
{ int q=1;
  int i;
   if(n==1) return n;
     else
    {
     for(i=2;i<=n;i++)
      {
       q=q*i;
      }
    }
    return q;
}

int main()
{ char letter = ' ';
  int n = 0;
  while (1)      
 { cout<<"Vvedite znachenie\n";
   cin>>n;
   cout<<"\n";
   cout<< fact(n)<<"\n";

   cout<<"exit(y/n)"<<"\n";
   cin>>letter;

   if ( ( letter == 'Y') || (letter == 'y') ) break;
   if ( ( letter == 'n') || (letter == 'N') ) continue;
 }
   cout<<"\nHappy End =)";
   cout<<"\n";
   getch();
   return 0;    
 }

а вообще такие конструкции 
Код
  while (1)   
 лучше вообще не использовать. imho и вообще все, что грозит бесконечностью. =) 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Xenon
Дата 12.6.2006, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Rockie, Почему? Можно return заюзать, только тебя и из функции выкинет smile 


--------------------
user posted image  
PM MAIL   Вверх
koljan
Дата 12.6.2006, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


VIP
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 18.12.2005
Где: г.Архангельск

Репутация: нет
Всего: 1



Цитата(XenonSk @  11.6.2006,  22:32 Найти цитируемый пост)
код C++    
Код

char letter;     
int n;     
do    
 {     
   cout << "Vvedite znachenie\n";     
   cin >> n;     
   cou t<< "Exit(y/n)";     
   cin >> letter;     
}while (letter!='N' && letter!='n');    

 

спасибо всё хорошо работает  

Это сообщение отредактировал(а) koljan - 12.6.2006, 20:15


--------------------
PM MAIL ICQ   Вверх
Fazil6
Дата 12.6.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

господа, из цикла не вываливаются return -ом =)

почему это? очень даже.
Цитата

а вообще такие конструкции 
код C++    
1:    
  while (1)    
 лучше вообще не использовать. imho и вообще все, что грозит бесконечностью. =) 

это от алгоритма зависит и ничего страшного в этом нет 
PM MAIL   Вверх
Rockie
Дата 12.6.2006, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(XenonSk @  12.6.2006,  20:09 Найти цитируемый пост)
Rockie, Почему? Можно return заюзать, только тебя и из функции выкинет  

можно еще "format c:" заюзать =)
break, continue 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Xenon
Дата 12.6.2006, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1529
Регистрация: 12.4.2006

Репутация: 11
Всего: 50



Rockie, Я знаю, что есть break, но ведь return тоже можно?  smile  


--------------------
user posted image  
PM MAIL   Вверх
Fazil6
Дата 12.6.2006, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата

можно еще "format c:" заюзать =)
break, continue 

break и return служат для разных целей и break заменить return не может. Может еще goto вспомнишь?  
PM MAIL   Вверх
Rockie
Дата 12.6.2006, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



Цитата(Fazil6 @  12.6.2006,  20:22 Найти цитируемый пост)
почему это? очень даже.


ссылки пожалуйста, где это очень даже используется.

Цитата(Fazil6 @  12.6.2006,  20:22 Найти цитируемый пост)
это от алгоритма зависит и ничего страшного в этом нет 

это мое личное мнение - я считаю циклы такого рода злом. если разбираться в своем деле то вообще ничего страшного нет.

Цитата(Fazil6 @  12.6.2006,  20:37 Найти цитируемый пост)
break и return служат для разных целей и break заменить return не может. 
 и я о чем

Цитата(Fazil6 @  12.6.2006,  20:37 Найти цитируемый пост)
 Может еще goto вспомнишь? 

а это к чему?..
 


--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0573 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.