![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| DESert |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 6.12.2005 Где: Москва Репутация: нет Всего: 1 |
Добрый всем вечер.
Такой код:
Что здесь неправильно? Подскажите плиз --------------------
Трудись, и будешь счастлив ты! |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
-------------------- Жизнь - печальная штука. |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
В Си нет множественных вариантов в case. Пиши так:
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| DESert |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 6.12.2005 Где: Москва Репутация: нет Всего: 1 |
тут возникает другая проблема...
из-за второго case выдается ошибка "too much characters in constant"... если написать просто 'числ' (т.е. без точки) то всё работает, а мне надо с точкой почему это ошибка и как её исправить? --------------------
Трудись, и будешь счастлив ты! |
|||
|
||||
| Void |
|
|||
![]() λ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 |
|||
|
||||
| DESert |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 6.12.2005 Где: Москва Репутация: нет Всего: 1 |
ясно...
Void, а как тогда быть? Это будет работать?
--------------------
Трудись, и будешь счастлив ты! |
|||
|
||||
| ZeusAtVingrad |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 12.4.2006 Репутация: нет Всего: нет |
Т.е. 'числ.' - это строка, а 'числ' - константа? |
|||
|
||||
| Void |
|
|||
![]() λ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 |
|||
|
||||
| DESert |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 6.12.2005 Где: Москва Репутация: нет Всего: 1 |
Ну а так почему в Си++ не работает 'числ.' ???? ведь это типа char.... --------------------
Трудись, и будешь счастлив ты! |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
DESert, потому что char — это не строка, это символ. Сделай так:
Не самый эффективный метод, но для небольшого числа строк пойдет. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| DESert |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 6.12.2005 Где: Москва Репутация: нет Всего: 1 |
Void, спасибо большое
Но у меня достаточно большое количество строк можно ли как-то по-другому? А что если использовать тип CString?... этот тип ведь строка.... или символ? --------------------
Трудись, и будешь счастлив ты! |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
DESert, э-э… не заморачивайся
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| ZeusAtVingrad |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 12.4.2006 Репутация: нет Всего: нет |
И чем в данном контексте отличаются: 'числ' и 'числ.'? Почему одно можно сравнивать с числом, а второе - нет? Только из-за точки? И вообще, что это за символьная константа с четырьмя (пятью) символами? |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Тем, что четырые символа помещаются в int, а пять — нет.
Implementation defined. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| takedo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 1.6.2005 Репутация: 1 Всего: 3 |
так сделай тогда так:
-------------------- я не гольфист - я хоккеист |
|||
|
||||
| ZeusAtVingrad |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 12.4.2006 Репутация: нет Всего: нет |
Компилю gcc'шником такой код:
Пока не оставил в одиночных кавычках по ОДНОМУ символу - компилер ругался. |
|||
|
||||
| Replicator |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 30.4.2006 Где: Outer Heaven Репутация: нет Всего: нет |
Ну и правильно! Апострофы служат для записи константного символа. В апострофах записывается символ - один символ и он имеет тип char. Ну как же в одном символе может быть 5 символов?!
--------------------
|
|||
|
||||
| ZeusAtVingrad |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 12.4.2006 Репутация: нет Всего: нет |
Вот я об этом и спрашиваю: какие там "числ" и "числ."?
|
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
может
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
ZeusAtVingrad, еще раз: в Си++ в одиночные кавычки можно поместить только один символ (или escape-последовательность). Поскольку в исходном сообщении 'числ' у тебя все-таки скомпилировался (но не работал), я сделал вывод, что ты пишешь на чистом Си.
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| ZeusAtVingrad |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 12.4.2006 Репутация: нет Всего: нет |
Исходное сообщение вообще не я писал.
Я тут просто пытаюсь DESert'а на чистую воду вывести с его константами 'числ' и 'числ.' Типа вторая - не является константой int, а первая - является. Из-за того, что вторая - больше 4х байт, а первая - помещается в int. Я вот и пытаюсь выяснить: или я что-то пропустил в С/С++ или человек заблуждается. |
|||
|
||||
| Replicator |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 30.4.2006 Где: Outer Heaven Репутация: нет Всего: нет |
Вообще, С и С++ - это 2 разных языка и они могут вести себя по-разному.
В С++, в апострофах может находиться один символ и это будет константа типа char. С я не знаю, но если верить остальным, то в апострофах может находиться до 4 символов и это все является константой типа int. --------------------
|
|||
|
||||
| ZeusAtVingrad |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 12.4.2006 Репутация: нет Всего: нет |
Ну уж в таких делах С и С++ ведут себя одинаково.
Я ж написал, что компилил gcc'шником (C-компилятор) - он на такие "константы" ругается. |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Если не секрет, почему ты решил, что gcc - сишный компилер? (GNU Compiler Collection)
|
|||
|
||||
| ZeusAtVingrad |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 12.4.2006 Репутация: нет Всего: нет |
Наверное потому что g++ - плюсовый.
В любом случае, и для C и для С++, 'abcde' - не является корректной символьной (хоть int хоть char) константой. |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
ZeusAtVingrad, ладно, придется таки давить авторитетами
Стандарт ISO/IEC 9899:1999, известный как C99:
Потом идем сюда, ставим C99 mode и компилируем. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| NextAlex |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 121 Регистрация: 10.8.2005 Где: Украина, г. Одесс а Репутация: 2 Всего: 3 |
как минимум потому что в зависимости от составления makefile он компилирует код как код C или код C++ или Java и т.д. можешь посмотреть там где накопал название кроме того человек, который использует gcc не может не знать как составляется makefile... --------------------
Говорила мама: "Учись играть на скрипке". Не хотел носить ноты - будешь носить пианино ... |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Я не имел ввиду, что в gcc нет сишного компилера, я имел ввиду, что там есть и другие компилеры (в частности C++) и чем именно проверял ZeusAtVingrad - это ещё вопрос.
Кем считается? |
|||
|
||||
| ZeusAtVingrad |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 12.4.2006 Репутация: нет Всего: нет |
Чтобы откомилить файл с одной функцией main() безо всяких include - никаких makefile'ов не надо.
Достаточно: gcc test.c По поводу авторитетов: Я язык по книгам и на практике осваива(л,ю). Стандарты не читал. В книгах и на практике все char-константы состоят из ОДНОГО символа. И ещё вопрос: "Стандарт ISO/IEC 9899:1999, известный как C99" Он как соотносится с ANSI C? Не то чтобы это наезд, просто я как-то всё время слышал об ANSI C, а ISO/... не знаю. |
|||
|
||||
| Любитель |
|
|||
|
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
Комитет ANSI теперь называется ISO, если я не ошибаюсь. А C99 - просто последний (на сегодня) стандарт C (есть ещё C8x, x - не помню, некоторые ориентируются на него, но данный момент в нём работает точно также).
|
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
ANSI — американский национальный институт стандартизации.
ISO — международная организация стандартизации.
Вот и не надо утверждать, что такого не может быть, потому что не может быть никогда. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
Что-то как то заумно сказанул Я не понял... -------------------- Жизнь - печальная штука. |
|||
|
||||
| ZeusAtVingrad |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 12.4.2006 Репутация: нет Всего: нет |
Т.е. ANSI C и C99 - это разные стандарты? Думаю с этого нам и стоило начать. А насчёт "может - не может". Можно вообще свой синтаксис придумать, натравить на него компилятор компиляторов и говорить, что, например, числовые значения нужно обрамлять символами $ (чтобы денег больше было). |
||||
|
|||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
--------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| ZeusAtVingrad |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 12.4.2006 Репутация: нет Всего: нет |
Как же не разные, если они выпущены разными организациями?
Я не говорю о внутреннем наполнении: возможно они от корки до корки одинаковы, но всё-таки разные? Один - международный, второй - американский. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |