помогите написать код

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

bwn пишет:

Странно, куда-то наивный писатель пропал. Понял, что х-ю сморозил и на Радиста, не в тему наехал?


У меня стойкое ощущение, что ТС "тихо сам с собою..." )))

 

bwn
Offline
Зарегистрирован: 25.08.2014

ua6em пишет:

У меня стойкое ощущение, что ТС "тихо сам с собою..." )))

Та я не за ТС, там помочник был, сильно помогающий. И помогай, на здоровье, сколько влезет. Ток когда критиковать начинаешь, понимай, что должен быть на порядок выше критикуемого, в обсуждаемом вопросе. ИМХО.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

bwn пишет:

ua6em пишет:

У меня стойкое ощущение, что ТС "тихо сам с собою..." )))

Та я не за ТС, там помочник был, сильно помогающий. И помогай, на здоровье, сколько влезет. Ток когда критиковать начинаешь, понимай, что должен быть на порядок выше критикуемого, в обсуждаемом вопросе. ИМХО.


я и говорю, что помошник и ТС одно лицо )))

EKate
Offline
Зарегистрирован: 18.03.2019
Предлогаю вскрыть карты - мой код ниже.
 
01byte i = 7; // в счетчике +1 номер пина с светодиодом
02long ptime = 0; // типа софт таймер
03byte o = 0b111; // мусор для засылки в порт
04 
05void setup() {
06 
07pinMode(10, OUTPUT);
08pinMode(9, OUTPUT);
09pinMode(8, OUTPUT);
10pinMode(2, INPUT);
11}
12 
13void loop(){
14 
15if (i>=10 ) {  / если счетчик шкалит то прыгаем на первый светодиод
16  i=7;
17}
18while ( !(digitalRead(2)) ){ 
19digitalWrite(i, LOW); // очевидно - выкл. св.диод
20if (digitalRead(2) == LOW){ // ждем нажатия
21 
22      if (millis() - ptime > 250){
23        i ++;
24          shiftOut(i, 2, MSBFIRST, ( o >> 2)); // знаю. просто это работает
25        ptime = millis();
26        delay(500);
27      }     
28   }
29 }
30}

 

Жду ответочку.
Пожалуйста проверьте. Пи-с-ать коменты и сомневаться могут все.
Луп может выполняться но код можно и не выполнять.
qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Ну если я вскрою карты, то меня попросят вксрыть уже вскрытые карты. Так что я пас.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

EKate пишет:

Предлогаю вскрыть карты - мой код ниже.
 
01byte i = 7; // в счетчике +1 номер пина с светодиодом
02long ptime = 0; // типа софт таймер
03byte o = 0b111; // мусор для засылки в порт
04 
05void setup() {
06 
07pinMode(10, OUTPUT);
08pinMode(9, OUTPUT);
09pinMode(8, OUTPUT);
10pinMode(2, INPUT);
11}
12 
13void loop(){
14 
15if (i>=10 ) {  / если счетчик шкалит то прыгаем на первый светодиод
16  i=7;
17}
18while ( !(digitalRead(2)) ){ 
19digitalWrite(i, LOW); // очевидно - выкл. св.диод
20if (digitalRead(2) == LOW){ // ждем нажатия
21 
22      if (millis() - ptime > 250){
23        i ++;
24          shiftOut(i, 2, MSBFIRST, ( o >> 2)); // знаю. просто это работает
25        ptime = millis();
26        delay(500);
27      }     
28   }
29 }
30}

 

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

по задумке ТС активный уровень на кнопке высокий или нет ?

1 - ваш код не компилируется (из за банальной небрежности)

2 - ваш код будет работать неверно, в какой то момент последний светодиод не погаснет

3 - "знаю. просто это работает"  не канает! что делает эта строка? порт для синхронизации shiftOut должен быть выходом.

 

add

