powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Какой будет порядок выполнения?
12 сообщений из 12, страница 1 из 1
Какой будет порядок выполнения?
    #39755701
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь:

я бы поставил скобки, чтобы не было вопросов, но как это выполнится без скобок? 1 или 2?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
int i = 0;
while(buffer[++i] != 0)
    buffer[i] = buffer[i] == '\n' || buffer[i] == 13  ? 0 :buffer[i]; // <--------?

// варианты:
    buffer[i] = (buffer[i] == '\n' || buffer[i] == 13)  ? 0 :buffer[i]; // 1

    buffer[i] = buffer[i] == '\n' || (buffer[i] == 13  ? 0 :buffer[i]); // 2
...
Рейтинг: 0 / 0
Какой будет порядок выполнения?
    #39755704
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Какой будет порядок выполнения?
    #39755705
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov https://en.cppreference.com/w/cpp/language/operator_precedence


т.е. вариант 1 в моем месыдже
...
Рейтинг: 0 / 0
Какой будет порядок выполнения?
    #39755706
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256kя бы поставил скобки, чтобы не было вопросов, но как это выполнится без скобок? 1 или 2?
Все эти задачки решаются при помощи чтения стандарта. В данном случае находим раздел про приоритеты операций в выражении. Приоритет тернарника обычно самый высокий, поэтому скорее всего вариант 1, но стандарт по сям я не читал. А по вашим вариантам скажу так - на самом деле вариантов много больше. И, например, в сравнении с операцией == приоритет тернарника может быть одинаковый (а может и не быть), а вот вариант №2 явно неправильный, поскольку приоритет операции или всегда самый низкий.
...
Рейтинг: 0 / 0
Какой будет порядок выполнения?
    #39755983
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256k,

просто не надо так писать
...
Рейтинг: 0 / 0
Какой будет порядок выполнения?
    #39756022
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555256kя бы поставил скобки, чтобы не было вопросов, но как это выполнится без скобок? 1 или 2?
Все эти задачки решаются при помощи чтения стандарта. В данном случае находим раздел про приоритеты операций в выражении. Приоритет тернарника обычно самый высокий, поэтому скорее всего вариант 1, но стандарт по сям я не читал. А по вашим вариантам скажу так - на самом деле вариантов много больше. И, например, в сравнении с операцией == приоритет тернарника может быть одинаковый (а может и не быть), а вот вариант №2 явно неправильный, поскольку приоритет операции или всегда самый низкий.

Наоборот, самый низкий
...
Рейтинг: 0 / 0
Какой будет порядок выполнения?
    #39756023
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256k,

Ну и это не порядок выполнения, а группировка операндов в операции,
или приоритеты операций.

Скобки и приоритеты на порядок выполнения почти не влияют.
Я это к тому, что вопрос свой тебе надо было по-другому обозвать
...
Рейтинг: 0 / 0
Какой будет порядок выполнения?
    #39756279
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256kЗдесь:

я бы поставил скобки, чтобы не было вопросов, но как это выполнится без скобок? 1 или 2?

Код: plaintext
1.
2.
3.
int i = 0;
while(buffer[++i] != 0)
    buffer[i] = buffer[i] == '\n' || buffer[i] == 13  ? 0 :buffer[i]; // <--------?



Посмотри нужно ли тебе вообще различать 13 и \n? Возможно нет.
И почитай еще про символ \r про переводы строк в Windows.
Код: plaintext
1.
2.
3.
4.
int i = 0;
while(buffer[++i] != 0) {
   buffer[i] = buffer[i] == '\n' ? 0 :buffer[i];
}


Кроме того после первой замены можно уже выйти из цикла.
Строка (ASCII-Z) которую ты порезал нулями - недостижима
для обычных строковых операция по ту сторону нуля.
...
Рейтинг: 0 / 0
Какой будет порядок выполнения?
    #39756295
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl256k,

просто не надо так писать
+1

Так намного понятнее и возможно быстрее работает
Код: plaintext
1.
2.
3.
int i = 0;
while(buffer[++i] != 0)
    if(buffer[i] == '\n' || buffer[i] == 13) buffer[i] =  0;


++i подозрительное место, как понимаю проверка начинается с buffer[1], т.е. если на входе пустая строка (buffer[0] == 0) то это будет пропущено и пойдет обработка того что дальше в памяти.
Надежнее так
Код: plaintext
1.
for(size_t i = 0; buffer[i] != 0; i++) ...
...
Рейтинг: 0 / 0
Какой будет порядок выполнения?
    #39757228
256k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton256kЗдесь:

я бы поставил скобки, чтобы не было вопросов, но как это выполнится без скобок? 1 или 2?

Код: plaintext
1.
2.
3.
int i = 0;
while(buffer[++i] != 0)
    buffer[i] = buffer[i] == '\n' || buffer[i] == 13  ? 0 :buffer[i]; // <--------?



Посмотри нужно ли тебе вообще различать 13 и \n? Возможно нет.
И почитай еще про символ \r про переводы строк в Windows.
Код: plaintext
1.
2.
3.
4.
int i = 0;
while(buffer[++i] != 0) {
   buffer[i] = buffer[i] == '\n' ? 0 :buffer[i];
}


Кроме того после первой замены можно уже выйти из цикла.
Строка (ASCII-Z) которую ты порезал нулями - недостижима
для обычных строковых операция по ту сторону нуля.


кстати, если так выкинуть проверку на 13, а в строке сам символ будет, тогда я его не выловлю?
...
Рейтинг: 0 / 0
Какой будет порядок выполнения?
    #39757243
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
256kкстати, если так выкинуть проверку на 13, а в строке сам символ будет, тогда я его не выловлю?
Да. '\n' это 10.
...
Рейтинг: 0 / 0
Какой будет порядок выполнения?
    #39757260
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T256kкстати, если так выкинуть проверку на 13, а в строке сам символ будет, тогда я его не выловлю?
Да. '\n' это 10.
Тогда оба предиката надо сделать через esc-последовательности. Чтоб единообразно как-то.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Какой будет порядок выполнения?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]