Trying to use int in getline
Solution 1
Use
cin >> totalquestions;
Check the errors too
if (!(cin >> totalquestions))
{
// handle error
}
Solution 2
getline
reads an entire line as a string. You'll still have
to convert it into an int:
std::string line;
if ( !std::getline( std::cin, line ) ) {
// Error reading number of questions...
}
std::istringstream tmp( line );
tmp >> totalquestions >> std::ws;
if ( !tmp ) {
// Error: input not an int...
} else if ( tmp.get() != EOF ) {
// Error: unexpected garbage at end of line...
}
Note that just inputting std::cin
directly into
totalquestions
does not work; it will leave the trailing
'\n'
character in the buffer, which will desynchronize all of
the following input. It's possible to avoid this by adding a
call to std::cin.ignore
, but this would still miss the error
due to trailing garbage. If you're doing line oriented input,
stick with getline
, and use std::istringstream
for any
necessary conversions.
Solution 3
Do this:
int totalquestions;
cout << "How many questions are there going to be on this exam?" << endl;
cout << ">>";
cin >> totalquestions;
Getline is meant for grabbing chars
. It can be done with getline()
, but cin
is much easier.
Solution 4
One of the better ways of getting an int from user :-
#include<iostream>
#include<sstream>
int main(){
std::stringstream ss;
ss.clear();
ss.str("");
std::string input = "";
int n;
while (true){
if (!getline(cin, input))
return -1;
ss.str(input);
if (ss >> n)
break;
std::cout << "Invalid number, please try again" << std::endl;
ss.clear();
ss.str("");
input.clear();
}
Why is it better than using cin >> n ?
As for your question, use the above code to get the int value and then use it in the loop.
Scott
Updated on November 22, 2020Comments
-
Scott over 3 years
cout << "How many questions are there going to be on this exam?" << endl; cout << ">>"; getline(cin, totalquestions);
This small piece of code comes from a function in a class that I have created and I need
totalquestions
to be an int so that it can run through a for loop and keep asking the total amount of questions that I have asked.question q; for(int i = 0; i < totalquestions; i++) { q.inputdata(); questions.push_back(q); }
Where does this piece of code comes to play? Does anyone have any idea to make this work?
-
ulidtko about 13 yearsPlease specify what you think is not working.
-
riwalk about 13 years@ulidtko, actually, for this question, it was pretty easy to see what was not working...
-
-
sehe about 6 years@OlayemiIbrahim stackoverflow.com/a/4533102/85371 Thanks for contributing anyways!