Probeer int te gebruiken in getline

Dit kleine stukje code komt van een functie in een klasse die ik heb gemaakt en ik heb totalquestionsnodig 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 charste pakken. Het kan worden gedaan met getline(), maar cinis veel eenvoudiger.


Antwoord 3, autoriteit 25%

getlineleest 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::cinrechtstreeks invoeren
totalquestionsDoet 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 getlineen gebruik std::istringstreamvoor 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.

Other episodes