Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++, Program ends before allowing input

Tags:

c++

To practice C++ I am trying to make a simple program that allows a user to input a name followed by a score and then allows the user to enter a name and get the score that name was entered with. The program works fine until I enter an escape character (ctrl + z) once I'm done entering names, after entering the escape character the program will output the line "Enter name of student to look up the score" but not allow the user to input the name and instead reads out "Press any key to exit". I'm totally stumped on how to fix this and any help is greatly appreciated.

#include "stdafx.h"
#include <std_lib_facilities.h>

int main()
{
    vector <string>names;
    vector <int>scores;
    string n = " "; // name
    int s = 0; // score
    string student = " ";
    cout << "Enter the name followed by the score. (Ex. John 89)" << endl;
    while(cin >> n >> s)
    {
        for(size_t i = 0; i < names.size(); ++i)
        {
            if(n == names[i])
            {
                cout << "Error: Duplicate name, Overwriting" << endl;
                names.erase(names.begin() + i);
                scores.erase(scores.begin() + i);
            }
        }
        names.push_back(n);
        scores.push_back(s);
    }
    cout << "Name: Score:" << endl;
    for(size_t j = 0; j < names.size(); ++j)
    {
        cout << names[j];
        cout <<" " << scores[j] << endl;
    }
    cout << "Enter name of student to look up their score" << endl;
    cin >> student;
    for(size_t g = 0; g < names.size(); ++g)
    {
        if(student == names[g])
        {
            cout << "Score: " << scores[g] << endl;
        }
    }
    keep_window_open();
    return 0;
}
like image 464
user2651300 Avatar asked Feb 14 '26 05:02

user2651300


1 Answers

After you press the CTRL+Z key combination, which induces an EOF state to the cin stream, you need to bring the cin input stream back to its normal 'good' state to be able to use it again. Add the following code after your for loop where you print the contents of the vectors.

cin.clear();

You may also check the state of the standard input stream using the rdstate() function. Anything other than 0 means that the standard stream is in an error state.

like image 160
chosentorture Avatar answered Feb 15 '26 19:02

chosentorture