LINUX.ORG.RU

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

 , , вкурить,


0

4

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

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

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


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

так и есть. Хотя компилятор это оптимизирует, и ты сразу переходишь к нужной ветке.

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

а можно маленький пример если не сложно

Уж очень хочется его в деле увидеть. И тогда наконец-то с циклами более или менее закончу на сегодня...

tiile
() автор топика

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

Legioner ★★★★★
()

Да.

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

Именно так. Если не будет совпадений, то должен быть default:

#include <stdio.h>

int 
main( int argc, char *argv[] ) {
int color;

    printf( "Цвет (1: красный, 2: синий, 3: зелёный):\n");
    scanf("%d", &color);

    switch (color) {
        case 1: 
            printf("Красный\n");
            break;
        case 2:
            printf("Синий\n");
            break;
        case 3:
            printf("Зелёный\n");
            break;
        default:
            printf("Не получилось. Ещё раз.\n");
    }
    return 0;
}
mr_noone
()
Ответ на: Да. от mr_noone

спасибо огромное!!!

Очень понятный и простой пример. Ура ура ура.

tiile
() автор топика

Читаю книгу по C. Дошел до Switch.
просто пипец.

Правильно. Прежде чем учить синтаксис языка Си, неплохо было бы иметь представление о программировании. К примеру, в SICP разбирается эта тема в главе message passing даются нужные теоретические основы.

Но у вас, быдлокодеров, свой путь.

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

Тут стоит заметить, что в нормальных языках «switch» (у нормальных людей называющийся pattern matching) отрабатывает за Θ(1) независимо от того, что в «case».

anonymous
()

Задание.

Написать программу, которая по номеру месяца выдает название следующего за ним месяца. (При m=1 получаем- februari, 4- may и т.д.)

#include<stdio.h>
main()
{
 int t;
  printf("Vvedite nomer: \n");
  scanf("%d",&t);
 switch(t)
   {
	case 1: printf("February");
		break;
	case 2: printf("March");
		break;
	case 3: printf("April");
		break;
	case 4: printf("May");
		break;
	case 5: printf("June");
		break;
	case 6: printf("July");
		break;
	case 7: printf("August");
		break;
	case 8: printf("September");
		break;
	case 9: printf("October");
		break;
	case 10: printf("November");
		break;
	case 11: printf("December");
		break;
	case 12: printf("January");
		break;
	default: printf("Vvedite cifri ot 1 do 12!");
		break;
   }
printf("\n Cztobi viitdi nazmite ljubuju knopku!");
getch();
}

ой еще писал в начале курса, когда С вкуривали нам...

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

почему это быдлокодеров?

Захотел выучить язык программирования C.

Скачал книгу: Как программировать на C. Авторы: Харви Дейтел, Пол Дейтел.

И вот читаю, изучаю. Потом будут еще и еще книги.

С чего это я быдлокодер? А вы знаете, что сегодня многие университеты даже стали преподавать первым языком C? И ничего, народ живет, кодит, и даже создает проекты.

tiile
() автор топика
Ответ на: комментарий от Licwin

Еще в венде писал :)

Ну думаю это не суть важно, принцип ты поймешь.

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

Повезло вам

А я вот вообще закончил 3 курс и как видите ничерта не знаю, а нам и не вкуривали. Сейчас как раз пока лето надо успеть учиться.

Наша образование отличное, работаешь и учишься вопреки ему.

tiile
() автор топика
Ответ на: Повезло вам от tiile

нам тоже после 3 начали вкуривать... да и так .. ай...

Вообщем сам сядешь - сам выучишь)

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

Тут стоит заметить, что в нормальных языках «switch» (у нормальных людей называющийся pattern matching) отрабатывает за Θ(1) независимо от того, что в «case».

ваше O(1) это 1000..10000 тактов, а сишное 10..20 тактов. Впрочем на асимптотику это не влияет, потому принято.

drBatty ★★
()
Ответ на: почему это быдлокодеров? от tiile

С чего это я быдлокодер?

