Время выполнения превышено при чтении cin, но не при чтении из файла? - PullRequest
0 голосов
/ 02 октября 2018

Итак, я написал программу, которая запускается, как предполагалось, при получении ввода из файла, но выдает ошибку «время выполнения превышено» (я использую onlinegdb).В обоих случаях ввод разделяется следующим образом:

```
input
```

Я скопировал это в текстовый файл, и это сработало, но ввод ввода в качестве стандартного ввода внизу экрана не работает.Я также могу ввести в консоль, которая также работает нормально.Моя функция readFromFile - это та же функция, но с функциями файлового ввода-вывода вместо cin.Я впервые экспериментирую с вводом / выводом.Пожалуйста, помогите !!

   void readFromInput() {
     string Word;
     int count = 0;
     while (cin >> Word) {
       if (Word == "```") {
           count++;
       }
       if (count == 2) {break;} //exit after recieving opening and closing ```
       if (Word == "Add") {
         //do stuff
       }
       if (Word == "Charge") {
         //do stuff
       }
       if (Word == "Credit") {
         //do stuff
       }
     }
     return;
   }

1 Ответ

0 голосов
/ 02 октября 2018

Существует несколько специальных функций стандартного ввода / вывода, которые не применяются к обычным файловым потокам:

C ++ std::cin и std::cout по умолчанию связаны с потоками C.Поддерживать их в синхронизации дорого.Если вы не используете потоки Си, это не обязательно.Чтобы убрать эту стоимость, отсоедините их:

int main()
{
    std::ios::sync_with_stdio(false);
}

Если ваш код использует потоки ввода и вывода.Чтение из std::cin заставляет std::cout быть сброшенным (чтобы убедиться, что пользовательские вопросы отражают входной вопрос).Это может быть неэффективно, если они не связаны между собой.Так что развяжите их,

int main()
{
    std::cin.tie(nullptr);
}

Предпочитайте использовать '\n' над std::endl, чтобы избежать дополнительных приливов.

...