LINUX.ORG.RU

Switch - помогите осилить в C

 , , вкурить,


0

4

Читаю книгу по C. Дошел до Switch. А тут в книге такой говянный пример приведен по работе с данным циклом, что просто пипец.

Лор, пожалуйста приведите простой пример использования switch.

P.S если правильно понял, то при введеном значении, это значение прогоняется по всему листу switch case: и как только оно совпадает, то происходит действие вложенное в case n:


Ответ на: комментарий от ms-dos32

только в твоем коде не нужно подключать целый stdlib для пары функций

нашел, к чему придраться. Ну да, exit можно заменить на return (это дело привычки), или просто написать его прототип, а вот макросы платформозависимы. Но это, в принципе, не так уж и важно.

Кстати, у меня там опечатка: вывод fputs подразумевался в stderr.

theNamelessOne ★★★★★
()

Посоны, очень интресные примеры. Компиляли всем двором. А кто значет чо по иф элсе, а то книжки этож ни па пацнски.

anonymous
()
Ответ на: комментарий от ms-dos32

целый stdlib для пары функций

Этот stdlib находится в той же libc, с которой ты линкуешь в любом случае.

anonymous
()
Ответ на: комментарий от drBatty

ну давай схему на С том же... А то, как ты наверное понял, от этих ваших академических ЯП меня тошнит.

О, еще один юморист на сцене.

dave ★★★★★
()
Ответ на: комментарий от z00ke

Мм, я видел sicp только с примерами на lisp, или я что-то не понял?

не понял. Мне тут предлагают почитать SICP, и попутно перевести все примеры на С, который я понимаю. Это у лисперов всегда так: не понятен лисп? Дык ведь он прямо переводится на С программой на лиспе! Это математически строго доказано!!! Я даже видео в интернетах кого-то, кто пытался переводить. Получилось нерабочая и нечитаемая НЁХ, потому-что это нужно только С-кодерам! Вот пусть они и допиливают.

drBatty ★★
()
Ответ на: комментарий от ms-dos32
case (9):
   month = 9;
  break;
  case (10):
   month = 10;
  break;
  case (11):
   month = 11;
  break;

ну точно про тебя: http://lurkmore.to/Индусский_код

Индусский код (в среде программистов 80х также известен как Glitch) — в самом общем случае, это криво написанный, но каким-то удивительным образом работающий код. Индусский код написан наиболее неочевидным и неестественным из всех возможных способов. Именно этим он и отличается от быдлокода, который хотя бы капельку очевиден и сделан, хоть и по детсадовским, но по правилам.

По другой трактовке, индусский код — жаргонное нарицательное название для программного кода крайне низкого качества, использующего простые, но порочные принципы «copy-paste», «главное — завалить, а там запинаем», «шапкозакидательство». Также известен как «write only», или (в пику принципу «написано однажды — читается везде») — «написанное однажды — лучше не читать».

drBatty ★★
()
Ответ на: комментарий от anonymous

Посоны, очень интресные примеры. Компиляли всем двором. А кто значет чо по иф элсе, а то книжки этож ни па пацнски.

http://erlang-mnesia-video.ru/

anonymous
()
Ответ на: комментарий от ms-dos32

Оказывается, эти команды вроде pushl и cmpl работают только для 386+ процессоров.

ВНЕЗАПНО: у тебя есть другие?

drBatty ★★
()

А так и думал. Вопрос про С, но пришел Лавсан и предложил поесть говнолиспа.

anonymous
()
Ответ на: комментарий от drBatty

case принимает ТОЛЬКО константные значения. Я пытался подставить туда переменную - ошибка компиляции. Предложи способ лучше, умник (мы тут switch обсуждаем, если что)

ms-dos32
()
Ответ на: комментарий от anonymous

При использовании for ты получишь error: case label does not reduce to an integer constant
И перестаньте мне клевать мозги про индийский код, ТС говорит про решение задачи с использованием switch - я и еще кто-то его написали

ms-dos32
()
Ответ на: комментарий от drBatty

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

Внезапно.

Dudraug ★★★★★
()
Ответ на: комментарий от drBatty

Да и вообще, Си слишком сложен для первого ЯП, лучше что-нить попроще, вроде MIX (опять-таки, см Кнута), без ассемблера дао С понять невозможно.

Си, не Си++ вполне ок для первого языка.

Dudraug ★★★★★
()
Ответ на: пост создался с целью узнать от tiile

