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,如果这是你的意思,我不会向函数传递任何值。它所做的只是让用户决定他们想要的操作,然后返回该字符。