我正在编写一个程序,程序中有一定数量的选项可供选择(a、b和c(,但由于某种原因,我的while
循环无法按我希望的方式运行。我只接受小写的"a"、"b"或"c",以及大写的"a"、"b"或"c"。我确信我做这件事的方式是不正确的。我在"Comp Sci简介"中,如果这有助于理解我的处境。
这是我现在拥有的代码:
while (choice == 'a' && choice == 'A' || choice == 'b' && choice =='B' || choice == 'c' && choice == 'C'){
cout << "We dont offer that package. Please try again:n ";
cin >> choice;
//cin.clear();
//cin.ignore(100, 'n');
return choice;
}
我认为这里的问题在于逻辑。如果我没有错,你想要求输入,直到他们的输入是A A B C中的一个?
把你的while循环变成你说的话:而选择是A和A或者选择B和B或者选择是C和C这样说显然是行不通的,因为选择怎么可能是A和A?
你想要的是循环,直到选择一个A A B C
你的返回也不应该在while循环中,我假设你想在有效后返回他们所做的选择?
我还添加了!(这是"否",这将反转条件的结果-将true变为false,将false变为true(运算符,因为如果没有这一点,您将在选择正确时循环,这意味着只有在输入错误的选择后才会继续。
简而言之,该代码循环请求输入,直到用户的输入是A、B、C、C中的一个,然后返回他们给出的输入。
while (!(choice == 'a' || choice == 'A' || choice == 'b' || choice == 'B' || choice == 'c' || choice == 'C')) {
std::cout << "We dont offer that package. Please try again:n ";
std::cin >> choice;
}
return choice;
在英语中,这是当选择不是A、A、B、B、C或C时,要求输入
欢迎使用stackoverflow
您希望a、a、b、b、c、c中的任何一个都有效。所以你需要修改你的代码如下:
while (choice == 'a' || choice == 'A' || choice == 'b' || choice =='B' || choice == 'c' || choice == 'C')
此外,您还写道:
return choice;
这将立即终止循环并从包含while循环的当前函数返回。
欢迎,很高兴您加入了编码列车,所以您只想接受字符,而不想接受任何字符,只接受(a,b,c,a,b,c(,这很酷,所以您做了创建一个永不结束循环的第一步,但当变量选择不在上面的列表中时,我们的条件应该是错误的。所以我们想要像这样的东西
if((choice != 'a') && (choice != 'b') && (choice != 'c') && (choice != 'A') && (choice != 'B') && (choice != 'C'))
{
//Stay in the loop
}
所以我们可以在while循环中这样写:
while((choice != 'a') && (choice != 'b') && (choice != 'c') && (choice != 'A') && (choice != 'B') && (choice != 'C'))
因此,完整的代码看起来像这样:
#include <iostream>
using namespace std;
int main()
{
char choice;
cin >> choice;
while((choice != 'a') && (choice != 'b') && (choice != 'c') && (choice != 'A') && (choice != 'B') && (choice != 'C'))
{
cout << "Sorry this package isn't offered by us, try something else: " << endl;
cin >> choice;
}
cout << "Your choice was " << choice << endl << "So you chose one of the following (a,b,c,A,B,C)";
return 0;
}