Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/40: Рейтинг темы: голосов - 40, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 08.08.2018
Сообщений: 3

Почему операторы "if else" ставят в одну строку, к примеру: else if (BMI <=25)???

08.08.2018, 23:30. Показов 8512. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят почему операторы if else ставят в одну строку??? К примеру: else if (BMI <=25)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.08.2018, 23:30
Ответы с готовыми решениями:

Почему запрос вернёт одну строку ?
Привет. Лазил тут по просторам. нашёл запрос. Запрос = Новый Запрос; Запрос.Текст = &quot;ВЫБРАТЬ ...

Почему в функции operator не ставят тип возвращаемого значения?
Добрый день! Учу С++ по книге Лафоре. Пример кода ниже. Стало интересно, почему в функции operator есть возвращение значения return. В...

Почему выводит еще одну строку, равную 0?
2. Дана целочисленная квадратная матрица. Определить: • сумму элементов в тех столбцах, которые не содержат отрицательных элементов; ...

44
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
09.08.2018, 21:11
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Можно и так сделать к примеру, но тоже не самый красивый вариант.
согласен, самый красивый это правильно спроектировать программу
вот зачем в одном цикле две, или более, переменных, которые живут только в цикле ?
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
09.08.2018, 21:13
ValeryS, чтобы при чтении программы не распылять внимание на весь блок, содержащий этот цикл, так как он может содержать много данных и помимо этого. В идеале, конечно, нужно дробить программу на множество маленьких функций, но это в идеале, бывают исключения.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
09.08.2018, 21:24
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
в ANSI Си в for нельзя было объявлять переменные
20 лет как с нами C99
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Что-нибудь типа такого.
C++
1
for (auto[i, j] = std::make_tuple(10, 6.0); ...)//C++17
2
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
09.08.2018, 21:28
Croessmah, интересный вариант. Спасибо.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
09.08.2018, 21:56
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Что-нибудь типа такого.
Именно в таком виде - нельзя.
Только создавать какой-то тип, включающий данные (пару/структуру).
Да и зачем? У comma operator хоть есть use-case, когда они полезны (редки, специфичны, но есть).

Добавлено через 1 минуту
Цитата Сообщение от QuakerRUS Посмотреть сообщение
чтобы при чтении программы не распылять внимание на весь блок, содержащий этот цикл, так как он может содержать много данных и помимо этого
Всегда можно сделать отдельный скоуп или вставить лямбду
1
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
09.08.2018, 22:02
Цитата Сообщение от MrGluck Посмотреть сообщение
Да и зачем?
Цитата Сообщение от MrGluck Посмотреть сообщение
Всегда можно сделать отдельный скоуп или вставить лямбду
Просто мне показалось это удобным, если бы такой функционал поддерживал for. А так, конечно, ради этого создавать пару/структуру, наверное, перебор. Тот же for (int i = 0;;), согласитесь, удобнее чем отдельно от цикла объявлять i. Бывает, иногда, хочется объявить одновременно счетчик и строковую переменную, и приходится ее объявлять отдельно, что "нагромождает" немного программу.
0
Велосипедист...
 Аватар для Mournful Max
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
10.08.2018, 03:08
QuakerRUS, мне кажется, Вы слишком скептичны
На мое мнение, форма :
C++
1
2
3
4
5
6
7
8
{
  std::string::size_type counter = ... ;
  std::string            text    = ... ;
 
  for ( ; ... ; ... )
  {
  }
}
куда более читабельна и понятна, чем ( предлагаемая Вами ) :
C++
1
2
3
4
5
for ( std::string::size_type counter = ... , std::string text = ... ;
      ... ;
      ... ; )
{
}
Ясное дело, вторая форма синтаксически не верна как в Си, так и в C++. Но, даже если, вдруг, в теории, комитет попытался бы как-нибудь внедрить ее в C++ — я не представляю как оно должно было бы реализовываться, принимая во внимание все доступные средства на данный момент ( использование каких-нибудь структур данных из библиотек не берем же в счет ? )... Может, мне просто не хватает фантазии и знаний. Да и не часто я вижу недовольства по этому поводу — всех, вроде, все устраивает ( меня точно )...

____
Все сказанное мною выше — имхо.

Добавлено через 1 минуту
Цитата Сообщение от Captain Maxee Посмотреть сообщение
я не представляю как оно должно было бы реализовываться
Представил, возможно даже логично. Не буду выставлять все мои мысли напоказ, но скажу вот что : конечный результат будет не лучше, чем то, что мы имеем сейчас
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
10.08.2018, 04:02
Цитата Сообщение от Captain Maxee Посмотреть сообщение
я не представляю как оно должно было бы реализовываться
Ну, например, что-нибудь такое. Разумеется только как довесок к короткой форме записи.

C++
1
2
3
4
5
6
7
8
9
10
11
12
for
{
init:
    int i = 1;
    double j = 2;
cond: i < 5;
loop:
    ++i;
    ++j;
do:
    std::cout << i << ' ' << j << std::endl;
}
Добавлено через 12 минут
Captain Maxee, да, и хочу break с указанием количества циклов.

C++
1
break(3); // выйти из трех вложенных циклов
0
10.08.2018, 15:01

Не по теме:

Цитата Сообщение от QuakerRUS Посмотреть сообщение
C++
3
4
5
init:
    int i = 1;
    double j = 2;
Чем-то напомнило Pascal с его var )

