Какой угловой случай мне не хватает в моей эмуляции Rust для C ++ `std :: cin >>`? - PullRequest
0 голосов
/ 27 мая 2020
• 1000 . Блок match за пределами l oop - это то место, где вычисляется длина допустимого ввода (то есть до начала конечных пробелов или достижения EOF).

Вот пример, использующий выше метод.

let handle = std::io::stdin();
let x: i32 = input(&handle).unwrap();
println!("x: {}", x);
let y: String = input(&handle).unwrap();
println!("y: {}", y);

Когда я попробовал несколько простых тестов, метод работает так, как задумано. Однако, когда я использую это в онлайн-программистах, например, в codeforces, я получаю жалобу о том, что программа иногда простаивает или что был введен неправильный ввод, среди других проблем, что приводит к подозрению, что я пропустил угловой случай. или что-то вроде того. Обычно это происходит, когда ввод состоит из нескольких сотен строк.

Какой ввод нарушит работу метода? Что такое поправка?

1 Ответ

0 голосов
/ 11 июня 2020

После множества экспериментов я заметил задержку при чтении каждого ввода, которая складывалась по мере увеличения количества вводов. Функция не использует буфер. Он пытается получить доступ к потоку каждый раз, когда ему нужно заполнить переменную, что происходит медленно и, следовательно, с задержкой.

Извлеченный урок: всегда используйте буфер с хорошей емкостью.

Однако проблема простоя все еще сохранялась, пока я не заменил пары fill_buf, consume на что-то вроде read_line или read_string.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...