Не пойму как сделать..

CADAS
Offline
Зарегистрирован: 30.05.2016

Здраствуйте. С недавних пор заинтересовался Ардуино.

Пишу скетч под себя. Но вот появился вопрос. Как сделать, чтобы при получении единицы ( 1) выполнялся код который в скобках и переставал выполняться после получения двойки (2). Все это будет делаться через блюпуп. Вот кусок кода.. Подскажите в какую сторону копать. Ни как не могу понять, аж мозг закипает.

  if (val == '1')// При символе "1" выполнялся код
    {
      // код для выполнения до отмены
    }

    
    if ( val == '0')// При символе "0" прекратить выполнение кода
    {
      //остановить выполнение кода
    }

Заранее спасибо!!! С уважением Игорь Пискунов.

CADAS
Offline
Зарегистрирован: 30.05.2016

CADAS пишет:

Здраствуйте. С недавних пор заинтересовался Ардуино.

Пишу скетч под себя. Но вот появился вопрос. Как сделать, чтобы при получении единицы ( 1) выполнялся код который в скобках и переставал выполняться после получения двойки (2). Все это будет делаться через блюпуп. Вот кусок кода.. Подскажите в какую сторону копать. Ни как не могу понять, аж мозг закипает.

  if (val == '1')// При символе "1" выполнялся код
    {
      // код для выполнения до отмены
    }

    
    if ( val == '0')// При символе "0" прекратить выполнение кода
    {
      //остановить выполнение кода
    }

 

Заранее спасибо!!! С уважением Игорь Пискунов.

Ошибся.. при получении 0 а не 2, хотя, я думаю и так понятно, что хотел сказать.

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Читаете символ блютуп, если он равер 1 - задаете значение глобальной переменной выполняющей роль тригера.

если он равен 0 - задаете другое значение глобальной переменной.

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

Глобальная переменная должна быть задана за пределами функции loop(), так она будет сохранять свое значение.

А в функции loop() будет несколько операторов if - для обработки входящих данных из блютуп, обработки состояний глобальных переменных. 

CADAS
Offline
Зарегистрирован: 30.05.2016

NeiroN пишет:

Читаете символ блютуп, если он равер 1 - задаете значение глобальной переменной выполняющей роль тригера.

если он равен 0 - задаете другое значение глобальной переменной.

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

Глобальная переменная должна быть задана за пределами функции loop(), так она будет сохранять свое значение.

А в функции loop() будет несколько операторов if - для обработки входящих данных из блютуп, обработки состояний глобальных переменных. 

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

int val; 

Потом слушаю блюпуп, если есть  данные

