Вот простой пример: у меня есть массив из 3 символов, я пишу ввод на терминале и хочу немедленно проверить, что я отсканировал, например:
scanf("%3s\n",array);
printf("%s",array);
Что я хочу знать, так это: почему после запуска программы, если я пишу на терминале «abc», чтобы заставить ее распечатать массив, мне нужно ввести другой ввод, например, написать другую букву или число?
Если я напишу «abcd», а затем нажму ENTER, он сразу же распечатается, но если я просто напишу «abc» и нажму ENTER много раз, он все равно не перейдет к следующей инструкции (то есть printf).
Я знаю, что это связано с тем, как \n заставляет scanf читать строку, но я не совсем понимаю.
array
? если он имеет только 3 элемента, он не может хранить 3-символьную строку, и вы получаете UB - person phuclv   schedule 31.07.2018%3
на%2
в своей функции scanf()? - person Uclydde   schedule 31.07.2018%2s
не сканирует только 2 символа? О, правильно, нет места для терминатора, если я сделаю%3s
, правильно? - person wattbatt   schedule 31.07.2018%3
и «abcd» (строка из 4 символов) работали правильно, я подумал, что%2
и «abc» (строка из 3 символов) могут работать правильно. - person Uclydde   schedule 31.07.2018