C ++ Char循环检查

时间:2016-02-09 03:18:00

标签: c++ loops char

我仍然是编程的初学者,我正在试图弄清楚为什么这个循环不起作用。要求用户输入一个字符,我想我会检查字符是否是三个正确字母之一。如果不是,他们可以重试,直到它是正确的。至少就是这个想法。

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函数。

我错过了什么?我只是累了,因为它是04:04?

3 个答案:

答案 0 :(得分:0)

您的代码似乎没有任何实际问题,但您可能会看到无限循环,因为您以某种方式获得了文件结束而您没有对此进行测试。只需添加一个合理的EOF处理,例如像这样;

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;
}

修改 您还应该查看调用readOp的代码 - 我打赌(猜测)有一个外循环,它没有正确测试返回值,因此再次调用readOp。 / p>

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

我会使用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");