не поленился, собрал макет, ваш код не@[я не работает как надо! вам видео снять ?

add

хотя мы до сих пор и сами не знаем как надо.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

EKate пишет:

Предлогаю вскрыть карты - мой код ниже.

гоняет по кругу три светодиода по нажатию (схема от ТС), изначально все выключены.

01uint8_t BUTTON = 2; // кнопка
02uint8_t state = 0;
03uint8_t idx;
04 
05#define LED_COUNT 3
06uint8_t LED_ARRRAY[LED_COUNT] = {
07  8, // певый светодиод
08  9, // второй светодиод
09  10 // третий светодиод
10};
11 
12void setup() {
13  for (idx = 0; idx < LED_COUNT; idx++)
14  {
15    pinMode(LED_ARRRAY[idx], OUTPUT);
16  }
17  pinMode(BUTTON, INPUT);
18}
19 
20void loop() {
21  if (digitalRead(BUTTON) && !state) {
22    state = !state;
23    digitalWrite(LED_ARRRAY[idx], LOW);
24    if (++idx >= LED_COUNT) idx = 0;
25    digitalWrite(LED_ARRRAY[idx], HIGH);
26  }
27  delay(30);
28  if (!digitalRead(BUTTON) && state) state = !state;
29}

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

ua6em пишет:

bwn пишет:

Странно, куда-то наивный писатель пропал. Понял, что х-ю сморозил и на Радиста, не в тему наехал?


У меня стойкое ощущение, что ТС "тихо сам с собою..." )))

 

Это оказывается "заразно" .. осторожней! :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Arhat109-2 пишет:

ua6em пишет:

bwn пишет:

Странно, куда-то наивный писатель пропал. Понял, что х-ю сморозил и на Радиста, не в тему наехал?


У меня стойкое ощущение, что ТС "тихо сам с собою..." )))

Это оказывается "заразно" .. осторожней! :)

 ЗАПОСТИЛ КОД исключительно развлечения для, не проверял, чисто логически, должен работать так, как задумал, раз уж макетка собрана может XDRIVER проверит, что там у РАДИСТА не так (или так) )))

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

чутка поправленый код от РАДИСТА, работает !

01int button = 2; // кнопка
02int led1 = 8;   // первый светодиод
03int led2 = 9;   // второй светодиод
04int led3 = 10;  // третий светодиод
05 
06byte i = 0;     // счетчик
07byte f_b = 0;   // флаг нажатия кнопки
08 
09void setup() {
10  pinMode(led1, OUTPUT);
11  pinMode(led2, OUTPUT);
12  pinMode(led3, OUTPUT);
13  pinMode(button, INPUT);
14}
15 
16void loop() {
17  if (digitalRead(button) == HIGH && f_b == 0) {
18    f_b = 1;
19    digitalWrite(i + 7, LOW);
20    i++;
21    if (i > 3) {
22      i = 1;
23    }
24    digitalWrite(i + 7, HIGH);
25  }
26  delay(30);
27  if (digitalRead(button) == LOW && f_b == 1) {
28    f_b = 0;
29  }
30}

без строки 26 из-за дребезга, иногда сбоит.

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

xDriver пишет:

чутка поправленый код от РАДИСТА, работает !

01int button = 2; // кнопка
02int led1 = 8;   // первый светодиод
03int led2 = 9;   // второй светодиод
04int led3 = 10;  // третий светодиод
05 
06byte i = 0;     // счетчик
07byte f_b = 0;   // флаг нажатия кнопки
08 
09void setup() {
10  pinMode(led1, OUTPUT);
11  pinMode(led2, OUTPUT);
12  pinMode(led3, OUTPUT);
13  pinMode(button, INPUT);
14}
15 
16void loop() {
17  if (digitalRead(button) == HIGH && f_b == 0) {
18    f_b = 1;
19    digitalWrite(i + 7, LOW);
20    i++;
21    if (i > 3) {
22      i = 1;
23    }
24    digitalWrite(i + 7, HIGH);
25  }
26  delay(30);
27  if (digitalRead(button) == LOW && f_b == 1) {
28    f_b = 0;
29  }
30}

без строки 26 из-за дребезга, иногда сбоит.

интересно бы понять самую суть сбоя, подумал немного, похоже наводка 50 герц

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ua6em пишет:

интересно бы понять самую суть сбоя, подумал немного, похоже наводка 50 герц

это шутка была ? вы хоть смайлики ставьте :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

xDriver пишет:

ua6em пишет:

интересно бы понять самую суть сбоя, подумал немного, похоже наводка 50 герц

это шутка была ? вы хоть смайлики ставьте :)

да нее, чесслово - не понимаю природу сбоя

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

А если кнопку делаем по человечески? Что имеем? (кутить так кутить)
Если нет конденсатора на кнопке всё таки небольшую задержку в 26 строке придётся вводить видимо
 