void loop()
{
  if (Serial.available())
  {
    val = Serial.read();

при 1 выполняю код в скобках.

если 0 остановить выполнение кода.

Именно как остановить выполнение кода и не могу. 

Грубо говоря, я хочу чтобы при 1 выполнялся вот этот код

{
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
}

как остановить при 0??? 

Если не сложно, чиркните кусочек кода...

 

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

программа выполняется последовательно, это и есть однозадачность. delay(1000) тормозит систему на секунду, то есть ничего не принимается и не анализируется в течении секунды. Нужно избавляться от delay если хотим что то делать или за чем то следить параллельно. Изучайте blink без delay. И соответственно нужно обнивлять состояние переменной постоянно во время выполнения вашего кода, если Вы хотите чтобы его выполнение прерывалось при поступлении нового значения. Если работайте с каким то кодом выкладывайте его целеком, даже если он не рабочий. Вам поправят, а писать код за Вас... пфф...

CADAS
Offline
Зарегистрирован: 30.05.2016

Mr.Privet пишет:

программа выполняется последовательно, это и есть однозадачность. delay(1000) тормозит систему на секунду, то есть ничего не принимается и не анализируется в течении секунды. Нужно избавляться от delay если хотим что то делать или за чем то следить параллельно. Изучайте blink без delay. И соответственно нужно обнивлять состояние переменной постоянно во время выполнения вашего кода, если Вы хотите чтобы его выполнение прерывалось при поступлении нового значения. Если работайте с каким то кодом выкладывайте его целеком, даже если он не рабочий. Вам поправят, а писать код за Вас... пфф...

Спасибо!! почти разьяснили. А писать за меня весь код я не просил.

Просто думал десять строк для примера не тяжелая ноша. 

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

 

CADAS
Offline
Зарегистрирован: 30.05.2016
int val;
int LED = 13;

void setup()

{
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
}
void loop()
{
  if (Serial.available())
  {
    val = Serial.read();

    // При символе "1" выполняем то что в скобках (мигаем светодиодом)
    if (val == '1')
    {
      digitalWrite(13, HIGH);  
  delay(1000);             
  digitalWrite(13, LOW);   
  delay(1000);           
    }

    // При символе "0" останавливаем код который запустили выше
    if ( val == '0')
    {
      // вот здесь что писать???
    }

  }
}

Ну пускай мой код будет выглядеть вот так. Поправте меня- сам вопрос перед символами ??? :-)

fogary
Offline
Зарегистрирован: 05.03.2016

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

CADAS
Offline
Зарегистрирован: 30.05.2016

fogary пишет:

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

вот отсюда по подробнее. 

пришло в блюпуп 1- светодиод начал мигать- включился раз и выключился раз. Это все- или он будет мигать пока мигалка не устанет- вот в чем вопрос.

CADAS
Offline
Зарегистрирован: 30.05.2016

 

наверное объяняюсь неправильно. Мне нужно, чтобы код в скобках выполнялся постоянно( по кругу), пока не придет ноль (0)

 

fogary
Offline
Зарегистрирован: 05.03.2016

В том виде, как есть сейчас, мигнет один раз, после получения "1". Если хотите чтобы мигалка включалась по "1" и мигала пока не придет "0", то код нужно слегка изменить.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

CADAS,

В вашем примере условие if ( val == '0') не нужно вообще. Нет такого понятия, как принудительно "остановить код". Код в фигурных скобках первого условия будет выполняться, пока будет истинно условие if (val == '1'). Если это условие перестанет быть истинным (val будет равно чему угодно, кроме единицы) - код в фигурных скобках перестанет выполнятся.

fogary
Offline
Зарегистрирован: 05.03.2016

CADAS пишет:

наверное объяняюсь неправильно. Мне нужно, чтобы код в скобках выполнялся постоянно( по кругу), пока не придет ноль (0)

Тогда так:

char val = '0';
int LED = 13;
	 
void setup()
{
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
}

void loop()
{
  if (Serial.available())
  {
    val = Serial.read();
  }

  // При символе "1" выполняем то что в скобках (мигаем светодиодом)
  if (val == '1')
  {
    digitalWrite(LED, HIGH); 
	delay(1000);            
	digitalWrite(LED, LOW);  
	delay(1000);          
  }
}

Светодиод будет светить непрерывно (строчка "digitalWrite(LED, HIGH)" в setup) пока не придет "1".

CADAS
Offline
Зарегистрирован: 30.05.2016

Jeka_M пишет:

CADAS,

В вашем примере условие if ( val == '0') не нужно вообще. Нет такого понятия, как принудительно "остановить код". Код в фигурных скобках первого условия будет выполняться, пока будет истинно условие if (val == '1'). Если это условие перестанет быть истинным (val будет равно чему угодно, кроме единицы) - код в фигурных скобках перестанет выполнятся.

То есть если я пошлю на блюпуп 1- то код вскобках будет выполняться покругу? Я имею ввиду  так как сказал выше- включили диод на секунду, выключили диод на секунду и все- код закончиться, или будет мигать пока в блюпуп не придет другой символ?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

CADAS,

Извиняюсь, я невнимательно прочитал что Вам нужно получить. По кругу выполняться не будет. В том коде светодиод будет мигать один раз при получении каждой 1, как сказал fogary.

CADAS
Offline
Зарегистрирован: 30.05.2016

fogary пишет:

CADAS пишет:

наверное объяняюсь неправильно. Мне нужно, чтобы код в скобках выполнялся постоянно( по кругу), пока не придет ноль (0)

Тогда так:

char val = '0';
int LED = 13;
	 
void setup()
{
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
}

void loop()
{
  if (Serial.available())
  {
    val = Serial.read();
  }

  // При символе "1" выполняем то что в скобках (мигаем светодиодом)
  if (val == '1')
  {
    digitalWrite(LED, HIGH); 
	delay(1000);            
	digitalWrite(LED, LOW);  
	delay(1000);          
  }
}

Светодиод будет светить непрерывно (строчка "digitalWrite(LED, HIGH)" в setup) пока не придет "1".

нет. Это не главное. не проблема изменить на LOW. Для меня главное выполнение кода в скобках непрервно пока не придет другой символ по блюпупу..

CADAS
Offline
Зарегистрирован: 30.05.2016

Jeka_M пишет:

CADAS,

Извиняюсь, я невнимательно прочитал что Вам нужно получить. По кругу выполняться не будет. Тот код будет мигать один раз при получении каждой 1, как сказал fogary.

Вот вот.. а как сделать, чтобы гонял по кругу?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

CADAS пишет:

Для меня главное выполнение кода в скобках непрервно пока не придет другой символ по блюпупу..

Так и будет, потому что условие if (val == '1') вынесено наружу из условия if (Serial.available()), а раньше оно было вложенным и выполнялось только когда что-то приходило по serial.

CADAS пишет:

Вот вот.. а как сделать, чтобы гонял по кругу?

Код из поста #13

CADAS
Offline
Зарегистрирован: 30.05.2016

А присвоение переменной=0 в начале кода что нам дает?

CADAS
Offline
Зарегистрирован: 30.05.2016

получается меня тормозила скобка в 16 строке?

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

Там писать то что Вы хотели бы чтобы контроллер делал когда на Serial приходит значение "0". Вы хотите чтобы Arduino завершило работу и отключилось от питания? этого не выдет, хотя мы можем просто сказать ему ничего не делать, а ожидать изменений в сериал. Вот немного переделал и прокоментировал Ваш код...

#define LED 13 // Так более тру )))
bool state = LOW;
int val;
unsigned long timer; // длинная (4 байта) беззнаковая (только больше нуля) переменная для сохранения времени события
void setup()
{
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
}
void loop()// этот цыкл будет повторяться пока не сядет батарейка)))
{
  if (Serial.available())//проверяем если что то в Serial
  {
    val = Serial.read();// если есть то читаем и сохраняем это в переменную val
    if (val == '1')state=HIGH;
    if (val == '0')state=LOW;
  }
  if(state)//Здесь при моргании лампочки мы избавились от delay и у нас этот кусок проскакивает очень быстро, если секунда не прошла мы просто ничего не делаем и идем по цыклу дальше.
  {
    if(millis()-timer>1000)//если прошла секунда
    {
      digitalWrite(LED, !digitalRead(LED));//Конвертируем пин
      timer=millis();// пишем в переменную timer текущее время
    }   
  }
  if(!state)//здесь мы делаем что то что нужно при получении "0",на пример гасим лампочку, опять же проскакивем быстро.
  {
    digitalWrite(LED,LOW);
  }

 

 

CADAS
Offline
Зарегистрирован: 30.05.2016

Mr.Privet пишет:

Там писать то что Вы хотели бы чтобы контроллер делал когда на Serial приходит значение "0". Вы хотите чтобы Arduino завершило работу и отключилось от питания? этого не выдет, хотя мы можем просто сказать ему ничего не делать, а ожидать изменений в сериал. Вот немного переделал и прокоментировал Ваш код...

#define LED 13 // Так более тру )))
bool state = LOW;
int val;
unsigned long timer; // длинная (4 байта) беззнаковая (только больше нуля) переменная для сохранения времени события
void setup()
{
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
}
void loop()// этот цыкл будет повторяться пока не сядет батарейка)))
{
  if (Serial.available())//проверяем если что то в Serial
  {
    val = Serial.read();// если есть то читаем и сохраняем это в переменную val
    if (val == '1')state=HIGH;
    if (val == '0')state=LOW;
  }
  if(state)//Здесь при моргании лампочки мы избавились от delay и у нас этот кусок проскакивает очень быстро, если секунда не прошла мы просто ничего не делаем и идем по цыклу дальше.
  {
    if(millis()-timer>1000)//если прошла секунда
    {
      digitalWrite(LED, !digitalRead(LED));//Конвертируем пин
      timer=millis();// пишем в переменную timer текущее время
    }   
  }
  if(!state)//здесь мы делаем что то что нужно при получении "0",на пример гасим лампочку, опять же проскакивем быстро.
  {
    digitalWrite(LED,LOW);
  }

 

 

Убил на повал. Для меня очень сложно в понимании. Из 13 поста код легче. 

Код с миганиями диодов добавил в свой для наглядности. Там будет другой кусок кода в скобках.

За огромный труд в написании кода- огромное спасибо!!! :-)

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

CADAS пишет:

А присвоение переменной=0 в начале кода что нам дает?

Это просто инициализация переменой. Можно было и без "0" объявить, но так надёжней.

CADAS пишет:

получается меня тормозила скобка в 16 строке?

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

CADAS
Offline
Зарегистрирован: 30.05.2016

Jeka_M пишет:

CADAS пишет:

А присвоение переменной=0 в начале кода что нам дает?

Это просто инициализация переменой. Можно было и без "0" объявить, но так надёжней.

То есть при каждом включении переменной будет присваиваться 0 ( типо пустая переменная)?

nevkon
Offline
Зарегистрирован: 20.01.2015

Человеку просто нужен ликбез по системе для начала.

секция setup() {} выполнится один раз при включении питания

секция loop() {} будет выполнятся много раз непрерывно пока не повалит синий дым :)

условие там где стоит serial.available выполняться будет если вы что-то прислали по ком порту

про delay() забудьте по возможности как дурной сон - он тормозит программу

fogary
Offline
Зарегистрирован: 05.03.2016

Не пустая конечно, но в остальном правильно. Только, в данном случае, присваивается не 0, а код символа "0".

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

CADAS пишет:

То есть при каждом включении переменной будет присваиваться 0 ( типо пустая переменная)?

Не, переменная не пустая. В ней не цифра 0, а символ '0' (код символа - 48).

CADAS
Offline
Зарегистрирован: 30.05.2016

nevkon пишет:

Человеку просто нужен ликбез по системе для начала.

секция setup() {} выполнится один раз при включении питания

секция loop() {} будет выполнятся много раз непрерывно пока не повалит синий дым :)

