|
из племени тумба-юбма
|
||||||
Откуда у некоторых переменных вместо значения НОЛЬ, присваивается другое значение?15.10.2019, 12:16. Показов 5256. Ответов 50
Метки нет (Все метки)
Привет, нашел для себя вроде как не плохую и понятную книгу, по обучению Си https://www.kpolyakov.spb.ru/download/devcpp_1.pdf. Сразу в первых примерах на практике, столкнулся с непонятными значениями присвоения переменных.
Кликните здесь для просмотра всего текста
╧ЁштхЄ/Hello a1=0 b1=1 c1=0 a2=0 b2=0 c2=40 x=0 y=0 z=0 n=4203673 Крякозябры кириллицы меня на данном этапе не интересуют. Интересуют сами значения переменных. Откуда у некоторых переменных вместо значения НОЛЬ, присваивается другое значение?
0
|
||||||
| 15.10.2019, 12:16 | |
|
Ответы с готовыми решениями:
50
Макрос: Eсли Х больше Y, то Z присваивается значение Х, в противном случае Z присваивается значение Y Нужно сделать чтобы при делении на ноль, выводило На ноль делить нельзя, введите другое число Не получается корректно вывести значения некоторых переменных |
|
Вездепух
13222 / 6854 / 1826
Регистрация: 18.10.2014
Сообщений: 17,377
|
|||||
| 17.10.2019, 00:15 | |||||
static a; или volatile a; но не просто a;.Добавлено через 3 минуты
1
|
|||||
|
из племени тумба-юбма
|
||
| 17.10.2019, 07:04 [ТС] | ||
|
Но забавно то, что Dev-C++ компилирует и работает со всеми вариантами, даже с самым дурацким вариантом main(void). То есть 4 разных варианта синтаксиса, воспринимаются в IDE адекватно. Так же хорошо обстоят дела с командой return 0;, если случайно забыл ее написать, то ничего страшного. Далее по синтаксису, команда cout <<"Уру-ру\n "<<endl;, ее можно писать без конечного оператора - cout <<"Уру-ру\n";Вот эта вся путаница, на первых этапах знакомства с языком очень напрягает, или просто взрывает мозг. Я могу понять еще разработчиков IDE, они стараются сделать продукт так, чтоб он понимал как оригинальный, так и современный синтаксис правил. Но помимо этого, даже почти во всех учебниках происходит подобная каша, путаница, со старым и новым синтаксисом, с оригинальным Си, и новым Cи++. А если говорить про Visual Studio, так это совсем отдельная каста IDE. Есть оригинальный Си, есть более новый Си++, а еще есть Visual Studio , который часто отличается совсем не объяснимым синтаксисом. Поэтому я от него сейчас полностью отказался, возможно вернусь, когда мои познания в Си/Си++ станут более уверенными.В общем хочу сказать, что вопросов у меня будет еще довольно много. И такого бардака, пусть даже в самостоятельным изучении, у меня еще не было. Но пока мне это интересно, буду медленно, но стараться осваивать. Всем спасибо за помощь.
0
|
||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
|||||||||||||||
| 17.10.2019, 07:32 | |||||||||||||||
1
|
|||||||||||||||
|
из племени тумба-юбма
|
||||||
| 17.10.2019, 08:21 [ТС] | ||||||
|
У меня новая непонятнка. В разделе Распространенные ошибки описывается ошибка с циклом for. В данном примере тело цикла не заключено в фигурные скобки и тем не менее, если убрать лишнюю точку с запятой, то цикл работает правильно. Но в моем, случае если закомментировать фигурные скобки, то цикл не работает.
Кликните здесь для просмотра всего текста
Не могу понять почему?
0
|
||||||
|
Вездепух
13222 / 6854 / 1826
Регистрация: 18.10.2014
Сообщений: 17,377
|
|||
| 17.10.2019, 08:47 | |||
main(void) молча, то это либо баг компилятора, либо это вообще не компилятор стандартного [современного] языка С.main действительно не обязательно делать return 0;.
1
|
|||
|
|
||
| 17.10.2019, 10:21 | ||
|
Это наследие того, что называется "traditional C" (или Си Кернигана-Ритчи). А функции, описанные в таком стиле называют "функции, описанные в стиле Кернигана-Ритчи" (K&R function declaration) Если я правильно понимаю, то великий смысл был такой: C /* Вот так оно объявляется в хидерах. Т.е. известен * только тип результата */ extern int foo(); /* Немного по другому объявляется тело функции * По смыслу это функция с тремя параметрами. Однако если параметр * "a" равен нулю, то поведение функций от других параметров не зависит * и их как бы можно не передавать. Аналогично в случае, если "a" не равно * нулю, а "b" равно нулю, то параметр "c" как бы можно не передавать */ int foo (a, b, c) int a; int b; int c; { if (a == 0) return 0; if (b == 0); return 1; return 2; } int main (void) { /* Вот такие запуски считались корректными */ foo (0); foo (1, 0); foo (1, 2, 3); /* Но в качестве побочного явления можно было написать * вот такие вот некорректные запуски. И компилятор не должен * было ломаться. Всё это проистекло из того, что в общем случае * компилятор видит только прототип из хидера, в котором * нет описания параметров */ foo (1, 2, 3, 4, 5); foo ((double) 1.2, (float)3.4); return 0; } В первых стандартах Си всё это было узаконено. Вероятно, из-за проблем совместимости со старыми кодами. Но есть подозрение, что в современных стандартах оно тоже есть (икать неохота, но gcc поддерживает). Зачем этот балаган держат до сих пор - я не знаю
1
|
||
|
21 / 17 / 4
Регистрация: 31.05.2016
Сообщений: 67
|
||
| 17.10.2019, 10:47 | ||
|
Пройдите пошаговым отладчиком. Сначала миллион раз меняется z, а потом по одному разу остальные переменные.
0
|
||
|
из племени тумба-юбма
|
||||||
| 17.10.2019, 14:04 [ТС] | ||||||
|
Lady C, нет нигде мануала по Dev-C++, поэтому не умею работать с отладчиком.
Проверял так, после цикла выводится на экран искомая переменная"х"(алгоритм решения взял отсюда). А когда скобки забиты, то результат х=0. Кликните здесь для просмотра всего текста
0
|
||||||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
|||
| 17.10.2019, 14:06 | |||
|
для подмены стандартного своим я использую разные скобки(кавычки)
0
|
|||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
||
| 17.10.2019, 16:50 | ||
|
0
|
||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
|
| 17.10.2019, 17:55 | |
|
0
|
|
|
из племени тумба-юбма
|
||
| 17.10.2019, 19:09 [ТС] | ||
|
0
|
||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
|||
| 17.10.2019, 19:20 | |||
|
книжки бы тебе почитать и правила форума тоже, п 5.16
1
|
|||
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
||
| 17.10.2019, 19:24 | ||
|
0
|
||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
||||
| 17.10.2019, 19:34 | ||||
|
перечитай пост 19 Откуда у некоторых переменных вместо значения НОЛЬ, присваивается другое значение? речь шла именно о void foo() ![]() перефразируя старый анекдот: "Можно, но по уставу не положено"
0
|
||||
|
Вездепух
13222 / 6854 / 1826
Регистрация: 18.10.2014
Сообщений: 17,377
|
|||
| 17.10.2019, 20:25 | |||
|
Добавлено через 3 минуты for(...;...;...), за которым следует "тело" цикла, формально состоящее из одного-единственного statement. Вот у вас и получилось, что строка 11 - это и есть тело цикла.
1
|
|||
|
Модератор
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
|
|
| 17.10.2019, 20:47 | |
|
0
|
|
|
4149 / 2727 / 433
Регистрация: 09.09.2017
Сообщений: 12,084
|
||||||||||||||||
| 18.10.2019, 10:48 | ||||||||||||||||
Или даже так
Хотя нет, второй вариант будет вполне корректным, он не использует пустой список аргументов. Если убрать прототипы, будет совсем не-UB-шно, пичаль
0
|
||||||||||||||||
|
Вездепух
13222 / 6854 / 1826
Регистрация: 18.10.2014
Сообщений: 17,377
|
|||
| 18.10.2019, 11:16 | |||
|
Добавлено через 6 минут
0
|
|||
| 18.10.2019, 11:16 | |
|
Значение присваивается переменной, но не присваивается TexBox Всем элементам массива присваивается ноль
Как вставить, вместо огромного ряда переменных, значения из массива в updateTable? Как сделать чтоб во время работы программы при нажатии определенных клавиш изменялось значение некоторых переменных? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|