Быдлокодер не понимает что лежит в основе используемых им инструментов. Ты тоже.

А вы знаете, что сегодня многие университеты даже стали преподавать первым языком C? И ничего, народ живет, кодит, и даже создает проекты.

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

anonymous
()
Ответ на: почему это быдлокодеров? от tiile

С чего это я быдлокодер?

не. Пока вы ещё даже и не быдлоекодер. :-)

И мой вам совет, начните пожалуйста с K&R. А потом всё остальное.

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

Быдлокодер не понимает что лежит в основе используемых им инструментов. Ты тоже.

тогда уместнее ссылка на Кнута. А не на этот ваш LISP.

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

Разве

А что значит «понимать, что лежит в основе используемых интсрументов»?

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

Так и тут. Сел и изучил в достаточном объеме ЯП. Потом продолжаешь читать книги и стараться урвать с разных форумов/сайтов/конференций информацию по оптимизации алгоритмов.

Но вы правы. Я никогда не проходил основы и начальные стадии обучения программирования. Даже Pascal не видел...

tiile
() автор топика
Ответ на: комментарий от aedeph_

Ты опять всё перепутал, там ссылка на sicp, а не на lisp.

какая разница? яних*янипонял по любому.

drBatty ★★
()
Ответ на: Разве от tiile

Так и тут.

Тут вам не там.

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

anonymous
()
Ответ на: Да какая разница? от mr_noone

Да какая разница?
Наличие мозгов обязательно в обоих случаях.

Да, вы правы. Он же себе ногу отпилит.

anonymous
()
Ответ на: Разве от tiile

Вот мне надо спилить дерево - я беру бензопилу и делаю это.

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

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

влияет. Если не понимаешь как оно работает, ничего сделать не получится. Просто бензопила - это очень простой девайс.

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

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

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

В С О(N) работает быстрее, чем O(1) в нормальных языках.

ИЧСХ, часто это высказывание истинно. Потому «нормальные языки» нужны только доцентам и лоровским троллям.

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

Эмм пока даже не читал о таком

Возможно будет в книги позже, либо вообще в другой. А можно пример? Я все только на уровне кода понимаю.

tiile
() автор топика
Ответ на: комментарий от Boy_from_Jungle

а как он работает

На примере покажете новенькому?

tiile
() автор топика

Если коротко, то по очереди проверяет условия, какое первое совпадет — туда goto делает. Выйти, как обычно, можно break'ом.

После компиляции switch выглядит примерно так:

второе условие
goto два
третье условие
goto три
не первое условие
goto выход-из-switch
раз: команды для раз
два: команды для два
три: команды для три
выход-из-switch:
break делает переход на выход-из-switch

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

эммм... наверно не очень понятно:

второе условие
goto два
= если условие выполнилось, то goto два, иначе идем дальше.

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

А это вы рассказали про то

Что под капотом Switch. Оке'й учту на будущее. Спасибо.

tiile
() автор топика
Ответ на: комментарий от Boy_from_Jungle

я не догоняю

У вас из всех ваших сообщений сейчас сквозить сарказм что-ли...

Можете привести свой пример кода, от Гуру C как я понимаю.

tiile
() автор топика
Ответ на: комментарий от urxvt

Хорошо

Switch - структура множественного выбора.

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

согласен

Каша. А еще здесь есть комменты которые просто утверждают, что никто не знает как пользоваться switch. На данный момент лишь два человека толковый код привели, а остальные понабежали поумничать.

tiile
() автор топика
Ответ на: комментарий от nei8Adai

пост создался с целью узнать

Как примерно в коде все это работает. Два человека показали, за что им огромное спасибо. Тема закрыта.

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

tiile
() автор топика
Ответ на: комментарий от wota

еще они нужны для быстрого накидывания кода, узкие места можно потом и на С или С++ переписать

а вот это можно накатать на python'е, или там даже на пхп. Я как понял, под «нормальными» понимались всякие лиспы, и прочие brain fucker'ы.

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