Ich habe viele Dinge ausprobiert und ändere diesen Code, aber ich kann nicht erreichen, dass zwei Eingaben erforderlich sind, bevor ein Wert für 'score' akzeptiert wird. Außerdem hatte ich Probleme, einen Weg zu finden, die cin von 'score' zu stoppen und ' ' zu antworten, damit der Benutzer Enter drücken kann, ohne einen Wert einzugeben. Der einzige Weg, den ich gesehen habe, ist, sie beide als Saiten zu akzeptieren, aber ich hatte gehofft, das zu vermeiden.C++ cin erfordert 2 oder mehr Eingaben, bevor es einen Wert akzeptiert
#include<iostream>
#include<iomanip>
#include<limits>**strong text**
using namespace std;
//void enterdata(string*, int*);
int main(){
// \t string names[];
// \t int testscores[];
\t string name;
\t int score;
\t char answer;
\t cout<<"This program asks the user to enter a list of names and test scores,"<<endl;
\t cout<<"then sorts the list into ascending order according to the scores"<<endl;
\t cout<<"and calculates the average test score."<<endl;
// \t enterdata(names, testscores);
\t do{
\t \t \t cout<<"Please enter a name: ";
\t \t \t getline(cin, name);
\t \t \t while(name.empty()){
\t \t \t \t cout<<"No entry detected. Please enter a name: ";
\t \t \t \t getline(cin, name);
\t \t \t }
\t \t \t cout<<name<<endl;
\t \t \t cout<<"Please enter a test score: ";
\t \t \t cin>>score;
\t \t \t while(!(cin>>score) || score<0){
\t \t \t \t cin.clear();
\t \t \t cin.ignore(numeric_limits<streamsize>::max(), '\n');
\t \t \t cout<<"Input not valid. Only positive integers will be accpeted."<<endl;
\t \t \t cout<<"Please enter a test score: ";
\t \t \t }
\t \t \t cout<<score<<endl;
\t \t \t cin.sync();
\t \t \t cout<<"Would you like to enter another student name and test score? [y/n] ";
\t \t \t cin>>answer;
\t \t \t while(answer!='y' && answer!='n'){
\t \t \t cout<<"Input not valid. Only y or n will be accepted."<<endl;
\t \t \t cout<<"Would you like to enter another student name and test score? [y/n] ";
\t \t \t cin>>answer;
\t \t \t }
\t \t \t cout<<answer<<endl;
\t \t \t cin.sync();
\t \t } while(answer == 'y');
\t return 0;
}
Mögliches Duplikat von [Warum überspringt std :: getline() die Eingabe nach einer formatierten Extraktion?] (Https://stackoverflow.com/questions/21567291/why-does-stdgetline-skip-input-after-a-formatted -Extraktion) – user0042
Ich weiß es nicht. Es scheint sich anders zu verhalten als diese Frage. Es überspringt die Eingabe nicht. Das Programm wird nicht zum nächsten Schritt übergehen, ohne einen Wert zu akzeptieren. Solange ich eine positive Zahl eingegeben habe und die Eingabetaste gedrückt habe, das zweite Mal, dass ich eine Zahl eintrage und die Eingabetaste drücke, akzeptiert cin einen Wert und geht weiter zum nächsten Schritt im Programm. – BigB63
Sie lesen die ganze Zahl zweimal in diesen zwei Zeilen - cin >> score; while (! (Cin >> score) || score <0) { Seien Sie auch vorsichtig, wenn Sie zwischen cin und readline wechseln - wenn Sie integer mit cin lesen, liest es nicht den Zeilenumbruch, also wird es von der nächste readline(). – Harmeet