условие там где стоит serial.available выполняться будет если вы что-то прислали по ком порту

про delay() забудьте по возможности как дурной сон - он тормозит программу

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

Про delay- ни ни... Чур меня. :-)

CADAS
Offline
Зарегистрирован: 30.05.2016

Jeka_M пишет:

CADAS пишет:

То есть при каждом включении переменной будет присваиваться 0 ( типо пустая переменная)?

Не, переменная не пустая. В ней не цифра 0, а символ '0' (код символа - 48).

Жека- спасибо!!! начинает все вставать на свои места.

получается я могу сколько угодно добавлять в код

if (val == '')

присваивая 2,3,4 и выполнять код в скобках.

if (val == '2')
{
// выполнить этот код
}

if (val == '3')
{
//выполнить этот код
}

и так далее, а если пошлю отличный от 1,2,3,4 символ, то не будет выполняться ни один...???

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Всё верно.

Кучу if 'ов можно заменить конструкцией switch...case

CADAS
Offline
Зарегистрирован: 30.05.2016

Jeka_M пишет:

Всё верно.

Кучу if 'ов можно заменить конструкцией switch...case

Видел такую структуру, но пока до конца не понял. Есть у меня такая в скетче для датчика DHT.

Не могли бы Вы мне провести ликбез на этом примере.

