Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2009, 19:54   #1
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
Вопрос Вопрос по мелочи

Здравсвуйте! Когда-то , недавно, мы обсуждали тему среднее арифметическое числа. Я вроде понял её, но есть маленький нюанс. Вот код:
Код:
#include <iostream>
using namespace std;

int main()
{
setlocale(0,"");
int i = 0; 
double s = 0.0, vvod;
char indicator = 'y';
while((indicator == 'y') || (indicator == 'Y') || (indicator == 'yes'))
{
	cout<<endl<<"Введите пожалуйста Хатабыч -> ";
	cin>>vvod;
	++i;
	s +=vvod;
	cout<<endl<<"Продолжить ещё разок?"	<<endl;
		
	cin>>indicator;
}
cout<<"Средднее из "<<i<<" введённых значений = "<<s/i<<endl;
cin.ignore();
cin.get();
return 0;
}
Почему, не работает 3 условие в цикле вайл indicator == 'yes'
И почему обязательно нужно присваивать char indicator = 'y' или char indicator = 'Y', но char indicator = 'yes' не работает; Тоесть обязательно присваивать переменной индикатор именно один из символов, которые я использую в условии цикла вайл? Если не присвоить, работать не будет. И почему не работает 3 условие. Зараннее благодарю
Golovastik вне форума Ответить с цитированием
Старый 23.07.2009, 19:58   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Golovastik Посмотреть сообщение
Здравсвуйте! Когда-то , недавно, мы обсуждали тему среднее арифметическое числа. Я вроде понял её, но есть маленький нюанс. Вот код:
Код:
#include <iostream>
using namespace std;

int main()
{
setlocale(0,"");
int i = 0; 
double s = 0.0, vvod;
char indicator = 'y';
while((indicator == 'y') || (indicator == 'Y') || (indicator == 'yes'))
{
	cout<<endl<<"Введите пожалуйста Хатабыч -> ";
	cin>>vvod;
	++i;
	s +=vvod;
	cout<<endl<<"Продолжить ещё разок?"	<<endl;
		
	cin>>indicator;
}
cout<<"Средднее из "<<i<<" введённых значений = "<<s/i<<endl;
cin.ignore();
cin.get();
return 0;
}
Почему, не работает 3 условие в цикле вайл indicator == 'yes'
И почему обязательно нужно присваивать char indicator = 'y' или char indicator = 'Y', но char indicator = 'yes' не работает; Тоесть обязательно присваивать переменной индикатор именно один из символов, которые я использую в условии цикла вайл? Если не присвоить, работать не будет. И почему не работает 3 условие. Зараннее благодарю
Дело в том, что Вы пытаетесь сравнить тип char(1 байт) с 3-мя символами, так нельзя. Если хотите проводить сравнения со строками, используйте стандартный тип string

Последний раз редактировалось netrino; 23.07.2009 в 20:00.
netrino вне форума Ответить с цитированием
Старый 23.07.2009, 20:02   #3
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Если написать вот так, происходят теже проблеммы.
Код:

#include <iostream>
using namespace std;

int main()
{
setlocale(0,"");
int i = 0; 
double s = 0.0, vvod;
string indicator;
while((indicator == 'y') || (indicator == 'Y') || (indicator == 'yes'))
{
	cout<<endl<<"Введите пожалуйста Хатабыч -> ";
	cin>>vvod;
	++i;
	s +=vvod;
	cout<<endl<<"Продолжить ещё разок?"	<<endl;
		
	cin>>indicator;
}
cout<<"Средднее из "<<i<<" введённых значений = "<<s/i<<endl;
cin.ignore();
cin.get();
return 0;
}
Даже если заменить, ту строку, на эту
Код:
while((indicator == "y") || (indicator == "Y") || (indicator == "yes"))
Golovastik вне форума Ответить с цитированием
Старый 23.07.2009, 20:22   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Golovastik Посмотреть сообщение

И почему обязательно нужно присваивать char indicator = 'y' или char indicator = 'Y', но char indicator = 'yes' не работает; Тоесть обязательно присваивать переменной индикатор именно один из символов, которые я использую в условии цикла вайл? Если не присвоить, работать не будет.
Потому что у себя в цикле вы проверяете равен ли indicator одному из симоволов, а он ещё не инициализирован, выходит что не равен и цикл не выполняется даже один раз.

Цитата:
Сообщение от Golovastik Посмотреть сообщение
Если написать вот так, происходят теже проблеммы.
Код:


#include <iostream>
using namespace std;

int main()
{
setlocale(0,"");
int i = 0;
double s = 0.0, vvod;
string indicator;
while((indicator == 'y') || (indicator == 'Y') || (indicator == 'yes'))
{
cout<<endl<<"Введите пожалуйста Хатабыч -> ";
cin>>vvod;
++i;
s +=vvod;
cout<<endl<<"Продолжить ещё разок?" <<endl;

cin>>indicator;
}
cout<<"Средднее из "<<i<<" введённых значений = "<<s/i<<endl;
cin.ignore();
cin.get();
return 0;
}
Даже если заменить, ту строку, на эту
Код:

while((indicator == "y") || (indicator == "Y") || (indicator == "yes"))
Не забываем подключать #include <string> и инициализировать indicator.
Код:
string indicator("yes");
Иначе while не выполнится ни разу
netrino вне форума Ответить с цитированием
Старый 23.07.2009, 20:29   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Цитата:
string indicator("yes");
либо ипользовать цикл с пост-условием
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 23.07.2009, 20:29   #6
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Странно, заработало. Не могу понять до сих пор, обязательно ли нужно инициализировать переменную индикатор одним из того что находится в круглых скобочках вайла, а ни чем-нибудь другим инициализировать, потому что будет не работать?
Golovastik вне форума Ответить с цитированием
Старый 23.07.2009, 20:47   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Golovastik Посмотреть сообщение
Странно, заработало. Не могу понять до сих пор, обязательно ли нужно инициализировать переменную индикатор одним из того что находится в круглых скобочках вайла, а ни чем-нибудь другим инициализировать, потому что будет не работать?
Обязательно, если проверка условия происходит до первой модификации переменной, учавствующей в условии.

Если хотите без инициализации, то действительно, можно использовать цикл с пост-условием( do { } while(); )
netrino вне форума Ответить с цитированием
Старый 23.07.2009, 22:25   #8
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Забыл спросить. Если это всё делать через ,блок do..while, тогда всё равно же нужно использовать тип стринг, только без инициализации? Я имею ввиду,чтоб использовать сравнения,которые я описал выше.
Попробывал так, это правильно или нет?
Код:
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
setlocale(0,"");
int i = 0; 
double s = 0.0, vvod;
 
string indicator;
do
{
        cout<<endl<<"Введите пожалуйста Ахмед -> ";
        cin>>vvod;
        ++i;
        s +=vvod;
        cout<<endl<<"Продолжить ещё разок?"     <<endl;
                
        cin>>indicator;
}while((indicator == "y") || (indicator == "Y") || (indicator == "yes"));
 
cout<<"Средднее из "<<i<<" введённых значений = "<<s/i<<endl;
cin.ignore();
cin.get();
return 0;
}

Последний раз редактировалось Golovastik; 23.07.2009 в 22:35.
Golovastik вне форума Ответить с цитированием
Старый 23.07.2009, 22:47   #9
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Ну раз работает, значит всё правильно)
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10
Вопрос по C++ Sanek_ntsk Свободное общение 3 09.01.2008 14:45