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