繁体   English   中英

如何打破循环并排除 C# 中的最后一个输入?

[英]How can I break the loop and exclude the last input in C#?

我必须编写一个代码来询问用户将输入多少部电影。 输入电影数量后,应要求用户输入电影的名称。 所有名称都将添加到数组movies 如果用户输入“退出”,程序应该停止并显示用户已经输入的电影。

我写了这段代码:

Console.WriteLine("Enter number of movies:");
int num1 = int.Parse(Console.ReadLine());
string[] movies = new string[num1];

for (i = 0; i < num1; i++)
{
    Console.WriteLine("Enter movie name:");
    movies[i] = Console.ReadLine();
    if(movies[i] == "Exit" || movies[i] == "exit")
    {
        break;
    }
}
for (i = 0; i < num1; i++)
{
    Console.WriteLine("Movie {0} is {1}", i + 1, movies[i]);
}

问题是:如果用户编写exit ,程序会将exit显示为电影。 例如:用户想输入 4 部电影,第 1 部电影作为第 1 部电影进入,作为first 2 部电影exit 本例中程序的output如下:

movie 1 is first 
movie 2 is exit
movie 3 is
movie 4 is

但是程序应该只显示输入的第一部电影。 我究竟做错了什么?

将输入的电影设置为临时变量。 仅当它不是您的退出条件时才添加它。

//Rest of the code left out for simplicity
Console.WriteLine("Enter movie name:");
string movie = Console.ReadLine();
if(movie.Equals("exit", StringComparison.OrdinalIgnoreCase)
    break;
else
    movies[i] = movie;  

您可以进行一些额外的改进,例如使用List 这样你就不需要管理大小和提示用户。

首先,让我们看看你有什么:在检查是否退出之前添加值。

此外,您可以通过忽略字母大小写进行比较(Broots Waymb 建议的答案)。

最后,您打印整个数组而不检查是否有一些值。

Console.WriteLine("Enter number of movies:");
int num1 = int.Parse(Console.ReadLine());
string[] movies = new string[num1];

for (i = 0; i < num1; i++)
 {
    Console.WriteLine("Enter movie name:");
    movies[i] = Console.ReadLine(); // you always add the value
    if(movies[i] == "Exit" || movies[i] == "exit") 
    {
      break;
    }
}
for (i = 0; i < num1; i++) // there is no condition to stop the iteration.
  Console.WriteLine("Movie {0} is {1}", i + 1, movies[i]);

为了解决打印问题,我们可以添加一个索引,该索引只有在输入电影时才会增加。 或者您可以使用列表或数组,然后使用 foreach 循环进行迭代。 另一种解决方案是保留数组但将其转换为打印任务列表的可能性。

Console.WriteLine("Enter number of movies:");
int num1 = int.Parse(Console.ReadLine());
string[] movies = new string[num1];
int enteredMovies = 0;

for (i = 0; i < num1; i++)
{
    Console.WriteLine("Enter movie name:");
    string movie = Console.ReadLine(); 

    if(movie.Equals("exit", StringComparison.OrdinalIgnoreCase)
    {
       break;
    }
    else
    {
       movies[i] = movie;
       enteredMovies++;

    }

}

for (i = 0; i < enteredMovies; i++)
{
    Console.WriteLine("Movie {0} is {1}", i + 1, movies[i]);
}

或者您可以使用我提到的列表。

使用List<T>可能比使用数组更容易,除非分配特别需要使用 arrays。 这将使用如下:

  1. 阅读电影数量
  2. 创建电影列表
  3. 循环电影的数量
    1. 从控制台读取一行并存储在一个临时变量中
    2. 检查临时变量是否等于退出
    3. 要么将临时变量添加到电影列表中,要么打破循环
  4. 现在电影列表应该包含所有输入的电影,不多也不少。

你有几个问题:

  • 您首先输入数据,然后检查它。
  • 您需要将输入转换为小写,这样无论用户输入exit, Exit, EXIT, ExIt您的程序都会终止。

您的代码可以改进,但由于您是初学者并且可能不知道高级的东西,我将保持原样:

using System;

public class Test
{ 

    public static void Main(String[] args)
    {
        Console.WriteLine("Enter number of movies:");
        int num1 = int.Parse(Console.ReadLine());
        string[] movies = new string[num1];

        for (int i = 0; i < num1; i++)
        {
            Console.WriteLine("Enter movie name:");
            String movie = Console.ReadLine();
            if (movie.ToLower() == "exit")
                break;
            else
                movies[i] = movie;
        }
        for (int i = 0; i < num1; i++)
            Console.WriteLine("Movie {0} is {1}", i + 1, movies[i]);
    }
}

谢谢大家的关注。 这是一个不错的社区。

我对每个答案都做了一点,并设法解决了这个问题。 我可以学到很多东西。

谢谢你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM