Сайт работает в тестовом режиме - все замечания, предложения и информацию о найденных ошибках направляйте, пожалуйста, в Telegram-группу
Курс в процессе наполнения. Полный курс доступен на Степике

Баг: Недостаточно аргументов для Scanln

// ❌ Запросили 2 значения, а пользователь ввел 1
var name string
var age int
n, err := fmt.Scanln(&name, &age)
// Пользователь ввел: "John" [Enter]
// err != nil (unexpected newline)
// n = 1 (успел прочитать только name)

// ❌ Плохая обработка - программа падает или игнорирует
if err != nil {
    // забыли обработать
}

// ✅ Правильная обработка
n, err := fmt.Scanln(&name, &age)
if err != nil {
    if err == io.EOF {
        return
    }
    log.Printf("Ожидалось 2 значения, получено %d. Ошибка: %v", n, err)
    // Очищаем буфер и пробуем снова
    fmt.Scanln()
}

Scanln в отличие от Scan не ждет продолжения ввода на новой строке - он сразу бросает ошибку, если данные закончились. Новички не проверяют n (количество прочитанных значений) и думают, что всё ок, а вторая переменная осталась с дефолтным значением.

Загрузка...