对于初学者练习我正在尝试创建一个接受用户单个字符的简单循环,将该字符打印到控制台并继续这样做,直到用户输入“R”。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SimpleLoop
{
class Program
{
static void Main(string[] args)
{
char cplayerSelection = 'R';
while(cplayerSelection == 'R')
{
Console.WriteLine("Enter R, P, or S:");
cplayerSelection = (char)Console.Read();
Console.WriteLine(cplayerSelection);
}
}
}
}
无论用户输入什么,只有循环一次结束然后退出。我需要更改什么来继续循环?
答案 0 :(得分:4)
在while
循环中尝试这个:
cplayerSelection = Console.ReadKey().KeyChar
仅当您输入大写R
如果您想允许三个字母,那么您可以尝试:
var letters = new[] {'R', 'P', 'S'};
while (letters.Contains(cplayerSelection))
{
Console.WriteLine("Enter R, P, or S:");
cplayerSelection = Console.ReadKey().KeyChar;
Console.WriteLine(cplayerSelection);
}
如果您想要对不区分大小写的检查,只需将这些字符的lower-case
版本添加到数组中。或者您可以使用它(由@Habib建议):
while (letters.Any(r => r == char.ToUpper(cplayerSelection)))
答案 1 :(得分:4)
我相信它应该是
while(cplayerSelection != 'R' || cplayerSelection != 'r')
您必须检查大写和小写字母,因为它们没有相同的值。
编辑:同时将cplayerSelection声明更改为其他字母,以便第一次实际执行循环。
同时替换此行
cplayerSelection = (char)Console.Read();
与
cplayerSelection = Console.ReadKey().KeyChar;
阅读Habib关于这个答案的评论以了解原因。
答案 2 :(得分:2)
Console.Read
只能读取一个字符。下次进入循环时,它也会读取返回字符。根据您是否希望用户必须点击enter
,您有几个选项。
如果你想让他们点击输入:
char cplayerSelection = 'R';
while (cplayerSelection == 'R')
{
Console.WriteLine("Enter R, P, or S:");
cplayerSelection = (Console.ReadLine())[0];
Console.WriteLine(cplayerSelection);
}
如果您不希望他们点击输入:
char cplayerSelection = 'R';
while (cplayerSelection == 'R')
{
Console.WriteLine("Enter R, P, or S:");
cplayerSelection = Console.ReadKey().KeyChar;
Console.WriteLine(cplayerSelection);
}
答案 3 :(得分:2)
正如其他人所提到的,你需要警惕区分大小写。您可以通过使用char的大写和小写检查输入来完成此操作。或者你可以将char转换为大写/小写形式,只与之比较。
此外,对于总是至少执行一次的程序,使用do while更合适。例如:
class Program
{
static void Main()
{
char input;
do
{
input = char.ToUpperInvariant(Console.ReadKey().KeyChar);
} while (input != 'R');
}
}
答案 4 :(得分:2)
我觉得你很困惑。
...从用户接受单个字符的循环,打印出来 控制台上的字符并继续执行直到用户输入 “R”以外的字符。
循环退出条件是任何不是'R'
的字符。换句话说,继续循环的唯一输入是'R'
。
无论用户输入什么,只有循环一次结束然后退出。什么 我需要更改才能继续循环吗?
这是你的第一个陈述的含义。
我需要更改什么来继续循环?
更改循环退出条件。
答案 5 :(得分:1)
根据此http://social.msdn.microsoft.com/Forums/vstudio/en-US/5c5b43e2-4536-4411-a34f-290eb8525b4d/why-does-consolereadline-not-wait-for-user-input?forum=csharpgeneral,Console.Read()将返回单个字符。第二次通过循环它会拉出你的'返回'字符并退出你的循环。