01int button = 2; // кнопка
02int led1 = 8;   // первый светодиод
03int led2 = 9;   // второй светодиод
04int led3 = 10;  // третий светодиод
05 
06byte i = 0;     // счетчик
07byte f_b = 0;   // флаг нажатия кнопки
08 
09void setup() {
10pinMode(led1, OUTPUT);
11pinMode(led2, OUTPUT);
12pinMode(led3, OUTPUT);
13pinMode(button, INPUT_PULLUP);
14}
15  
16void loop(){
17if (digitalRead(button) == LOW && f_b == 0) {
18f_b=1;  delay(1);
19digitalWrite(i+7, LOW); 
20i++;
21if (i>3) {i=1;}
22digitalWrite(i+7, HIGH); 
23}
24if (digitalRead(button) == HIGH && f_b == 1) {
25f_b=0;  delay(1);
26 }
27} //END

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Если нет конденсатора на кнопке всё таки небольшую задержку в 26 строке придётся вводить видимо, тау до после второго всплеска сколько выходит?

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

клетка 150us

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

xDriver пишет:

клетка 150us

можно крутнуть цикл, или delay(1) будет достаточно, в 26 строке, сразу после установки флага в 0

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

да можно все что угодно, хоть тригер на кнопку, мы чейто отошли от темы :)

где наш EKate, смотрю в онлайне, тока чет ниче не пишет нам :)

EKate
Offline
Зарегистрирован: 18.03.2019
Доброго времени. В полночь как-то не клеилось с макеткой(то кот лазит по столу, родичи спят) кароч спалил я похоже D8 по этому использовал d9 - d11. 
1. Кнопка НРазомкнута. собрал по схеме от тс.
2. не внимательность, коментил прямо в форме отправки на форуме
3. Целиком и полностью согласен.
 
И да, Спасибо за науку.
Вот - исправился, проверил. 
 
ниже код без излишеств
 
01/*
02Скетч использует 998 байт (3%) памяти устройства. Всего доступно 32256 байт.
03Глобальные переменные используют 15 байт (0%) динамической памяти, оставляя 2033 байт для локальных переменных. Максимум: 2048 байт.
04*/
05 
06byte i = 7; // в счетчике +1 номер пина с светодиодом
07long ptime = 0; // типа софт таймер
08byte oO = 0; // для засылки в порт
09 
10void setup() {
11 
12pinMode(11, OUTPUT);
13pinMode(10, OUTPUT);
14pinMode(9, OUTPUT);
15pinMode(2, INPUT);
16}
17 
18void loop(){
19 
20if (i>=11 ) {  // если счетчик шкалит то прыгаем на первый светодиод
21  i=8;
22}
23if ( !digitalRead(2) == HIGH ){  // ждем нажатия
24      if ( ( millis() - ptime ) > 350 ){
25        i ++; // как завещали деды( так быстрее ) не !ленимся
26        PORTB = ( 1 << i - 8 ); // проталкиваю 1 на пины по портуБ
27        ptime = millis();
28      }
29   }
30}

 

ниже код не без излишеств

 

 

Друзья я очень рад что вы помогаете новичкам. Это лучший форум с хорошими темами - они реально разжованы. Благодаря вашим постам, вопросам глупым и не очень и приведенным ответам с решениями даже полный нуб - я. Смог что-то написать.
Без небольшого троллинга - тему было не оживить. А тут - АГОНЬ!
Спасибо.
EKate
Offline
Зарегистрирован: 18.03.2019

xDriver пишет:

да можно все что угодно, хоть тригер на кнопку, мы чейто отошли от темы :)

где наш EKate, смотрю в онлайне, тока чет ниче не пишет нам :)

Уже пишу. Спасибо за участие. :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

позвольте поинтересоваться сутью строк 24 и 21 первого и второго скетча

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

EKate пишет:
то кот лазит по столу, родичи спят) кароч спалил я похоже D8

Кончай крошить батон на усато-мурлыкастых!

Як що, так відразу кіт винен!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

EKate пишет:

ниже код без излишеств

