C++ C++;字符循环检查

C++ C++;字符循环检查,c++,loops,char,C++,Loops,Char,我仍然是一个编程新手,我正试图弄明白为什么这个循环不起作用。用户被要求输入一个字符,我想我应该做一个检查,看看这个字符是否是三个正确的字母之一。如果不是,他们可以重试,直到正确为止。至少是这样 char readOp() { char op; do { cout << "Please choose desired operation: (a: add, m: multiply, s: squared)" << endl;

我仍然是一个编程新手,我正试图弄明白为什么这个循环不起作用。用户被要求输入一个字符,我想我应该做一个检查,看看这个字符是否是三个正确的字母之一。如果不是,他们可以重试,直到正确为止。至少是这样

char readOp()
{
    char op;

    do
    {
        cout << "Please choose desired operation: (a: add, m: multiply, s: squared)" << endl;
        cin.ignore(); //I was getting double cout, this removed one of them.
        op = cin.get();
    } while (op != 'a' && op != 'm' && op != 's');

    cout << "Got " << op << endl;
    return op;
}
char readOp()
{
char op;
做
{

cout我将使用std::string来接收用户输入的
std::cin

string op;
do
{
    cout << "Please enter desired operation: (a: add, m: multiply, s: squared)";
    cin >> op;
} while (op != "a" && op != "m" && op != "s");
string-op;
做
{
cout>op;
}而(op!=“a”&&op!=“m”&&op!=“s”);

您的代码似乎没有任何真正的问题,但您可能会看到无限循环,因为您不知何故获得了文件的结尾,并且没有进行测试

char readOp() {
  char op;
  cout << "Please enter ....blah blah" << endl;
  do {
    if (cin.eof()) return 'x';  // <-- add some EOF handling
    cin >> op;
  } while (op != 'a' && op != 'm' && op != 's');
  cout << "exit";
  return op;
}
char readOp(){
char op;

cout以某种方式解决了我自己的代码


我将
op=cin.get();
调回原来的
cin>>op;
并删除了
cin.ignore()
现在它像魔术一样工作。我不知道为什么,但我会接受它。:P谢谢你的帮助!

cout语句的结尾在哪里?@JayKumarR抱歉,我忘了在我的示例中添加它!:)在做了一些小改动后效果很好。请访问。@Pang你用双引号结尾是什么意思?@Pang我现在明白你的意思了,找到并修复了。干杯。这就是mor这是一个代码检查问题,而不是解决他的问题——除非你认为使用std::string实际上解决了他所问的问题。这个问题是由代码解决的。用户完全可以输入字符(或其他字符串),循环不会像以前那样无限期地运行。嗯,我可能应该提到它只是我代码的一个摘录,循环完成后它会继续。除非我弄错了文件的结尾是什么。您从
cin
读取的输入在某个点上会有文件结尾条件——如果您按下ctl时是一个终端-d--如果在管道或套接字中,当另一端关闭时--对于一个文件,当文件关闭时--我尝试添加EOF处理,但它给了我与以前相同的结果。不过,谢谢!:)您可能需要添加更多的上下文,包括您传递到程序中的数据--我已投票结束这个问题,因为我们无法重复roduce your issueWell,如果这是你的意思,我不会向函数传递任何值。它所做的只是让用户决定他们想要的操作,然后返回该字符。