所以我刚开始,我正在创建一个控制台程序,用户将在其中输入一个int。在输入“ ok”之前,它应该继续要求一个int值。当他们输入“确定”时,应该将他们输入的所有数字加起来。
我遇到的问题是,当它要求用户输入时,我输入一个数字并按Enter键。然后它将移至下一行并再次等待输入。在下一行输入数字可以使程序继续运行。如何获得程序以获取第一个输入并从那里继续?
下面的代码,希望我的问题有意义。
class Program
{
static void Main(string[] args)
{
bool tag = true;
List<int> numbers = new List<int>();
while (tag == true)
{
Console.Write("Please enter a number or 'ok' to end: ");
if (Console.ReadLine().Equals("ok"))
{
tag = false;
}
else
{
int numb = Int32.Parse(Console.ReadLine());
numbers.Add(numb);
}
}
int total = 0;
foreach (int n in numbers)
{
total = total + n;
}
Console.WriteLine("All numbers added together equals: " + total);
}
}
您应该从控制台每次迭代只读取一次。
//[...]
while (tag == true)
{
Console.Write("Please enter a number or 'ok' to end: ");
var input = Console.ReadLine();
if (input.Equals("ok"))
{
tag = false;
}
else
{
int numb = Int32.Parse(input);
numbers.Add(numb);
}
}
//[...]
每次调用Console.ReadLine
时,用户都必须输入输入-因为您将其调用一次以与“ Ok”进行比较,然后再次进行解析,则用户必须输入一个数字两次。
如果使用输入作为循环条件,您甚至可以更进一步忽略tag
变量:
var input = "";
var numbers = new List<int>();
while((input = Console.ReadLine()) != "ok")
{
numbers.Add(int.Parse(input));
}
如果用户输入的内容既不是“确定”也不是有效的整数,则所有这些操作都不会出错。为此,您应该看看int32.TryParse
。
因此,当我完成我的回答时,已经有一个指出问题的答案(多次从控制台读取而不是将结果存储在变量中)。我还是决定发布代码,这样您就可以看到另一种对您有效的方法(不存储所有数字):
int32.TryParse