switch (sensor1.read()) // опрашивает датчика 1
  {
    case DHT_OK:               Serial.println((String) "B KOMHATE: " + sensor1.hum + "% - " + sensor1.tem + "*C");  break;
    case DHT_ERROR_CHECKSUM:   Serial.println(         "B KOMHATE: HE PABEHCTBO KC");                     break;
    case DHT_ERROR_DATA:       Serial.println(         "B KOMHATE: OTBET HE COOTBETCTB. CEHCOPAM 'DHT'"); break;
    case DHT_ERROR_NO_REPLY:   Serial.println(         "B KOMHATE: HET OTBETA");                          break;
    default:                   Serial.println(         "B KOMHATE: ERROR");                               break;
  }

 Если я правильно понимаю, конструкция такова- 

выполняем первый case. если ЛОЖ, то переходим к следующему. Если ИСТИНА- другие case игнорируем.

Так?

CADAS
Offline
Зарегистрирован: 30.05.2016

Хотелось бы увидеть как будет выглядеть код в моем случае с конструкцией switch...case..

nevkon
Offline
Зарегистрирован: 20.01.2015

Программа смотрит что находится в sensor1.read() и дальше сравнивает поочередно:

DHT_OK ? если да, то выполняем этот кусок

DHT_ERROR_CHECKSUM ? если да, то выполняем этот кусок