01/*
02Скетч использует 998 байт (3%) памяти устройства. Всего доступно 32256 байт.
03Глобальные переменные используют 15 байт (0%) динамической памяти, оставляя 2033 байт для локальных переменных. Максимум: 2048 байт.
04*/
05 
06byte i = 7; // в счетчике +1 номер пина с светодиодом
07long ptime = 0; // типа софт таймер
08byte oO = 0; // для засылки в порт
09 
10void setup() {
11 
12pinMode(11, OUTPUT);
13pinMode(10, OUTPUT);
14pinMode(9, OUTPUT);
15pinMode(2, INPUT);
16}
17 
18void loop(){
19 
20if (i>=11 ) {  // если счетчик шкалит то прыгаем на первый светодиод
21  i=8;
22}
23if ( !digitalRead(2) == HIGH ){  // ждем нажатия
24      if ( ( millis() - ptime ) > 350 ){
25        i ++; // как завещали деды( так быстрее ) не !ленимся
26        PORTB = ( 1 << i - 8 ); // проталкиваю 1 на пины по портуБ
27        ptime = millis();
28      }
29   }
30}

Пара скромных вопросов:

1. Строка №23. Вы уверены в том, что правильно понимаете, что там написано. Я имею в виду два варианта:

1// Написано
2( !digitalRead(2) == HIGH )
3 
4// Вариант 1
5( ! (digitalRead(2)  == HIGH) )
6 
7// Вариант 2
8( (! digitalRead(2))  == HIGH )

Это ведь совсем разные коды!

2. Практически такой же вопрос по строке №26

1// Написано
2PORTB = ( 1 << i - 8 );
3 
4// Вариант 1
5PORTB = (1 << i) - 8;
6 
7// Вариант 2
8PORTB = 1 << (i - 8 );
xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

и уменя еще один:

1PORTB = ( 1 << i - 8 );

вы понимаете, что сносите значение всех битов в порте, кроме интересующего вас?

для локальной задачи прокатит. а куда переносить начнете...

че вы в дебри то лезите, то шифт на порт, то это ?

EKate
Offline
Зарегистрирован: 18.03.2019

ua6em пишет:

позвольте поинтересоваться сутью строк 24 и 21 первого и второго скетча

В строке

24 лишний раз не дергаем пин пока не прошло 350 мс от пред предидущего нажатия кнопки

25 если от предидучего нажатия прошло достаточно времени инкременируем счетчик нажатий 

26 cсогласно даташиту и картинке с распиновкой платы aduino UNO(чистопородный китаец) нам надо записать 1 в порт portD 1 - portD 3 чтобы сменить сигнал на HIGH.  ( 1 << i - 8 ) выполняет побитовый сдвиг с обнулением всех остальных битов. пишет 1 на нужную позицию портаБ  (00000010  00000100 00001000) т.е. на один бит два или три бита.

27 начинаем новый отсчет мс

Но меня смущает сообщения компилятора

"26:26: warning: suggest parentheses around '-' "

если включить все сообщения. Буду благодарен если подскажете где копать.

 

EKate
Offline
Зарегистрирован: 18.03.2019

Цитата:

Пара скромных вопросов:

1. Строка №23. Вы уверены в том, что правильно понимаете, что там написано. Я имею в виду два варианта:

Это ведь совсем разные коды!

2. Практически такой же вопрос по строке №26

По

1. действительно 

1if ( digitalRead(2)  != HIGH ){  // так будет лучше

по 2

Цитата:

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

2 обдумал и исправил 

1// Вариант 2
2PORTB = 1 << (i - 8 );
EKate
Offline
Зарегистрирован: 18.03.2019

Ворота пишет:

EKate пишет:
то кот лазит по столу, родичи спят) кароч спалил я похоже D8

Кончай крошить батон на усато-мурлыкастых!

Як що, так відразу кіт винен!

Я не против котика, но когда этот прораб над "Джамшудами" везде где движняк, а особенно ночью - доставляет неудобства.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

EKate пишет:

Но меня смущает сообщения компилятора

"26:26: warning: suggest parentheses around '-' "

если включить все сообщения. Буду благодарен если подскажете где копать.

Так вот там же и копать - это то, о чём я писал в #75. Ставьте скобки, не ленитесь. Компилятор не уверен в том, что Вы написали то, что хотели, вот и подсказывает :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

EKate пишет:

1if ( digitalRead(2)  != HIGH ){  // так будет лучше

1if ( !digitalRead(2)){  }

А так ещё лучше???

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:

А так ещё лучше???

Возможно, но в плане читабельности кода, я бы предпочёл 

А) полу-по-уму

1#define IsLOW(pin)  (!digitalRead(pin))
2#define IsHIGH(pin) (digitalRead(pin)==HIGH)

Б) по-уму

1#define IsButtonPressed(pin)    (!digitalRead(pin))
2#define IsButtonReleased(pin)   (digitalRead(pin)==HIGH)

Не правда ли, намного читабельнее?