А все, что без примера (кода) - вообще не интересно. Это технический форум =)

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

Dudraug ★★★★★
()

Странно, что ты решил задать такой вопрос на форуме. По языку много книг, до черта информации в интернете. Выяснить было бы просто.

Что касается SICP, то обычно многие умные программисты отличаются тем, что эту книгу читали. Выбор за тобой, читать ее или нет. Но на мой взгляд, в этой не совсем взрослой теме ее зря упомянули.

dave ★★★★★
()
Ответ на: комментарий от ms-dos32

case принимает ТОЛЬКО константные значения. Я пытался подставить туда переменную - ошибка компиляции. Предложи способ лучше, умник (мы тут switch обсуждаем, если что)

я знаю, что только int, и только те, которые известны на этапе компиляции. В частности и константы. А если мы тут обсуждаем switch, это не повод, что-бы пихать его везде, где нужно, и не нужно. В данном случае очевидно, что switch тут лишний.

month = num % 12;

заменяет полностью твой switch.

drBatty ★★
()
Ответ на: комментарий от drBatty

Это...

это как?

называется 'case ranges', это gcc extensions... Вполне допустимая штука в gcc. http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Case-Ranges.html#Case-Ranges

В gcc довольно много такого же синтаксического сахара. ;) И рекомендую посмотреть в общем и целом gcc extensions. Удобно.

mr_noone
()
Ответ на: комментарий от ms-dos32

да, 8086, на ибее купил

а у меня с советских времён ИСКРА 1033.11 валяется. И что?

drBatty ★★
()
Ответ на: комментарий от ms-dos32

И перестаньте мне клевать мозги про индийский код, ТС говорит про решение задачи с использованием switch - я и еще кто-то его написали

ВНЕЗАПНО, ТС не просил решать никаких задач, он просил объяснить ему, как использовать switch. А ты ему наглядно показал, как его использовать НЕ нужно.

drBatty ★★
()
Ответ на: Это... от mr_noone

называется 'case ranges', это gcc extensions...

я уже понял. Просто изначально там было ДВЕ точки, что меня сбило с мысли, я совсем забыл про это редкое, и ИМХО ненужное расширение.

В gcc довольно много такого же синтаксического сахара. ;) И рекомендую посмотреть в общем и целом gcc extensions. Удобно.

это мне тоже известно. Я просто не хочу ломать голову, «почему мой код на _этом_ компиляторе не собирается??». Если Вам требуется собирать только хэловорлды на последнем gcc - я рад за вас...

drBatty ★★
()
Ответ на: Нет. от mr_noone

Я проверял. Работает.

ладно, работает, и пусть работает. Я же не против...

drBatty ★★
()
Ответ на: комментарий от dave

SICP

Но на мой взгляд, в этой не совсем взрослой теме ее зря упомянули.

Почему же? Вон если бы ТС прочитал его, то ну не возникло бы у него такого глупого вопроса. И я уверен, что этот вопрос у него не последний, если он не осилил switch, то скорее всего дальше пойдут вопросы намного глупее.

anonymous
()
Ответ на: комментарий от anonymous

Небежало помогателей в Development, 3 страницы switch осиливают и скор колотят.

второй день пишу в эту тему, скор не меняется. ЧЯДНТ?

drBatty ★★
()
Ответ на: комментарий от drBatty

Ты все перепутал, лисп переводится на с программой на хацкел

в сортах говна не разбираюсь.

говно у тебя в голове, питерское быдло.

anonymous
()
Ответ на: SICP от anonymous

Почему же? Вон если бы ТС прочитал его, то ну не возникло бы у него такого глупого вопроса.

вопрос был скорее по сишному синтаксису. Или в схеме имеется оператор с аналогичным синтаксисом и поведением?

drBatty ★★
()
Ответ на: комментарий от anonymous

говно у тебя в голове, питерское быдло.

под «говном» ты подразумеваешь знание С? Тогда да, не спорю, есть немного. Оно мне полезнее этих ваших схем.

drBatty ★★
()
Ответ на: комментарий от drBatty

вопрос был скорее по сишному синтаксису.

вопрос был не по синтаксису. вопрос был в стиле как это работает. в сицпе во второй главе разбирается детально как это работает и когда применять.

anonymous
()
Ответ на: комментарий от drBatty

под «говном» ты подразумеваешь знание С?

Нет. Знание синтаксиса не может быть говном. Говно - это твоя узколобость, нетерпимость и фанатичность.

