Входные данные, не принятые fmt.Scanf или fmt.Scanln

# #go

Вопрос:

Я пытался написать программу, которая принимает целочисленные данные от пользователя и выполняет некоторые вычисления. Что происходит, так это то, что каждый альтернативный раз программа заканчивается преждевременно, не приняв никаких входных данных. И Scanf, и Scanln следуют одному и тому же поведению.

Соответствующий кодекс:

 func main() {  var N int  var output []int  fmt.Println("Enter test cases")  //This bottom line executes only every alternate time  fmt.Scanf("%d", amp;N)  testCases(N, N, output) }  

Он выводит строку «Введите тестовые случаи», и программа завершается. Но когда я запускаю программу еще раз, она выполняется до конца. Затем этот шаблон повторяется каждый раз, когда я пытаюсь запустить программу.

Комментарии:

1. Я не могу воспроизвести это.

Ответ №1:

Лучше использовать пакет bufio, он реализует буферизованный ввод-вывод. scanf/scanln не буферизованы.

 scanner := bufio.NewScanner(os.Stdin) scanner.Scan() input := scanner.Text()