我刚开始学习C#,并且正在解决一个需要读取名称列表(由用户输入)并再次打印出来的问题。我最多可以接受20个名字。如果用户输入null或QUIT,则应停止使用名称。
这是到目前为止我得到的:
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string[] names = new string[20]; // create a 20 name array
int nameCount = 0;
string userInput;
Console.WriteLine("Enter a bunch of names!"); // ask for a name
userInput = Console.ReadLine(); // store the name in userInput
for (int maxNames = 20; maxNames < names.Length; maxNames++)
{
if (userInput == "") // if the entry is null, stop taking names.
{
Console.WriteLine("You entered {0}", names);
Console.ReadKey();
}
else if (userInput == "QUIT") // if the entry is QUIT, stop taking names.
{
Console.WriteLine("You entered {0}", names);
Console.ReadKey();
}
else // if it isn't null or QUIT, continue populating the array until we hit the max.
{
names[nameCount] = userInput;
nameCount = nameCount + 1;
maxNames = maxNames + 1;
}
}
}
}
}
运行此命令时,我得到“输入一堆名字!”提示,但是一旦输入名称,控制台就会关闭。我不确定我在做什么错。感谢新手的帮助。
更新:谢谢大家的帮助。我接受了一些不同的建议(以及新的快捷方式!),并得出以下结论:
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
string[] names = new string[20]; // create a 20 name array
int nameCount = 0;
int maxNames = 0;
Console.WriteLine("Enter a bunch of names!"); // ask for a name
while (maxNames != 20)
{
string userInput = Console.ReadLine(); // store the name in userInput
if (userInput == "") // if the entry is null, stop taking names.
{
Console.WriteLine("You entered:");
foreach (string name in names)
{
Console.WriteLine(name);
}
Console.ReadKey();
}
else if (userInput == "QUIT") // if the entry is QUIT, stop taking names.
{
Console.WriteLine("You entered:");
foreach (string name in names)
{
Console.WriteLine(name);
}
Console.ReadKey();
}
names[nameCount] = userInput;
nameCount++;
maxNames++;
}
Console.ReadKey();
}
}
}
答案 0 :(得分:3)
欢迎来到社区。似乎有很多人忽略了最基本的循环。
您将数组声明为20个名称...没问题。
然后,您的for循环起始值为20,该值已经是数组长度的AT。从0开始循环。
{% extends 'learning_logs/base.html' %}
{% load bootstrap3 %}
{% block header %}
<h2>Edit Entry in '<i><a href="{% url 'learning_logs:topic' topic.id %}">{{ topic }}</i></a>':</h2>
{% endblock header %}
{% block content %}
<form action="{% url 'learning_logs:edit_entry' entry.id %}" method='post' class='form'>
{% csrf_token %} <!-- Used to prevent hacking -->
{% bootstrap_form form %}
{% buttons %}
<!-- creating a submit button -->
<button name="submit" class='btn btn-primary'>Edit Entry</button>
{% endbuttons %}
</form>
<a href="{% url 'learning_logs:delete_entry' entry.id %}">Delete Entry</a>
{% endblock content %}
答案 1 :(得分:1)
该程序立即终止,因为它在获得第一个输入后不会进入循环。
static void Main(string[] args)
{
List<String> names = new List<string>(); // create a 20 name array
string userInput;
int maxNames = 0;
while (maxNames != 20)
{
Console.WriteLine("Enter a bunch of names!"); // ask for a name
userInput = Console.ReadLine(); // store the name in userInput
names.Add(userInput);
maxNames++;
if(maxNames == 20 || userInput == "" || userInput == "QUIT")
{
foreach (string name in names)
{
Console.WriteLine(name);
}
Console.ReadKey();
}
}
}
我使用了一个字符串列表来存储用户输入,并在'maxname'为20之后写了它。
答案 2 :(得分:0)
添加
Console.ReadLine();
在for循环之后。
完成时自动关闭。通过添加Console.ReadLine();最后会指示它保持打开状态
答案 3 :(得分:0)
问题出在您的for
循环中:
for (int maxNames = 20; maxNames < names.Length; maxNames++)
您将maxNames
初始化为20,然后重复进行maxNames < names.Length
。从string[] names = new string[20];
中我们知道names.Length
是20
,因此,在第一次迭代之前,条件的求值结果为20 < 20
,当然是false
。因此,永不进入循环,程序退出。您可能打算将maxNames
初始化为0
,而不是20
。