и так далее.

Для вашего случая:

switch (val) {
  case 1: {
      код
    }
  case 2: {
      код
    }
и так далее
}

 

nevkon
Offline
Зарегистрирован: 20.01.2015

А, да, еще default: если ни одно условие не прошло если не ошибаюсь.

И еще break заставляет не проверять условия дальше, а то мало ли вы изменили переменную и она сможет пройти по следующему условию :)

CADAS
Offline
Зарегистрирован: 30.05.2016

nevkon пишет:

Программа смотрит что находится в sensor1.read() и дальше сравнивает поочередно:

DHT_OK ? если да, то выполняем этот кусок

DHT_ERROR_CHECKSUM ? если да, то выполняем этот кусок

и так далее.

Для вашего случая:

switch (val) {
  case 1: {
      код
    }
  case 2: {
      код
    }
и так далее
}

 

Ага, спасибо!!! Так себе все и представлял.

А теперь вопрос!!

Что мы выигрываем используя switch???

как сказали выше- мы избавимся от кучи if, но взамен получаем кучу case. Смысл тогда?

nevkon
Offline
Зарегистрирован: 20.01.2015

Код выглядит более компактно и просматривать проще

CADAS
Offline
Зарегистрирован: 30.05.2016

nevkon пишет:

Код выглядит более компактно и просматривать проще

И все? Не особо весомый аргумент. Я то ожидал чего большего... ;-)

CADAS
Offline
Зарегистрирован: 30.05.2016
char val = '0';
int LED = 13;
   
void setup()
{
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
}

void loop()
{
  if (Serial.available())
  {
    val = Serial.read();
  }

  switch (val)
{
  case 1: {} break; //в скобках пишем код для выполнения
  case 2: {} break;
  default: break;
}
  }

Как то так???

nevkon
Offline
Зарегистрирован: 20.01.2015

Да, все верно. Если код компилится не будет - перенесите break внутрь фигурных скобок.

CADAS
Offline
Зарегистрирован: 30.05.2016

nevkon пишет:

Да, все верно. Если код компилится не будет - перенесите break внутрь фигурных скобок.


Компилируется. Проверить только не могу(с блюпупом) датчик еще не пришел. Через сериал порт вроде работает.

CADAS
Offline
Зарегистрирован: 30.05.2016

Еще вопрос.
Что менее ресурсо- ёмкое, глобальная переменная или локальная????

nevkon
Offline
Зарегистрирован: 20.01.2015

Локальная занимает ОЗУ в момент выполнения куска кода. Глобальная всегда висит в памяти.

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

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

Когда скетч компилируется вам в комментариях выдается сколько занято ОЗУпри подсчете и сколько осталось на локальные переменные.