0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
10.08.2018, 15:29
Цитата Сообщение от Captain Maxee Посмотреть сообщение
Чем-то напомнило Pascal с его var
А должно было напомнить switch и class.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
10.08.2018, 15:56
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Это как раз один из более громоздких вариантов.
Зато более наглядных. Лучше потратить 4 строки и написать
C
1
2
3
4
5
{
  int a;
  double b;
  for(...)
}
чем городить все в одну. Одна строка - одно действие.
1
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
10.08.2018, 16:02
помнится, раньше в Си даже аргументы при определении функции в скобках нельзя было объявлять.
Не могу ручаться за точность, но было что-то типа
C++
1
2
3
4
5
6
7
8
void foo(a, b, c)
int a;
int b;
int c;
{
/////
/////
}
а вы на циклы жалуетесь! Раньше даже в функциях такого не было!
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
10.08.2018, 16:03
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Раньше даже в функциях такого не было!
Раньше даже C не было. Давайте еще к динозаврам заглянем, вдруг у них там и компутеров не было.
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
10.08.2018, 16:05
COKPOWEHEU, можно же разбить на столько строчек, сколько нужно. Выше приводил пример.
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
10.08.2018, 16:19
Croessmah, вы не поверите, но мне очень нравится изучать иногда древнее программирование, не до такой степени, чтобы забивать голову конкретными попытками писать что-либо на древних языках, но само ощущение "раньше было лучше" нравится.
Читаешь ты такой, что в 1968 году в языке ФОКАЛ количество переменных ограничивалось количеством букв в английском алфавите (минус буква F зарезервированная для функций)...
читаешь и думаешь: "WOW какой язык потеряли!"
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,922
10.08.2018, 16:34
Цитата Сообщение от QuakerRUS Посмотреть сообщение
COKPOWEHEU, можно же разбить на столько строчек, сколько нужно. Выше приводил пример.
Это дает какие-то преимущества? Ну, кроме мозговыносящего синтаксиса, конечно. Хм... а синтаксис стоит запомнить чтобы издеваться над халявщиками...

Добавлено через 3 минуты
Кстати, а как его заставить работать?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main(int argc, char **argv){
  for
  {
    init:
      int i = 1;
      double j = 2;
    cond: i < 5;
    loop:
      ++i;
      ++j;
    do:
      std::cout << i << ' ' << j << std::endl;
  }
}
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$ gcc main.c
main.c: In function ‘main’:
main.c:5:3: error: expected ‘(’ before ‘{’ token
   {
   ^
main.c:7:5: error: a label can only be part of a statement and a declaration is not a statement
     int i = 1;
     ^~~
main.c:8:5: error: expected expression before ‘double’
     double j = 2;
     ^~~~~~
main.c:9:11: error: ‘i’ undeclared (first use in this function)
     cond: i < 5;
           ^
main.c:9:11: note: each undeclared identifier is reported only once for each function it appears in
main.c:12:7: error: ‘j’ undeclared (first use in this function)
     ++j;
       ^
main.c:13:7: error: expected expression before ‘:’ token
     do:
       ^
main.c:15:3: error: expected ‘while’ before ‘}’ token
   }
   ^
main.c:16:1: error: expected declaration or statement at end of input
 }
 ^
0
 Аватар для QuakerRUS
1469 / 1010 / 456
Регистрация: 30.10.2017
Сообщений: 2,799
10.08.2018, 16:37
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Это дает какие-то преимущества?
Наверняка можно и короче придумать форму записи, это то, что сходу в голову пришло. Из преимуществ: объявление переменных с временем жизни до конца цикла и отсутствие лишней табуляции как в случае с дополнительным блоком, а так же развернутый третий блок с операциями, производимыми после прохода цикла.

Добавлено через 54 секунды
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Кстати, а как его заставить работать?
Никак, это мои фантазии для C++30
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
10.08.2018, 16:42
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#define init
#define cond for(;
#define loop
#define do ){
int main() {    
    init
        int i = 1;
        double j = 2;
    cond i < 5;
    loop
        ++i,
        ++j
        do
        std::cout << i << ' ' << j << std::endl;
    }
}
1
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
10.08.2018, 23:19
Цитата Сообщение от MrGluck Посмотреть сообщение
Зато можно так
C++
1
if (a>b) printf("a"), printf(">"), printf("b");
Терпеть не могу такой вид записи.
Тут используется comma operator. И некоторые ради того, чтобы не использовать scope, прибегают к таким конструкциям.
Я ошибаюсь, или очерёдность выполнения выражений в такой записи не определён?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
10.08.2018, 23:24
Цитата Сообщение от New man Посмотреть сообщение
Я ошибаюсь, или очерёдность выполнения выражений в такой записи не определён?
Ошибаетесь. Зяпятушка четко задает порядок действий.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.08.2018, 23:24
Помогаю со студенческими работами здесь

Почему двумерный массив выводится в одну строку?
Подскажите, пожалуйста, двумерный квадратный массив так должен выводиться?? Вызываю в методе main как Diagonal();

C# XmlWriter пишет всё в одну строку. Почему?
Добрый день. Использую стандартный C# XmlWriter. Работает, но пишет всё в одну строку. Подскажите в чём дело? Где вставить...

Почему Memo выводит одну строку 6 раз подряд?
Уважаемые помогите ! Задолбался я. Гляньте кому не сложно. В потоке TCOMReadThread.execute в самом конце вызываю synchronize(outInfo);...

Генерирую сайт на php - получаю код html в одну строку. Почему?
Всем привет! собсно непонятно: есть генератор сайта на php подставляю html шаблон с прописанными макросами (взять текст из файла и...

не могу добавить еще одну станицу по примеру
создаю галерею на сайте http://expertdk.ru/wedding/demo/ через плагин Gamma Gallery https://habrahabr.ru/post/159087/ нужно добавить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru