我正在Visual 2015中为我的班级开发一个c#控制台dice实验室。根据用户的响应,我将我的程序分解为三个if循环。如果用户没有输入有效的响应,那么我有一个专用的do while循环。因为某种原因,我被困在那个圈子里,无法离开。最重要的是,因为它告诉用户输入一个有效的响应,所以它是第一个if语句。因此,即使输入"y“、"Y”、"N“或"n",它仍然初始化。这是有争议的部分。
// get response from user
response = ReadLine();
// loop starts if user does not reply with valid response in order to retrieve a valid response
if (response != "N" || response != "Y" || response != "n" || response != "y")
{
do
{
WriteLine("Please reply with Y or N");
response = ReadLine();
}
while (response != "N" || response != "Y" || response != "n" || response != "y");
}我使用的是or操作符,所以我不明白为什么它会以这样的方式循环。
发布于 2015-10-30 06:24:57
response != "N" || response != "Y" || response != "n" || response != "y"应该是
response != "N" && response != "Y" && response != "n" && response != "y"因为如果您按下有效的响应之一,则应该退出循环。
发布于 2015-10-30 06:25:45
您需要使用&&而不需要使用
response != "N" && response != "Y" && response != "n" && response != "y"发布于 2015-10-30 06:40:16
行为不当的直接原因是布尔运算符错误,您需要&& insetead of ||;您还可以将if和do..while组合成while..do。
response = Console.ReadLine();
while (response != "N" && response != "Y" && response != "n" && response != "y") {
WriteLine("Please reply with Y or N");
response = Console.ReadLine();
}下一步是将所有可能的响应放到一个集合中:
Dictionary<String, Boolean> expectedResponses = new Dictionary<String, Boolean>() {
{"Y", true},
{"y", true},
{"N", false},
{"n", false},
};
...
response = Console.ReadLine();
while (!expectedResponses.ContainsKey(response)) {
WriteLine("Please reply with Y or N");
response = Console.ReadLine();
}
...
if (expectedResponses[response]) {
// user said "yes"
}
else {
// user said "no"
} https://stackoverflow.com/questions/33429896
复制相似问题