c# - 为什么这个 c# 代码只接受一次输入?
问题描述
我正在尝试编写一个程序来跟踪我在游戏中死了多少次。程序运行,接受用户输入,并跟踪信息。当我运行程序时,它可以工作,但你只能输入一个键。例如,如果您启动它,然后按“D”,它会将“死亡”变量加一,但您将无法输入其他任何内容。这是代码:
Console.WriteLine(
"To add one to Deaths stat, press D. To add one to Charms Stat, press C. " +
"To see all stats, press S.");
int deaths = 0;
int charms = 23;
ConsoleKeyInfo datKey;
datKey = Console.ReadKey();
if (datKey.Key == ConsoleKey.D)
{
deaths = deaths + 1;
Console.WriteLine();
Console.WriteLine("Death Added");
}
if (datKey.Key == ConsoleKey.C)
{
charms = charms + 1;
Console.WriteLine();
Console.WriteLine("Charm Added");
}
if (datKey.Key == ConsoleKey.S)
{
Console.WriteLine();
Console.WriteLine($"You have {charms} charms \nYou have died {deaths} times");
解决方案
尝试这个:
using System;
namespace TestApp
{
class Program
{
static void Main()
{
Console.WriteLine("To add one to Deaths stat, press D. To add one to Charms Stat, press C (like you'll have to use that one). To see all stats, press S.");
int deaths = 0;
int charms = 23;
ConsoleKeyInfo datKey;
do
{
datKey = Console.ReadKey();
switch(datKey.Key)
{
case ConsoleKey.D:
deaths++;
Console.WriteLine();
Console.WriteLine("Death Added");
break;
case ConsoleKey.C:
charms++;
Console.WriteLine();
Console.WriteLine("Charm Added");
break;
case ConsoleKey.S:
Console.WriteLine();
Console.WriteLine($"You have {charms} charms \nYou have died {deaths} times sence starting this program");
break;
default:
Console.WriteLine();
Console.WriteLine("A useless key pressed");
break;
}
} while (datKey.Key != ConsoleKey.S);
Console.ReadKey();
}
}
}
如您所见,我已将您对用户输入的请求 (datKey = Console.ReadKey();) 封装在一个循环中,因此程序将继续要求用户键入一个键。只有用户输入了 S,循环才被打破。此外,我已将您的许多 if 语句更改为 switch 结构,在这种情况下更好用
推荐阅读
- javascript - 为什么我的函数总是返回一个未定义的对象?Java 脚本 / 节点 JS
- angular - 如何在变量中应用'"'?
- python - 训练facenet时出现ValueError
- bazel - 如何使 sh_test 依赖于构建 docker 镜像?
- python - 如何计算累积平均收入?Python
- angular - 如何在 Angular 9/TypeScript 中添加垂直滚动条
- firebase - firebase 多区域的优势
- python - 保存的模型无法加载包含自定义方法的层
- javascript - .getValues 无法读取自定义函数
- logstash - ElasticStack 中的架构 logstash 配置文件