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

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

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

Author24 — интернет-сервис помощи студентам
Ребят почему операторы if else ставят в одну строку??? К примеру: else if (BMI <=25)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.08.2018, 23:30
Ответы с готовыми решениями:

Почему запрос вернёт одну строку ?
Привет. Лазил тут по просторам. нашёл запрос. Запрос = Новый Запрос; Запрос.Текст = ...

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

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

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

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

44
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
09.08.2018, 21:11 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Можно и так сделать к примеру, но тоже не самый красивый вариант.
согласен, самый красивый это правильно спроектировать программу
вот зачем в одном цикле две, или более, переменных, которые живут только в цикле ?
0
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
09.08.2018, 21:13 22
ValeryS, чтобы при чтении программы не распылять внимание на весь блок, содержащий этот цикл, так как он может содержать много данных и помимо этого. В идеале, конечно, нужно дробить программу на множество маленьких функций, но это в идеале, бывают исключения.
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
09.08.2018, 21:24 23
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
в ANSI Си в for нельзя было объявлять переменные
20 лет как с нами C99
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Что-нибудь типа такого.
C++
1
for (auto[i, j] = std::make_tuple(10, 6.0); ...)//C++17
2
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
09.08.2018, 21:28 24
Croessmah, интересный вариант. Спасибо.
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
09.08.2018, 21:56 25
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Что-нибудь типа такого.
Именно в таком виде - нельзя.
Только создавать какой-то тип, включающий данные (пару/структуру).
Да и зачем? У comma operator хоть есть use-case, когда они полезны (редки, специфичны, но есть).

Добавлено через 1 минуту
Цитата Сообщение от QuakerRUS Посмотреть сообщение
чтобы при чтении программы не распылять внимание на весь блок, содержащий этот цикл, так как он может содержать много данных и помимо этого
Всегда можно сделать отдельный скоуп или вставить лямбду
1
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
09.08.2018, 22:02 26
Цитата Сообщение от MrGluck Посмотреть сообщение
Да и зачем?
Цитата Сообщение от MrGluck Посмотреть сообщение
Всегда можно сделать отдельный скоуп или вставить лямбду
Просто мне показалось это удобным, если бы такой функционал поддерживал for. А так, конечно, ради этого создавать пару/структуру, наверное, перебор. Тот же for (int i = 0;;), согласитесь, удобнее чем отдельно от цикла объявлять i. Бывает, иногда, хочется объявить одновременно счетчик и строковую переменную, и приходится ее объявлять отдельно, что "нагромождает" немного программу.
0
Велосипедист...
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
10.08.2018, 03:08 27
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
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
10.08.2018, 04:02 28
Цитата Сообщение от 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
Mournful Max
10.08.2018, 15:01
  #29

Не по теме:

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

0
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
10.08.2018, 15:29 30
Цитата Сообщение от Captain Maxee Посмотреть сообщение
Чем-то напомнило Pascal с его var
А должно было напомнить switch и class.
0
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,884
10.08.2018, 15:56 31
Цитата Сообщение от QuakerRUS Посмотреть сообщение
Это как раз один из более громоздких вариантов.
Зато более наглядных. Лучше потратить 4 строки и написать
C
1
2
3
4
5
{
  int a;
  double b;
  for(...)
}
чем городить все в одну. Одна строка - одно действие.
1
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
10.08.2018, 16:02 32
помнится, раньше в Си даже аргументы при определении функции в скобках нельзя было объявлять.
Не могу ручаться за точность, но было что-то типа
C++
1
2
3
4
5
6
7
8
void foo(a, b, c)
int a;
int b;
int c;
{
/////
/////
}
а вы на циклы жалуетесь! Раньше даже в функциях такого не было!
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
10.08.2018, 16:03 33
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Раньше даже в функциях такого не было!
Раньше даже C не было. Давайте еще к динозаврам заглянем, вдруг у них там и компутеров не было.
0
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
10.08.2018, 16:05 34
COKPOWEHEU, можно же разбить на столько строчек, сколько нужно. Выше приводил пример.
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
10.08.2018, 16:19 35
Croessmah, вы не поверите, но мне очень нравится изучать иногда древнее программирование, не до такой степени, чтобы забивать голову конкретными попытками писать что-либо на древних языках, но само ощущение "раньше было лучше" нравится.
Читаешь ты такой, что в 1968 году в языке ФОКАЛ количество переменных ограничивалось количеством букв в английском алфавите (минус буква F зарезервированная для функций)...
читаешь и думаешь: "WOW какой язык потеряли!"
0
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,884
10.08.2018, 16:34 36
Цитата Сообщение от 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;
  }
}
Код
$ 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
1467 / 1008 / 456
Регистрация: 30.10.2017
Сообщений: 2,798
10.08.2018, 16:37 37
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Это дает какие-то преимущества?
Наверняка можно и короче придумать форму записи, это то, что сходу в голову пришло. Из преимуществ: объявление переменных с временем жизни до конца цикла и отсутствие лишней табуляции как в случае с дополнительным блоком, а так же развернутый третий блок с операциями, производимыми после прохода цикла.

Добавлено через 54 секунды
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Кстати, а как его заставить работать?
Никак, это мои фантазии для C++30
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
10.08.2018, 16:42 38
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 39
Цитата Сообщение от MrGluck Посмотреть сообщение
Зато можно так
C++
1
if (a>b) printf("a"), printf(">"), printf("b");
Терпеть не могу такой вид записи.
Тут используется comma operator. И некоторые ради того, чтобы не использовать scope, прибегают к таким конструкциям.
Я ошибаюсь, или очерёдность выполнения выражений в такой записи не определён?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
10.08.2018, 23:24 40
Цитата Сообщение от New man Посмотреть сообщение
Я ошибаюсь, или очерёдность выполнения выражений в такой записи не определён?
Ошибаетесь. Зяпятушка четко задает порядок действий.
0
10.08.2018, 23:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.08.2018, 23:24
Помогаю со студенческими работами здесь

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru