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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не работает 'case' 
:(
    Опции темы
DESert
Дата 22.5.2006, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый всем вечер.
Такой код:
Код

char s[50];
switch(s[0])
{
   case 'п', 'ч':
   ..........
   ..........
   break;
  default: break;
}

Что здесь неправильно? Подскажите плиз 
--------------------
Трудись, и будешь счастлив ты!
PM MAIL ICQ   Вверх
nikitao
Дата 22.5.2006, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


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

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



Цитата(DESert @  22.5.2006,  19:14 Найти цитируемый пост)
Что здесь неправильно?

Код

 case 'п', 'ч':

Подсказал  smile  


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
Void
Дата 22.5.2006, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



В Си нет множественных вариантов в case. Пиши так:
Код
switch (...) {
    case 'a': case 'b': case 'c':
        // some action
        break;
    ...
}
 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
DESert
Дата 22.5.2006, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



тут возникает другая проблема...
Код

char s[50];
switch (s[0]) {    
    case 'п': case 'числ.'  
        // some action    
        break;    
    ...    
}

из-за второго case выдается ошибка "too much characters in constant"... если написать просто 'числ' (т.е. без точки) то всё работает, а мне надо с точкой
почему это ошибка и как её исправить?  smile  
--------------------
Трудись, и будешь счастлив ты!
PM MAIL ICQ   Вверх
Void
Дата 22.5.2006, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



DESert, потому что switch не работает со строками. А 'числ' — это не строка, а целочисленная константа. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
DESert
Дата 22.5.2006, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ясно...  smile 
Void, а как тогда быть?
Это будет работать?
Код

....
if (s[0]=='числ.') ....
.....

 
--------------------
Трудись, и будешь счастлив ты!
PM MAIL ICQ   Вверх
ZeusAtVingrad
Дата 22.5.2006, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Void @ 22.5.2006,  19:44)
DESert, потому что switch не работает со строками. А 'числ' — это не строка, а целочисленная константа.

Т.е. 'числ.' - это строка, а 'числ' - константа?  smile  
PM MAIL   Вверх
Void
Дата 22.5.2006, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



ZeusAtVingrad
В Си символ(ы) в одиночных кавычках — константа типа int. В C++ — типа char. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
DESert
Дата 22.5.2006, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

В Си символ(ы) в одиночных кавычках — константа типа int. В C++ — типа char. 


Ну а так почему в Си++ не работает 'числ.'   ????
ведь это типа char.... 
--------------------
Трудись, и будешь счастлив ты!
PM MAIL ICQ   Вверх
Void
Дата 22.5.2006, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



DESert, потому что char — это не строка, это символ. Сделай так:
Код
char s[50];
...
if (!strcmp(s, "Строка 1")) { /* do something */ }
else if (!strcmp(s, "Строка 2")) { /* do something else */ }
...
else { /* no match */ }

Не самый эффективный метод, но для небольшого числа строк пойдет. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
DESert
Дата 22.5.2006, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Void, спасибо большое
Но у меня достаточно большое количество строк  smile 
можно ли как-то по-другому?
А что если использовать тип CString?... этот тип ведь строка.... или символ? 
--------------------
Трудись, и будешь счастлив ты!
PM MAIL ICQ   Вверх
Void
Дата 22.5.2006, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



DESert, э-э… не заморачивайся smile Я сильно сомневаюсь, что в твоей задаче разницу в скорости со, скажем, хэш-таблицей, можно будет заметить невооруженным глазом. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
ZeusAtVingrad
Дата 26.5.2006, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Void @ 22.5.2006,  20:40)
ZeusAtVingrad
В Си символ(ы) в одиночных кавычках — константа типа int. В C++ — типа char.

И чем в данном контексте отличаются: 'числ' и 'числ.'?
Почему одно можно сравнивать с числом, а второе - нет?
Только из-за точки?
И вообще, что это за символьная константа с четырьмя (пятью) символами? 
PM MAIL   Вверх
Void
Дата 26.5.2006, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Цитата(ZeusAtVingrad @  26.5.2006,  02:38 Найти цитируемый пост)
И чем в данном контексте отличаются: 'числ' и 'числ.'?

Тем, что четырые символа помещаются в int, а пять — нет.
Цитата(ZeusAtVingrad @  26.5.2006,  02:38 Найти цитируемый пост)
И вообще, что это за символьная константа с четырьмя (пятью) символами?  

Implementation defined. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
takedo
Дата 26.5.2006, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



так сделай тогда так:
Код

///твои строки:
CStringArray strar;
strar.Add("Первая строка");
strar.Add("вторая строка");

int n=strar.GetCount()+1;//то есть за границами или можно присвоить -125;
for(int i=0;i<star.GetCount();i++)
if(star[i]==твоя строка)
{
n=i;
break;
}

switch(n)
{
case 0://это значит, что твоя строка совпала с "Первая строка"
break;
default:
break;
}
Ну в общем, примерно можно так, если я правильно понял. :) 
 


--------------------
я не гольфист - я хоккеист
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0661 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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