我有一个c ++程序。如果用户选择再次运行,我使用do while循环在每个循环后重新执行程序。程序在第一个循环运行正常但在后续运行中程序跳过请求对于潜水员的名字。它只是打印潜水员姓名和评委人数的提示,如下所示。我如何纠正?
首次运行时,请注意在输入潜水员姓名后,系统会提示用户输入评委人数
在随后的运行中,程序不会等待用户在请求评委的数量之前输入潜水员的名字,它会一起打印两个提示,只能输入一个评委的数量,如下所示< / p>
这是掌握执行逻辑的主要类:
int main()
{
char rerun;
do{
srand(time(NULL));
int number_of_judges=0;
char option,dive;
char dives[3];
string divenames[3];
double** scores;
string diverName="";
cout<<"What is the diver's name? "<<endl;
getline(cin,diverName);
number_of_judges=getjudges();
cout<<number_of_judges;
displayMenu();
for(int i=0;i<3;i++){
cout<<"Enter dive "<<i+1<<" to be judged(A-E)";
cin>>dive;
dive=tolower(dive);
while(!(dive=='a' || dive=='b' || dive=='c' || dive=='d' || dive=='e' ) ){
cout<<"You entered the wrong choice.Choice must be from (a-e)."<<endl;
cout<<"Enter dive "<<i+1<<" to be judged(A-E)";
cin>>dive;
dive=tolower(dive);
}
dive=tolower(dive);
dives[i]=dive;
}
for(int i=0;i<3;i++){
divenames[i]=getDive(dives[i]);
}
scores=getRandom();
getScores(diverName,scores,divenames);
cout<<"Do you want another try?";
cin>>rerun;
while(rerun !='y' && rerun!='n'){
cout<<"You have entered an invalid option.\nPlease try again.";
cin>>rerun;
rerun=tolower(rerun);
}
}
while(rerun=='y' || rerun == 'Y');
std::getchar();
return 0;
}
非常感谢任何帮助。
答案 0 :(得分:0)
在行中:
cin>>rerun;
从流中提取字符串。但是,此操作会在缓冲区中留下换行符。因此,在下一步中,您可以:
getline(cin,diverName);
您正在尝试读取所有输入到换行符,并且在缓冲区中已经有换行符(来自上一步):然后此操作立即结束。
解决方案是在cin>>rerun
此类型之后添加指令:
cin.ignore();
以这种方式,缓冲区中剩下的换行符将在下一个操作中被丢弃。