如何打破循环并排除 C# 中的最后一个输入?
How can I break the loop and exclude the last input in C#?
我必须编写一个代码,询问用户将输入多少部电影。输入电影数量后,应要求用户提供电影名称。所有名称都将添加到数组 movies
。如果用户输入 "Exit",程序应该停止并显示用户已经输入的电影。
我写了这段代码:
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 部电影,输入 first
作为第一部电影,输入 exit
作为第二部电影。本例中程序的输出如下:
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
。这样您就不需要管理大小并提示用户。
使用 List<T>
可能比使用数组更容易,除非赋值特别要求使用数组。这将使用如下内容:
- 读取电影数量
- 创建电影列表
- 循环电影数量
- 从控制台读取一行并存储在临时变量中
- 检查临时变量是否等于exit
- 要么将临时变量添加到电影列表,要么打破循环
- 现在电影列表应该包含所有输入的电影,不多也不少。
您有几个问题:
- 您是先输入数据再检查。
- 您需要将输入转换为小写,这样无论用户是否输入
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]);
}
}
首先,让我们看看您有什么:在检查是否退出之前添加值。
此外,您可以忽略字母大小写进行比较(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]);
}
或者您可以像我提到的那样使用列表。
谢谢大家的关注。
这是一个不错的社区。
我从每个答案中抽取了一点点,并设法解决了这个问题。
我可以学到很多。
谢谢
我必须编写一个代码,询问用户将输入多少部电影。输入电影数量后,应要求用户提供电影名称。所有名称都将添加到数组 movies
。如果用户输入 "Exit",程序应该停止并显示用户已经输入的电影。
我写了这段代码:
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 部电影,输入 first
作为第一部电影,输入 exit
作为第二部电影。本例中程序的输出如下:
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
。这样您就不需要管理大小并提示用户。
使用 List<T>
可能比使用数组更容易,除非赋值特别要求使用数组。这将使用如下内容:
- 读取电影数量
- 创建电影列表
- 循环电影数量
- 从控制台读取一行并存储在临时变量中
- 检查临时变量是否等于exit
- 要么将临时变量添加到电影列表,要么打破循环
- 现在电影列表应该包含所有输入的电影,不多也不少。
您有几个问题:
- 您是先输入数据再检查。
- 您需要将输入转换为小写,这样无论用户是否输入
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]);
}
}
首先,让我们看看您有什么:在检查是否退出之前添加值。
此外,您可以忽略字母大小写进行比较(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]);
}
或者您可以像我提到的那样使用列表。
谢谢大家的关注。 这是一个不错的社区。
我从每个答案中抽取了一点点,并设法解决了这个问题。 我可以学到很多。
谢谢