Так в чем же причина того, что структура модели отличается от структуры HTML-разметки? Если это из-за DTO, то ваш подход неверен. Модель формы не должна отражать модель DTO (как это обычно бывает в формах, управляемых моделью), поскольку вы сможете отображать модель формы и DTO при постобработке. На мой взгляд, это главная причина, по которой он существует - отделить форму от модели данных.
Модель формы должна быть отражена в HTML.
РЕДАКТИРОВАТЬ: В любом случае, если вы хотите пойти по этому пути, вы всегда можете связать элемент управления формы напрямую - только для этого элемента управления - вместо использования группы / имен формы с помощью [formControl]
и FormGroup#get
. Более или менее это будет похоже на
Если у вас нет ссылки на группу форм верхнего уровня, вы можете использовать https://angular.io/api/forms/AbstractControl#parent пройти к нему.
Просто: это неопределенное поведение, поскольку fflush
предназначен для вызова на выходном потоке. Это выдержка из стандарта C:
int fflush(FILE *ostream);
ostream указывает на поток вывода или поток обновления, в котором последняя последняя операция не была входной, функция функция fflush заставляет все незаписанные данные для этого потока, которые должны быть доставлены в среду хоста, чтобы быть записанными в файл; в противном случае поведение не определено.
Так что это не вопрос "насколько это плохо". fflush(stdin)
является откровенно неправильным, и вы не должны его использовать, никогда.
Я полагаю, что Вы должны никогда вызов fflush(stdin)
по простой причине, что необходимо даже не считать необходимым попытаться сбросить вход во-первых. Реалистично, существует только одна причина, Вы могли бы думать, что имели к, и это: закончить некоторый плохой вход, что scanf
застревает на.
, Например, у Вас могла бы быть программа, которая находится в цикле, читая целые числа с помощью scanf("%d", &n)
, и Вы обнаружили, что в первый раз пользователь вводит символ нецифры как 'x'
, , программа входит в бесконечный цикл .
, Когда сталкивающийся с этой ситуацией, я полагаю, что у Вас в основном есть три варианта:
fflush(stdin)
, то путем вызова getchar
для чтения символов до \n
, как часто рекомендуется). scanf
для чтения входа . Теперь, если Вы - новичок, scanf
, кажется как самый легкий способ считать вход, и таким образом, выбор № 3 является страшным и трудным. Но № 2 походит на реальную отговорку, потому что все знают, что недружелюбные пользователем компьютерные программы являются проблемой, таким образом, было бы хорошо добиться большего успеха. Так слишком многие начинающие программисты поставились себя в безвыходное положение, чувствуя, что у них нет выбора, кроме как сделать № 1. Они более или менее должны сделать вход с помощью scanf
, означая, что он застрянет на плохом входе, означая, что они должны выяснить способ сбросить плохой вход, означая, что они очень испытывают желание использовать fflush(stdin)
.
я хотел бы поощрить всех программистов начала там делать другой набор компромиссов:
Во время ранних стадий Вашего C программирование карьеры, прежде чем Вы будете удобным использованием чего-либо кроме [1 111], всего , не волнуется о плохом входе .В самом деле. Разрешение и отговорка использования № 2 выше. Думайте об этом как это: Вы - новичок, существует много вещей, которые Вы не знаете, как сделать все же, и одна из вещей, которые Вы не знаете, как сделать, все же: имейте дело корректно с неожиданным входом.
, Как только Вы можете, , изучают, как сделать вход с помощью функций кроме [1 112] . В той точке можно начать иметь дело корректно с плохим входом, и у Вас будет намного больше, намного лучшие методы доступный Вам, которые не потребуют попытки сбросить плохой вход вообще.
Или, другими словами, новички, которые все еще застревают с помощью [1 113], должны не стесняться использовать отговорку № 2, и когда они готовы, они должны получить высшее образование оттуда к технике № 3, и никто не должен использовать технику № 1, чтобы попытаться сбросить вход вообще (и конечно не с [1 114].
Согласно стандарту, fflush
может использоваться только с выходными буферами, и, очевидно, stdin
не является одним из них. Однако некоторые стандартные библиотеки C предоставляют использование fflush (stdin)
в качестве расширения. В этом случае вы можете использовать его, но это повлияет на переносимость, поэтому вы больше не сможете использовать какую-либо совместимую со стандартами стандартную библиотеку C на земле и ожидать тех же результатов.