Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 118009
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 11, 20262026-05-11T03:25:36+00:00 2026-05-11T03:25:36+00:00

I’ve singled out a failure on my program that prevents me from assigning a

  • 0

I’ve singled out a failure on my program that prevents me from assigning a value to the variable addAntonymAnswer1. I’ve tried running cin.clear() before the statement to get the thing read my yes/no answer, but the code just won’t respond.

The program bit that’s failing is located inside void dictionaryMenu(vector <WordInfo> &wordInfoVector) and reads

         cin.clear();           cout<<'>';          cin>>addAntonymAnswer1;           // cin reading STUCK, why!?   

to get to that point of the program the user has to choose to add a word, and then add a synonym.

The input for running the program is:

dictionary.txt 1 cute 2 hello 3 ugly 4 easy 5 difficult 6 tired 7 beautiful synonyms 1 7 7 1 3 2 antonyms 1 3 3 1 7 4 5 5 4 7 3 

#include <iostream> #include <fstream> #include <string>  #include <sstream> #include <vector>   using namespace std;    class WordInfo{        public:               WordInfo(){}               WordInfo(string newWord){                            word=newWord;                              }               ~WordInfo() { }               int id() const {return myId;}               void readWords(istream &in)              {                in>>myId>>word;                   }               vector <int> & getSynonyms () {                      return mySynonyms;              }              vector <int> & getAntonyms() {                       return myAntonyms;             }              string getWord() {                      return word;                    }             void dictionaryMenu (vector <WordInfo> &wordInfoVector){            cout<<endl<<'Would you like to add a word?'<<endl;              cout<<'(yes/no)'<<endl;           cout<<'>';           string addWordAnswer;           cin>>addWordAnswer;            if (addWordAnswer=='yes')           // case if the guy wants to add a word           {           cout<<endl;                             cout<<'Please, write the word '<<endl;                              string newWord;           cout<<'>';           cin>>newWord;           cout<<endl;                     WordInfo newWordInfo (newWord);            int newWordId = wordInfoVector.size() +1;            newWordInfo.myId=newWordId;            cout<<'The id of '<<newWordInfo.word<<' is '<<newWordInfo.myId<<endl<<endl;             wordInfoVector.push_back(newWordInfo);             cout<<'Would you like to define which words on the existing dictionary are' <<endl            <<'synonyms of '<<newWordInfo.word<<'?'<<endl;             cout<<'(yes/no)'<<endl;            string addSynonymAnswer, addAntonymAnswer1, addAntonymAnswer2;           cout<<'>';           cin>>addSynonymAnswer;                 if (addSynonymAnswer=='yes')           {              cout<<endl;             cout<<'Please write on a single line the ids for the synonyms of '             <<newWordInfo.word<<endl<<'starting with its id, which is '<<newWordInfo.myId<<endl<<endl;              cout<<'For example, to define that the synonym of the word 'cute', which has an id 1, is'              <<''beautiful', which has an id 7, you should write: 1 7'<<endl<<endl;              cout<<'In the case of '<<newWordInfo.word<<' you should start with '<<newWordInfo.myId<<endl;              cin.clear();             string lineOfSyns;             cout<<'>';              cin>>lineOfSyns;              newWordInfo.pushSynonyms(lineOfSyns, wordInfoVector);               cin.clear();                         cout<<'Would you like to define which words on the existing dictionary are' <<endl                   <<'antonyms of '<<newWordInfo.word<<'?'<<endl;                     //##HERE THE CIN READING OF addAntonymAnswer1 FAILS, WHY?                   cin.clear();                  cout<<'>';                  cin>>addAntonymAnswer1;                   // cin reading STUCK, why!?                       if (addAntonymAnswer1=='yes'){ }                                              else if (addAntonymAnswer1=='no'){                          // END DICTIONARY MENU                          }                             }              else if (addSynonymAnswer=='no'){                  cout<<'Would you like to define which words on the existing dictionary are' <<endl                   <<'antonyms of '<<newWordInfo.word<<'?'<<endl;                     cout<<'>';                  cin>>addAntonymAnswer2;                   if (addAntonymAnswer2=='yes'){ }                                              else if (addAntonymAnswer2=='no'){                          // END DICTIONARY MENU                          }                 }             } // if addWordAnswer == 'no'            else if (addWordAnswer=='no'){                 // ######RETURN TO MAIN MENU############                }                           }               void pushSynonyms (string synline, vector<WordInfo> &wordInfoVector){                stringstream synstream(synline);               vector<int> synsAux;               // synsAux tiene la línea de sinónimos               int num;               while (synstream >> num) {synsAux.push_back(num);}               int wordInfoVectorIndex;               int synsAuxCopyIndex;                 if (synsAux.size()>=2){ // takes away the runtime Error                 for (wordInfoVectorIndex=0; wordInfoVectorIndex <wordInfoVector.size(); wordInfoVectorIndex++)              {                    if (synsAux[0]==wordInfoVector[wordInfoVectorIndex].id()){                       // this is the line that's generating a Runtime Error, Why?                                                                            for (synsAuxCopyIndex=1; synsAuxCopyIndex<synsAux.size(); synsAuxCopyIndex++){                      // won't run yet                         wordInfoVector[wordInfoVectorIndex].mySynonyms.push_back(synsAux[synsAuxCopyIndex]);                               }                                                                            }                   }                }// end if size()>=2               } // end pushSynonyms                      void pushAntonyms (string antline, vector <WordInfo> &wordInfoVector)              {                 stringstream antstream(antline);               vector<int> antsAux;               int num;               while (antstream >> num) antsAux.push_back(num);                int wordInfoVectorIndex;               int antsAuxCopyIndex;                    if (antsAux.size()>=2){ // takes away the runtime Error                            for (wordInfoVectorIndex=0; wordInfoVectorIndex <wordInfoVector.size(); wordInfoVectorIndex++)              {                    if (antsAux[0]==wordInfoVector[wordInfoVectorIndex].id()){                       // this is the line that's generating a Runtime Error, Why?                                                                            for (antsAuxCopyIndex=1; antsAuxCopyIndex<antsAux.size(); antsAuxCopyIndex++){                      // won't run yet                         wordInfoVector[wordInfoVectorIndex].myAntonyms.push_back(antsAux[antsAuxCopyIndex]);                               }                                                                            }                   }                }// end if size()>=2                   }               //--dictionary output function               void printWords (ostream &out)              {                 out<<myId<< ' '<<word;                   }                 //--equals operator for String              bool operator == (const string &aString)const              {                            return word ==aString;                }                //--less than operator               bool operator <(const WordInfo &otherWordInfo) const              { return word<otherWordInfo.word;}               //--more than operator               bool operator > (const WordInfo &otherWordInfo)const              {return word>otherWordInfo.word;}               public:                     vector<int> mySynonyms;                   vector <int> myAntonyms;                      string word;                    int myId;         };        //--Definition of input operator for WordInfo       istream & operator >>(istream &in, WordInfo &word)       {          word.readWords(in);         }          //--Definition of output operator        ostream & operator <<(ostream &out, WordInfo &word)       {             word.printWords(out);          }            int main() {            string wordFile;           cout<<'enter name of dictionary file: '<<endl;           getline (cin,wordFile);            ifstream inStream (wordFile.data());            if(!inStream.is_open())           {           cerr<<'cannot open '<<wordFile<<endl;            exit(1);                                  }            vector <WordInfo> wordInfoVector;             WordInfo aword;                while (inStream >>aword && (!(aword=='synonyms')))           {               wordInfoVector.push_back(aword);             }            inStream.clear();                    vector <int> intVector;           string synLine;                  while (getline(inStream, synLine)&&(synLine!=('antonyms'))){                  aword.pushSynonyms(synLine, wordInfoVector);                  }              int theIndex;              string antLine;            while (getline(inStream,antLine)){                  aword.pushAntonyms(antLine, wordInfoVector);                 }                    cout<<endl<<'the words on the dictionary are: '<<endl;            int h=0;                     while (h<wordInfoVector.size()){                 cout<<wordInfoVector[h]<<endl;                 h++;                 }            aword.dictionaryMenu(wordInfoVector);            system('PAUSE');            return 0;       } 
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. 2026-05-11T03:25:37+00:00Added an answer on May 11, 2026 at 3:25 am

    cin.clear() doesn’t clear the standard input. What it does is clearing error bits, like eofbit, failbit and others, and sets the stream into a good state. Maybe you expected it to clear out anything in it? If the user typed

    yes no 

    Just before, and you

    cin >> someStringVariable; 

    It will read up to no and the stream will still contain

     no 

    The call to clear then clears any error bits being active. Then, your

    cin>>addAntonymAnswer1; 

    Will read the no that wasn’t eaten by the previous read, and the action immediately returns, not waiting for new input. What you should do is doing a clear followed by an ignore, up to the next newline. You tell it the amount of characters it should ignore maximally. That amount should be the highest number possible:

    cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 

    Doing that will make the stream empty, and a following read will wait for you to type something in.


    Another problem arises if you have got a cin >> followed by a getline: The cin will leave any whitespace (also newlines) after its read token, but getline will stop reading after it hits such a newline. I see you have put clear after nearly everything. So i want to show you when you need it and when not. You don’t need it when you sequence multiple cin >>. Assume you have in your buffer: ‘foo\nbar\n’. Then you do the following reads

    cin >> a; // 1 cin >> b; // 2 

    After the first, your buffer will contain ‘\nbar\n’. That is, the newline is still in. The second cin>> will first skip all whitespace and newlines, so that it can cope with \n being at the front of bar. Now, you can also sequence multiple getline calls:

    getline(cin, a); getline(cin, b); 

    Getline will throw away the \n that it reads at the line end, but won’t ignore newlines or whitespace at the begin. So, after the first getline, the buffer contains ‘bar\n’. The second getline will correctly read ‘bar\n’ too. Now, let’s consider the case where you need the clear/ignore:

    cin >> a; getline(cin, b); 

    The first will leave the stream as ‘\nbar\n’. The getline then will see immediately the \n at the begin, and will think it read an empty line. Thus, it will immediately continue and not wait for anything, leaving the stream as ‘bar\n’. So, if you have a getline after a cin>> you should first execute the clear/ignore sequence, to clear out the newline. But between getline or cin>>‘s, you should not do it.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I am currently running into a problem where an element is coming back from
I'm trying to decode HTML entries from here NYTimes.com and I cannot figure out
Does anyone know how can I replace this 2 symbol below from the string
link Im having trouble converting the html entites into html characters, (&# 8217;) i
That's pretty much it. I'm using Nokogiri to scrape a web page what has
I have just tried to save a simple *.rtf file with some websites and
I have a JSP page retrieving data and when single or double quotes are
Seemingly simple, but I cannot find anything relevant on the web. What is the
this is what i have right now Drawing an RSS feed into the php,
I want to count how many characters a certain string has in PHP, but

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.