anonymous
()
Ответ на: комментарий от drBatty

А. Ну, да. :)

там было ДВЕ точки

Понял. :)

и ИМХО ненужное расширение.

Обойтись можно, но иногда это несколько экономит время.

«почему мой код на _этом_ компиляторе не собирается??»

Ну, я пользуюсь как правило не одним компилятором. И, если не ошибаюсь, то данные расширения (правда в более ранней форме, сейчас уже не помню за давностью лет в чём там собака порылась) были где-то в районе Motorola DragonBall (33MHz) и gcc ветки 2.95.2 (последняя версия, с которой довелось с данным процом работать была 2.95.5, потом чего-то там с поддержкой по-моему, намудрили, да и не интересно было).

Если Вам требуется собирать только хэловорлды на последнем gcc - я рад за вас...

Большое спасибо. :))) Но плата на AT91SAM7P256, которая валяется на столе (зачем-то), передаёт Вам привет, щерясь своим разъёмом. :)))

mr_noone
()
Ответ на: комментарий от anonymous

вопрос был не по синтаксису. вопрос был в стиле как это работает. в сицпе во второй главе разбирается детально как это работает и когда применять.

на вопрос «как это работает» даже одного параграфа много. Вопрос «когда применять» вообще не имеет смысла - когда надо применять многопутёвые ветвления? Очевидно тогда, когда необходимо пойти по одному из многих путей. К.О.

drBatty ★★
()
Ответ на: комментарий от drBatty

Очевидно тогда, когда необходимо пойти по одному из многих путей.

О, да, конечно, ты такое неузколобый.

anonymous
()
Ответ на: комментарий от theNamelessOne

Есть, только более «мощный»

дык и я про что говорил уже: мощность оператора не позволяет его корректно свернуть в машинный код, так, что-бы он _быстро_ работал. В Си компилятор знает и число путей, и значения констант, потому оптимизация намного более лучшая (особенно в нетривиальных случаях).

drBatty ★★
()
Ответ на: А. Ну, да. :) от mr_noone

Ну, я пользуюсь как правило не одним компилятором. И, если не ошибаюсь, то данные расширения (правда в более ранней форме, сейчас уже не помню за давностью лет в чём там собака порылась) были где-то в районе Motorola DragonBall (33MHz) и gcc ветки 2.95.2

очевидно, это вопрос привычки. я уже попадал в случаи, в которых новые расширения не срабатывают, и привык их избегать...

Но плата на AT91SAM7P256, которая валяется на столе (зачем-то), передаёт Вам привет, щерясь своим разъёмом. :)))

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

drBatty ★★
()
Ответ на: комментарий от drBatty

Не-не-не...

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

Всякие сексуальные извращения на почве похапе это не ко мне. :) У меня есть С, всё работает. Про дшыз, рфылудд и прочие новомодные чтучки — то же. :) Может, оно конечно ново, продвинуто и современно, но вот пока я не могу писать на всём этом что-нибудь типа обмена по протоколу (какому-то) на каком-то устройстве, идут они... Ну и пока основная масса серверов (почта, веб, что угодно) написаны на С, то идут они туда же.

Не буду скрывать — SICP читал, но что делать — быдлокодер я, быдлокодер. Мне вот тут сейчас «светит» сбыдлокодить (и скрасноглазить) небольшой http-proxy, так вот выбор языка очевиден. С.

/* Про «тыщщи их» в отношении http-proxy не надо, хорошо? Задачка будет решаться весьма специфичная. Анализ существующих решений показал что пока не решали именно эту задачу. */

mr_noone
()

А троллинг то развели :)

Licwin ★★★★★
()
Ответ на: Не-не-не... от mr_noone

Всякие сексуальные извращения на почве похапе это не ко мне. :)

там вопрос ИМХО не по php, с последним и так всё ясно - память забирается, но не освобождается, хотя это указано явно. Это просто пример того, что некоторые реализации могут «немного» отличаться, просто в пхп это куда как заметнее.

Не буду скрывать — SICP читал

я тоже когда-то читал. ИМХО мутная книжка, текста много, но там мало что для меня нового оказалось. Может оно кому-то и полезно будет... Лисперу какому-нить.

Мне вот тут сейчас «светит» сбыдлокодить (и скрасноглазить) небольшой http-proxy, так вот выбор языка очевиден. С.

удачи.

drBatty ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.