私はたくさんのことを試みてこのコードを変更し続けましたが、 'スコア'の値を受け入れるには2つの入力が必要です。また、「スコア」と「答え」からcinを止める方法を見つけるのが難しかった ユーザーは値を入力せずにエンターキーを押すことができません。私が見た唯一の方法は、両方を文字列として受け入れることですが、私はそれを避けることを望んでいました。値を受け取る前に2つ以上の入力を必要とするC++ cin
#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;
}
フォーマット抽出後にstd :: getline()が入力をスキップするのはなぜですか?](https://stackoverflow.com/questions/21567291/why-does-stdgetline-skip-input-after-a-formatted -extraction) – user0042
私は分かりません。それはその質問とは違った働きをしているようです。入力をスキップしません。プログラムは、値を受け入れずに次のステップに移りません。私が正の数を入力してEnterを押す限り、2回目に数字を入力してenterを押すと、cinは値を受け入れてプログラムの次のステップに進みます。 – BigB63
これらの2行で整数を2回読み込んでいます - cin >> score; while(!(cin >> score)|| score <0){ また、cinとreadlineを切り替えるときには注意してください - cinを使って整数を読み込んだ場合、改行は読み込まれないので、次のreadline()。 – Harmeet