为什么我的简单C#程序立即退出?

时间:2018-12-06 02:55:14

标签: c#

我刚开始学习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();
        }
    }
}

4 个答案:

答案 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.Length20,因此,在第一次迭代之前,条件的求值结果为20 < 20,当然是false。因此,永不进入循环,程序退出。您可能打算将maxNames初始化为0,而不是20