Alright, here's a problem I can't seem to figure out. I'm very new at all this, so hopefully this problem isn't too ridiculous. Basically the gist of it is in a program I made for a class; it wouldn't let the input for the cin.getline be typed unless I put a cin.ignore after a cout statement. Now I was taught that you only use cin.ignore after a cin, and not a cout line. I simplified my problem and put it in a different project and it worked without having to use the cin.ignore after the specific cout statement. I was obviously confused at the contradiction.
Here's the code that uses the cin.ignore
#include<iostream>
#include<cmath>
#include<ctime>
#include<iomanip>
using namespace std;
int main ()
{
const int NAME_LENGTH=25, HOW_WELL=12;
char player1Name[NAME_LENGTH], player2Name[NAME_LENGTH], p1howWell[HOW_WELL], p2howWell[HOW_WELL];
int minRange, maxRange, p1Guess1, p1Guess2, p1Guess3, p2Guess1, p2Guess2, p2Guess3, p1score, p2score, p3score;
srand(static_cast<unsigned>(time(0)));
cout<<"Enter the smallest number in the range: ";
cin>>minRange;
cout<<"Enter the largest number in the range: ";
cin>>maxRange;
cout<<endl;
int p3rand1=rand()%(maxRange-minRange+1)+minRange, p3rand2=rand()%(maxRange-minRange+1)+minRange, p3rand3=rand()%(maxRange-minRange+1)+minRange;
int goldenNumber=rand()%(maxRange-minRange+1)+minRange;
//Here is where the problem is:
cout<<"Player 1"<<endl;
cout<<"Enter your name: ";
cin.ignore(); //this right here; without it it skips the user inputing their data
cin.getline(player1Name, NAME_LENGTH);
cout<<"How well are you going to do? ";
cin>>p1howWell;
cout<<"Enter your three guesses."<<endl;
cout<<"Answers must be between "<<minRange<<"-"<<maxRange<<": ";
cin>>p1Guess1>>p1Guess2>>p1Guess3;
cout<<endl;
cout<<"Player 2"<<endl;
cout<<"Enter your name: ";
cin.ignore();
cin.getline(player2Name, NAME_LENGTH);
cout<<"How well are you going to do? ";
cin>>p2howWell;
cout<<"Enter your three guesses."<<endl;
cout<<"Answers must be between "<<minRange<<"-"<<maxRange<<": ";
cin>>p2Guess1>>p2Guess2>>p2Guess3;
cout<<endl;
cout<<"Player 3"<<endl;
cout<<"Player 3's name: Big John"<<endl;
cout<<"Player 3 estimates it will do BEST"<<endl;
cout<<"Player 3 guesses "<<p3rand1<<" "<<p3rand2<<" "<<p3rand3<<endl<<endl;
cout<<"The Golden Number was "<<goldenNumber<<endl;
cout<<"The Results"<<endl;
cout<<left<<setw(25)<<"Name"<<setw(15)<<"Estimate"<<setw(18)<<"Guesses"<<setw(6)<<"Score"<<endl;
cout<<setw(25)<<player1Name<<setw(15)<<p1howWell<<setw(6)<<p1Guess1<<setw(6)<<p1Guess2<<setw(6)<<p1Guess3<<setw(6);
p1score=abs(goldenNumber-p1Guess1)+abs(goldenNumber-p1Guess2)+abs(goldenNumber-p1Guess3);
cout<<p1score<<endl;
cout<<setw(25)<<player2Name<<setw(15)<<p2howWell<<setw(6)<<p2Guess1<<setw(6)<<p2Guess2<<setw(6)<<p2Guess3<<setw(6);
p2score=abs(goldenNumber-p2Guess1)+abs(goldenNumber-p2Guess2)+abs(goldenNumber-p2Guess3);
cout<<p2score<<endl;
cout<<setw(25)<<"Big John"<<setw(15)<<"BEST"<<setw(6)<<p3rand1<<setw(6)<<p3rand2<<setw(6)<<p3rand3<<setw(6);
p3score=abs(goldenNumber-p3rand1)+abs(goldenNumber-p3rand2)+abs(goldenNumber-p3rand3);
cout<<p3score<<endl<<endl;
return 0;
}
Now here's a simplified version of the previous code that doesn't use cin.ignore and doesn't skip the user typing the input
#include<iostream>
using namespace std;
int main()
{
const int NAME_LENGTH=25;
char player1Name[NAME_LENGTH], p1howWell[NAME_LENGTH];
cout<<"Player 1"<<endl;
cout<<"Enter your name: "; //no cin.ignore and it doesn't skip user input unlike in the other code
cin.getline(player1Name, NAME_LENGTH);
cout<<"How well are you going to do? ";
cin>>p1howWell;
cout<<"Enter your three guesses."<<endl;
return 0;
}
I mean yeah both programs work, but it'd be nice to know why they need to be treated different for seemingly similar coding.