sadman41
Offline
Зарегистрирован: 19.10.2016

Добъём темку:

01#define INVERTED_BUTTONS
02 
03#ifdef INVERTED_BUTTONS
04  #define BUTTON_ON             HIGH
05  #define BUTTON_OFF            LOW
06#else
07  #define BUTTON_ON             LOW
08  #define BUTTON_OFF            HIGH
09#endif
10 
11#define IsButtonPressed(pin)    (BUTTON_ON  == digitalRead(pin))
12#define IsButtonReleased(pin)   (BUTTON_OFF == digitalRead(pin))

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, как-то так. Направление правильное: читаться должны сутевые вещи по задаче, а не пины и стандартные функции.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

А если пины не инвертованые то делаем так 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

И, кстати, ЕKate, диды завещали не "i++", а "++i". Хотя, на таких тривиальных типах данных компилятор сам разберется, как быстрее. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015
«Все истинно верующие да разбивают яйца с того конца, с какого удобнее». Решение же вопроса, какой конец признать более удобным, по моему скромному суждению, должно быть предоставлено совести каждого или в крайнем случае власти верховного судьи империи.
Джонатан Свифт
sadman41
Offline
Зарегистрирован: 19.10.2016

ЕвгенийП пишет:

«Все истинно верующие да разбивают яйца с того конца, с какого удобнее». 

Так-то да, но есть некие соображения, которые в применении к простым типам данных носят скорее характер философский. Так что и "i=i+1" компилятор приведёт к тому же виду... Но Вы-то об этом знаете, конечно.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Это всё конечно хорошо, но если в функции if() используется поститерация и если компилятор её соптимизирует, то сломается полностью логика программы, как поступать???

01/*******************ПИЩАЛКА ********************/
02void start_Buzzer(){
03  pinMode(PIN_ZUM,OUTPUT);
04  attachInterrupt(1, Buzzer, RISING );
05  analogWrite(pinINT1,0x80);
06 }
07 
08void end_Buzzer(){
09  detachInterrupt(1);
10  digitalWrite(PIN_ZUM,LOW);
11}
12 
13void Buzzer(void){
14  static int i=490/zFreq;
15  if(!i--)
16  {
17    digitalWrite(PIN_ZUM, ! digitalRead(PIN_ZUM));
18    i=490/zFreq;
19  }
20}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

ua6em пишет:

А так ещё лучше???

Возможно, но в плане читабельности кода, я бы предпочёл 

А) полу-по-уму

1#define IsLOW(pin)  (!digitalRead(pin))
2#define IsHIGH(pin) (digitalRead(pin)==HIGH)

Б) по-уму

1#define IsButtonPressed(pin)    (!digitalRead(pin))
2#define IsButtonReleased(pin)   (digitalRead(pin)==HIGH)

Не правда ли, намного читабельнее?

правда, но не люблю много букв, мне и АТС панасоник из-за это больше нравится нежели нортел (LG) (в программировании)

sadman41
Offline
Зарегистрирован: 19.10.2016

ua6em пишет:

Это всё конечно хорошо, но если в функции if() используется поститерация и если компилятор её соптимизирует, то сломается полностью логика программы, как поступать???

Избегать приёмов, в корректности которых нет уверенности. Какие могут быть варианты?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sadman41 пишет:

ua6em пишет:

Это всё конечно хорошо, но если в функции if() используется поститерация и если компилятор её соптимизирует, то сломается полностью логика программы, как поступать???

Избегать приёмов, в корректности которых нет уверенности. Какие могут быть варианты?

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ua6em пишет:

если компилятор её соптимизирует

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

То-есть, он как Мюллер, ему верить можно )))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ЕвгенийП пишет:

Возможно, но в плане читабельности кода, я бы предпочёл 

А) полу-по-уму

1#define IsHIGH(pin) (digitalRead(pin)==HIGH)

Б) по-уму

1#define IsButtonReleased(pin)   (digitalRead(pin)==HIGH)

Евгений Петрович! (интонация как "Семен Семеныч!" из киноклассики)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Раиса Абельская: «Вот вам любовь-морковь – не хочете, не ешьте» 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Все это напомнило мне ролик . Русский язык это русский загаженый славянскими словами , или славянский загаженый русским. https://www.youtube.com/watch?v=Tf6mRLuq2hE  Так что такая опупея и в Си происходит. Как загадить (или очистить) язык Си(С++).

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

С русским то языком  как раз всё нормально )))