由于一些奇怪的原因,我无法摆脱那个要求输入答案的循环,任何帮助都会很棒:
#include <iostream>
using namespace std;
int main(){
const int TEST=20;
char crctAnswrs[TEST]={'B', 'D', 'A', 'A', 'C',
'A', 'B', 'A', 'C', 'D',
'B', 'C', 'D', 'A', 'D',
'C', 'C', 'B', 'D', 'A'};
char stdntAnswer[TEST];
for(int index=0; index<TEST; index++){
do{
cout<<"Please enter the answer for question #"<<(index+1)<<": ";
cin.ignore();
char input;
cin.get(input);
stdntAnswer[index]=input;
if(stdntAnswer[index]!='A' && stdntAnswer[index]!='B' &&
stdntAnswer[index]!='C' && stdntAnswer[index]!='D'){
cout<<"Please enter A, B, C, or D as an answer."<<endl;
}
}while(stdntAnswer[index]!='A' && stdntAnswer[index]!='B' &&
stdntAnswer[index]!='C' && stdntAnswer[index]!='D');
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:更改了条件,我为这个例子输错了.现在每个条件都有!=问题是一样的,它不能突破循环.我认为如果其中一个条件为假,那么整个条件设置为false,从而导致它突然退出循环......但是,如果我输入A,B,它仍然会循环并且仍会显示验证消息,C或D ....是cin.get()的东西吗?我不想使用getline(),因为这不是本书所要求的.
您cin.ignore()在阅读角色之前打电话.
这将导致它忽略下一个输入字符(因为cin如果它只是坐在那里等待输入,则流没有EOF).因此,您将始终获得"输入"而不是字母.
读完字符后忽略,或者更好的是,getline用来读取字符串.
您可以通过显示已读取的字符(或其值)来解决此问题.标准的调试实践:"为什么这个东西应该工作不起作用?"
| 归档时间: |
|
| 查看次数: |
407 次 |
| 最近记录: |