Dit kleine stukje code komt van een functie in een klasse die ik heb gemaakt en ik heb totalquestions
nodig om een int te zijn, zodat het een for-lus kan doorlopen en het totale aantal vragen die ik heb gesteld.
question q;
for(int i = 0; i < totalquestions; i++)
{
q.inputdata();
questions.push_back(q);
}
Waar komt dit stukje code om de hoek kijken? Heeft iemand enig idee om dit te laten werken?
Antwoord 1, autoriteit 100%
Gebruik
cin >> totalquestions;
Controleer ook de fouten
if (!(cin >> totalquestions))
{
// handle error
}
Antwoord 2, autoriteit 25%
Doe dit:
int totalquestions;
cout << "How many questions are there going to be on this exam?" << endl;
cout << ">>";
cin >> totalquestions;
Getline is bedoeld om chars
te pakken. Het kan worden gedaan met getline()
, maar cin
is veel eenvoudiger.
Antwoord 3, autoriteit 25%
getline
leest een hele regel als een string. Je hebt nog steeds
om het om te zetten in een 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...
}
Merk op die gewoon std::cin
rechtstreeks invoeren
totalquestions
Doet niet werk; het zal de slepen verlaten
'\n'
teken in de buffer, die alles zal synchroniseren
de volgende invoer. Het is mogelijk om dit te vermijden door een
Bel naar std::cin.ignore
, maar dit zou de fout nog steeds missen
Vanwege het volgen van afval. Als u lijngerichte invoer doet,
Blijf bij getline
en gebruik std::istringstream
voor elke
noodzakelijke conversies.
Antwoord 4, Autoriteit 8%
Gebruik niet getline
:
int totalquestions;
cin >> totalquestions;
Antwoord 5, Autoriteit 8%
een van de betere manieren om een int van gebruiker te krijgen: –
#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();
}
Waarom is het beter dan het gebruik van CIN & GT; & GT; n?
daadwerkelijk artikel uitleggen waarom
Gebruik de bovenstaande code voor uw vraag om de INT-waarde te krijgen en gebruik deze vervolgens in de lus.