CADAS
Offline
Зарегистрирован: 30.05.2016

nevkon пишет:

Локальная занимает ОЗУ в момент выполнения куска кода. Глобальная всегда висит в памяти.

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

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

Когда скетч компилируется вам в комментариях выдается сколько занято ОЗУпри подсчете и сколько осталось на локальные переменные.


По этому и спросил. Видел в комментариях.
Как бы в моем случае выглядела локальная переменная val?

nevkon
Offline
Зарегистрирован: 20.01.2015

Тут нужно понимать что пример будет совсем некорректно работать поскольку переменная в каждом проходе loop будет создаваться заново:

int LED = 13;
   
void setup()
{
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
}

void loop()
{
  char val = '0';
  if (Serial.available())
  {
    val = Serial.read();
  }

  switch (val)
{
  case 1: {} break; //в скобках пишем код для выполнения
  case 2: {} break;
  default: break;
}
  }

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

CADAS
Offline
Зарегистрирован: 30.05.2016

nevkon пишет:

Тут нужно понимать что пример будет совсем некорректно работать поскольку переменная в каждом проходе loop будет создаваться заново:

int LED = 13;
   
void setup()
{
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, HIGH);
}

void loop()
{
  char val = '0';
  if (Serial.available())
  {
    val = Serial.read();
  }

  switch (val)
{
  case 1: {} break; //в скобках пишем код для выполнения
  case 2: {} break;
  default: break;
}
  }

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


Спасибо. Все разъяснили..

nevkon
Offline
Зарегистрирован: 20.01.2015

Еще один комментарий:

Вы используете конструкцию int LED = 13; для задания номера пина светодиода. Иногда выгоднее будет конструкция #define LED 13

В этом случае там где компилятору встретится слово "LED" он его заменит на число 13. Так можно писать даже выражения:

#define SUM_AB a+b
int a;
int b;
int c;
a=1; b=2;
c=SUM_AB;
serial.print(c);

 

fogary
Offline
Зарегистрирован: 05.03.2016

nevkon пишет:

switch (val)
{
  case 1: {} break; //в скобках пишем код для выполнения
  case 2: {} break;
  default: break;
}

В данном случае, вместо 1 и 2 нужно писать '1' и '2', а то условие не когда не совпадет. Потому что переменная val содержит символ цифры, а не цифру. Если хотите оставить как есть, поправте строку: switch(val - '0').

nevkon
Offline
Зарегистрирован: 20.01.2015

Замечание по типам вполне справедливое, думаю ТС если попробовал код на выполнении конкретной задачи уже увидел этот недочет.

CADAS
Offline
Зарегистрирован: 30.05.2016

fogary пишет:

nevkon пишет:

switch (val)
{
  case 1: {} break; //в скобках пишем код для выполнения
  case 2: {} break;
  default: break;
}

В данном случае, вместо 1 и 2 нужно писать '1' и '2', а то условие не когда не совпадет. Потому что переменная val содержит символ цифры, а не цифру. Если хотите оставить как есть, поправте строку: switch(val - '0').

Спасибо за подсказку. Все поправил. 

CADAS
Offline
Зарегистрирован: 30.05.2016

nevkon пишет:

Замечание по типам вполне справедливое, думаю ТС если попробовал код на выполнении конкретной задачи уже увидел этот недочет.

так и есть.. все встало на свои места.

CADAS
Offline
Зарегистрирован: 30.05.2016

CADAS пишет:

fogary пишет:

nevkon пишет:

switch (val)
{
  case 1: {} break; //в скобках пишем код для выполнения
  case 2: {} break;
  default: break;
}

В данном случае, вместо 1 и 2 нужно писать '1' и '2', а то условие не когда не совпадет. Потому что переменная val содержит символ цифры, а не цифру. Если хотите оставить как есть, поправте строку: switch(val - '0').

Спасибо за подсказку. Все поправил. 

поправил 1 на "1" и 2 на "2". Не компилируется. выделяется срока с case "2"

invalid conversion from 'const char*' to 'int' [-fpermissive]