Size: a a a

2021 August 11

Г

Георгий Торопов... in Embedded Group
Хочется найти готовую микруху, чтобы она сама интерполяцией и прочим занималась
источник

VK

Viacheslav Kaloshin in Embedded Group
источник

ED

Electronics Designer in Embedded Group
Новый ребус. :)

Кто понимает, что делает

scanf("%*[^\n]%*c");

?

:D
источник

VK

Viacheslav Kaloshin in Embedded Group
Он вызывает тимлида, который на code review стучит разрабу по голове, что бы не писал такое
источник

A

Andrey S in Embedded Group
+
источник

ED

Electronics Designer in Embedded Group
Неправильный ответ. :) Это валидный синтаксис scanf.
источник

ED

Electronics Designer in Embedded Group
И даже не экзотика.
источник

VC

Verum Corner in Embedded Group
источник

VC

Verum Corner in Embedded Group
источник

VK

Viacheslav Kaloshin in Embedded Group
Валидный, да. Но поголове все равно получит, потому что код стал не поддерживаемым
источник

ED

Electronics Designer in Embedded Group
Почему это? Тот, кто таки читал документацию на scanf, поймет без проблем. Но кто же ее читал, да... :D
источник

VK

Viacheslav Kaloshin in Embedded Group
"Если вы решили проблему с помощью regexp, то теперь у вас две проблемы" заповедует нам мудрость предков
источник

ED

Electronics Designer in Embedded Group
Повторяю, это не RegExp. Это строка формата scanf. Обычная. Документированная. :)
источник

аᶘ

асоциальный пикотран... in Embedded Group
прикольно то, что там нет регэкспов, но есть вытащенный совсем небольшой кусок синтаксиса из регэкспов
источник

PB

Petr Belyaev in Embedded Group
Кто знает, что делает эта схема? :D
Все же знают, как работает транзистор )
источник

ED

Electronics Designer in Embedded Group
Похоже, что это блок I/O.
источник

VK

Viacheslav Kaloshin in Embedded Group
Кр580вм80а жеш
источник

PB

Petr Belyaev in Embedded Group
Нет, ну там написано. Так не спортивно )
источник

ED

Electronics Designer in Embedded Group
Эх. :)

Короче, то, что выше, - очистка буфера до начала новой строки. :) А вот

scanf("%[^\n]%*c",buf);

это аналог gets().

Дело в том, что формат %s читает ввод только до пробела. Если надо ввести и пробелы тоже, приходится идти обходным путем.

%[...] - совпадение по маске из перечисленных символов
%[^...] - совпадение по всем символам, КРОМЕ перечисленных
%*... - прочесть, но игнорировать.

В итоге такой формат приводит к тому, что scanf читает из входа все, кроме \n (перевода строки) и складывает в переменную. Потом читает и \n, чтобы очистить буфер, но игнорирует его.
источник

A

Andrey S in Embedded Group
в реальности лучше избегать такого задроства
источник