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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 24.08.2009, 20:23   #1
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
Плохо Выбор плюса в операторе выбора

Не скажете,почему, при вводе знака плюс, в этой скромной программе,программа выключается, ведь я указал ещё эту строку,
Код:
case ' + ' :cout<<"Ошибочка...";break;
но программа не реагирует на неё:

Код:
#include <iostream>
using namespace std;

int main()
{
	setlocale(0,"");
char*  pstr1 = "Robert Redford"; //Инициализация указателя строкой-именем
char*  pstr2 = "Hopalong Casity";
char*  pstr3 = "Leonardo Davunchi";
char*  pstr4 = "Shylien Vayson";
char*  pstr5 = "Boris Karlof";
char*  pstr6 = "Oliver Hardy";
char* pstr = "Ваша счатливая звезда -> ";
int dice = 0;
cout<<endl
    <<"Выберете счастливую звезду! "
	<<"Введите число от 1 до 6: ";
cin>>dice;
cout<<endl;
switch(dice)
{
case 1:cout<<pstr<<pstr1; break;

case 2:cout<<pstr<<pstr2; break;
case 3:cout<<pstr<<pstr3; break;
case 4:cout<<pstr<<pstr4; break;
case 5:cout<<pstr<<pstr5; break;
case 6:cout<<pstr<<pstr6; break;
case ' + ' :cout<<"Ошибочка...";break;
default:cout<<" Очень жаль, но у вас нет счастливой звезды. ";
}
cout<<endl;

cin.ignore();
cin.get();

}
Golovastik вне форума
Старый 24.08.2009, 20:31   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

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

Во-вторых, вы вводите число
Код:
int dice = 0;
.......
cin>>dice;
А '+' - символ. Если хотите увидеть надпись "Ошибочка", то можете ввести его код - 43.
---------
Если все же хотите вводить сам плюс, то исправьте тип dice на char и все цифры в свитче поместите в кавычки.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 24.08.2009, 20:36   #3
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Когда я напишу вот так:

Код:
case '43' :cout<<"Ошибочка...";break;
или вот так:

Код:
case 43 :cout<<"Ошибочка...";break;
Всё равно ввод плюса игнорируется, и просходит обрыв программы.
Golovastik вне форума
Старый 24.08.2009, 20:43   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

43 нужно вводить в работающей программе, а не в исходнике. А если хотите вводить плюс, то читайте вторую часть предыдущего поста.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 24.08.2009, 20:51   #5
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Ха, ясно теперь. Спасибо.

Последний раз редактировалось Golovastik; 24.08.2009 в 20:54.
Golovastik вне форума
Старый 24.08.2009, 21:10   #6
Golovastik
Заблокирован
 
Регистрация: 25.05.2009
Сообщений: 284
По умолчанию

Не скажите,а почему такой вариант программы не работает?:

Код:

#include <iostream>
using namespace std;

int main()
{
	setlocale(0,"");
	char* pstr = {"Robert Redford"; //Инициализация масива указателей
                  "Hopalong Casity";
                  "Leonardo Davunchi";
                  "Shylien Vayson";
                  "Boris Karlof";
	     "Oliver Hardy"};
char* pstart = "Ваша счатливая звезда -> ";
char dice = 0;
cout<<endl
    <<"Выберете счастливую звезду! "
	<<"Введите число от 1 до 6: ";
cin>>dice;
cout<<endl;
if(dice>=1 && dice<=6)
cout<<pstart<<pstr[dice-1];
else
cout<< "Очень жаль,но у вас нет счастливой звезды. ";
cout<<endl;


cin.ignore();
cin.get();

}
Golovastik вне форума
Старый 24.08.2009, 21:13   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

dice нужно сравнивать с аски-символом. Sazary писал об этом.
Код:
if(dice>='1' && dice<='6') // Или if(dice >= 0x31 && dice <= 0x36)
cout<<pstart<<pstr[dice-0x31];
else
cout<< "Очень жаль,но у вас нет счастливой звезды. ";

Последний раз редактировалось netrino; 24.08.2009 в 21:21. Причина: исправил индекс
netrino вне форума
Старый 24.08.2009, 21:14   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Массив строк задан неверно.
Не char* pstr, а char* pstr[]. И элементы отделяются друг от друга запятыми.
Код:
	char *pstr[] = {
                  "Robert Redford", //Инициализация масива указателей
                  "Hopalong Casity",
                  "Leonardo Davunchi",
                  "Shylien Vayson",
                  "Boris Karlof",
	     "Oliver Hardy"};
Цитата:
Сообщение от netrino
dice нужно сравнивать с аски-символом.
Зачем? о_О Тогда получатся индекс, выходящий за пределы массива.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 24.08.2009 в 21:16.
Sazary вне форума
Старый 24.08.2009, 21:17   #9
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Кстати да, про строки не заметил)
Цитата:
Сообщение от Sazary
Зачем? о_О
Цитата:
Сообщение от Golovastik
Код:
char dice = 0;
А в индекс надо dice-0x31; не доглядел сразу)

Последний раз редактировалось netrino; 24.08.2009 в 21:19.
netrino вне форума
Старый 24.08.2009, 21:21   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Все, теперь увидел ) Да, действительно.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка текста из Консультанта Плюса Busine2009 Microsoft Office Word 1 30.05.2009 12:55
Вопрос об дружественом операторе << Руслантус Общие вопросы C/C++ 2 21.01.2009 19:48
Не проверяется логическое выражение в операторе While lsd11 Помощь студентам 2 15.10.2008 19:09
ошибка в операторе case wowka Помощь студентам 5 24.07.2008 11:47
Вопрос об операторе IF Лёка Общие вопросы Delphi 4 01.02.2008 22:33