Что не так в этом коде? Он заканчивается как раз перед тем, как второй cin может выполнить - PullRequest
0 голосов
/ 08 марта 2019
#include<iostream>
#include<vector>
#include<ios>
#include<limits>
int main()
{
     using namespace std;
     vector<string> disliked,words;
     int n;
     cout<<"Enter the word that you dislike."<<endl;
     for(string word;cin>>word;)
         disliked.push_back(word);
     cout<<"Enter the list of words."<<endl;
     cin.sync();
     for(string word;cin>>word;)
         words.push_back(word);
     for(int i=0;i<words.size();i++)
     {
         int n=0;
         for(int j=0;j<disliked.size();j++)
         {
             if(disliked[j]==words[i])
                 n++;
         }
         if(n==0)
         cout<<words[i]<<endl;
     }
     cout<<"Program completed."<<endl;
     return 0;
}

Напишите программу, которая выдаст слово, которое вам не нравится. Сначала введите список слов, которые вам не нравятся.Программа завершает работу после печати «Введите список слов».

1 Ответ

1 голос
/ 08 марта 2019

Вместо cin.sync () используйте cin.clear ();

Вам также может понадобиться использовать cin.ignore ().

Проблема в том, что у вас застрял ^ D в cin, и он блокирует все будущие записи в cin.Контроль D закрывает системный трубопровод.И программа немедленно завершает работу.

Это может быть более полезным, если вы проверите вход, который завершает список ввода.

Выполнение с использованием cin.sync ():

$ ./a.out 
Enter the word that you dislike.
test
a
b
c
^d
Enter the list of words.
Program completed.
$ 

Выполнение после замены cin.sync () с добавлением cin.clear () и cin.ignore ():

$ ./a.out 
Enter the word that you dislike.
test
a
b
c
^d
Enter the list of words.
a
b
c
^d
Program completed.
$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...