
Баг: Несоответствие типов с оставшимися данными в буфере
// ❌ Классический сценарий: число, потом строка
var num int
var text string
fmt.Scan(&num) // пользователь ввел: "42 hello"
// num = 42, а "hello" осталось в буфере!
fmt.Scan(&text) // читает "hello" из буфера ДО того, как пользователь что-то ввел
// программа не ждет ввода, а берет остатки
// Пользователь в шоке: его не спросили второй раз Решение - очистка буфера после scanf:
// ✅ Вариант 1: сбросить остатки
var num int
var text string
fmt.Scan(&num) // если ввели "42 hello"
// Съедаем всё, что осталось до конца строки
fmt.Scanln()
fmt.Scan(&text) // теперь нормально спросит пользователя
// ✅ Вариант 2: читать через bufio.Reader оба раза
reader := bufio.NewReader(os.Stdin)
fmt.Fscan(reader, &num)
fmt.Fscan(reader, &text) // каждый раз новые данныеПрограмма не падает, не выдает ошибок, но ведет себя странно - пропускает ввод. На маленьких тестах работает, в боевом коде - сюрпризы. Пользователи думают, что программа зависла или сломалась, а она просто молча читает мусор из буфера. Бывает незаметно, если тестировать идеальными данными без пробелов.
Загрузка...