C# 如何将值从控制台单独分配给数组

C# 如何将值从控制台单独分配给数组,c#,C#,我正在制作一个程序,不断提示用户输入数字,然后将数字存储在一个数组中,直到用户提供一个给定的响应(例如“continue”),然后程序在终端中显示该数组 我一直在调试我的程序,它正在将数组中的所有值设置为控制台输入的最后一个值 我如何才能阻止计数器一直到该数组的最大值,而是一步一步地遍历数组,每次都从控制台输入一个新值 for (int i = 0; i < inputArray.GetLength(0); i++) inputArray[i] = Convert.ToDouble(inp

我正在制作一个程序,不断提示用户输入数字,然后将数字存储在一个数组中,直到用户提供一个给定的响应(例如“continue”),然后程序在终端中显示该数组

我一直在调试我的程序,它正在将数组中的所有值设置为控制台输入的最后一个值

我如何才能阻止计数器一直到该数组的最大值,而是一步一步地遍历数组,每次都从控制台输入一个新值

for (int i = 0; i < inputArray.GetLength(0); i++)
inputArray[i] = Convert.ToDouble(input);
goto STARTOVER;
for(inti=0;i
这是我的主要代码:

using System;

namespace Task3
{
    class MainClass
{
    public static void Main(string[] args)
    {
        double[] inputArray = new double[40];

        Console.WriteLine("Begin");
        while (true)
        {
            STARTOVER:
            var input = Console.ReadLine();
            if (input.Equals("exit", StringComparison.OrdinalIgnoreCase))
            {
                break;
            }

            if (input.Equals("continue",StringComparison.OrdinalIgnoreCase))
            {
                goto DISPLAY;
            }

            else 
            {
                    for (int i = 0; i < inputArray.GetLength(0); i++)
                    inputArray[i] = Convert.ToDouble(input);
                    goto STARTOVER;
            }

        }
        DISPLAY:
        for (int i = 0; i < inputArray.GetLength(0); i++)
        {
            Console.Write("{0} ", inputArray[i]);
            Console.WriteLine();
        }

    }
}
}
使用系统;
命名空间任务3
{
类主类
{
公共静态void Main(字符串[]args)
{
double[]输入阵列=新的double[40];
控制台写入线(“开始”);
while(true)
{
开始日期:
var input=Console.ReadLine();
if(input.Equals(“exit”,StringComparison.OrdinalIgnoreCase))
{
打破
}
if(input.Equals(“continue”,StringComparison.OrdinalIgnoreCase))
{
转到显示;
}
其他的
{
for(int i=0;i

根据我的理解,我不应该在可能的情况下使用goto,但我找不到其他方法让程序返回到“STARTOVER:”的位置。

除了
goto
,这是非常糟糕的,问题是代码在每个条目上循环通过整个数组。它需要一个整数变量,该变量从0开始,随着每个新输入而递增,因此每次只能设置该位置

public static void Main(string[] args)
{
    Console.WriteLine("Begin");
    double[] inputArray = new double[40];

    int inputCount = 0;      
    var input = Console.ReadLine();

    while (!input.Equals("exit", StringComparison.OrdinalIgnoreCase) 
        && !input.Equals("continue", StringComparison.OrdinalIgnoreCase)
        && inputCount < inputArray.Length)
    {
        inputArray[inputCount++] = Convert.ToDouble(input);  
        input = Console.ReadLine();       
    }

    for (int i = 0; i < inputCount; i++)
    {
        Console.Write("{0} ", inputArray[i]);
        Console.WriteLine();
    }
}
publicstaticvoidmain(字符串[]args)
{
控制台写入线(“开始”);
double[]输入阵列=新的double[40];
int inputCount=0;
var input=Console.ReadLine();
而(!input.Equals(“exit”,StringComparison.OrdinalIgnoreCase)
&&!input.Equals(“continue”,StringComparison.OrdinalIgnoreCase)
&&inputCount
最好使用列表:

public static void Main(string[] args)
{
    Console.WriteLine("Begin");
    var data = new List<double>;
    var input = Console.ReadLine();

    while (!input.Equals("exit", StringComparison.OrdinalIgnoreCase) 
        && !input.Equals("continue", StringComparison.OrdinalIgnoreCase))
    {
        data.Add(double.Parse((input));
        input = Console.ReadLine();       
    }

    for (double d in data)
    {
        Console.WriteLine(d);
    }
}
publicstaticvoidmain(字符串[]args)
{
控制台写入线(“开始”);
var数据=新列表;
var input=Console.ReadLine();
而(!input.Equals(“exit”,StringComparison.OrdinalIgnoreCase)
&&!input.Equals(“continue”,StringComparison.ordinallingorecase))
{
data.Add(double.Parse((输入));
input=Console.ReadLine();
}
用于(数据中的双d)
{
控制台写入线(d);
}
}

在满足条件时重复请求输入的关键是使用while循环

while(CurrentCondition != PassCondition)
{
   //do something, in this case ask for user input
}
一个好主意是创建方法,并在goto方法所在的位置调用这些方法,例如

    public static double[] inputArray = new double[40];
    public static string input;
    public static int idx = 0;

    static void Main(string[] args)
    {
        GetInput();
        Console.Read();
    }

    public static void GetInput()
    {
        Console.Write("enter a number to add to the array or 'continue' to display the array: ");
        input = Console.ReadLine();

        while (!CheckInput(input))
        {
            Console.Write("enter a number to add to the array or 'continue' to display the array: ");
            input = Console.ReadLine();
        }
    }

    public static bool CheckInput(string _input)
    {
        bool Continue = false;

        if (input == "continue")
        {
            PrintArray();
            Continue = true;
        }

        else
        {
            inputArray[idx] = double.Parse(_input);
            idx++;
            Continue = false;
        }

        return Continue;
    }

    public static void PrintArray()
    {
        for(int i = 0; i < inputArray.Length - 1; i++)
        {
            Console.WriteLine(inputArray[i]);
        }
    }
}
publicstaticdouble[]inputArray=newdouble[40];
公共静态字符串输入;
公共静态int idx=0;
静态void Main(字符串[]参数)
{
GetInput();
Console.Read();
}
公共静态void GetInput()
{
Write(“输入要添加到数组中的数字或“继续”显示数组:”);
input=Console.ReadLine();
而(!检查输入(输入))
{
Write(“输入要添加到数组中的数字或“继续”显示数组:”);
input=Console.ReadLine();
}
}
公共静态bool CheckInput(字符串输入)
{
bool Continue=false;
如果(输入=“继续”)
{
PrintArray();
继续=真;
}
其他的
{
inputArray[idx]=double.Parse(_input);
idx++;
Continue=false;
}
继续返回;
}
公共静态void printary()
{
for(inti=0;i
您不需要任何一个
goto
s。一旦
else
块结束,当条件为真时,
while
循环将重复。您可以使用
break
关键字中断循环,就像您在第一个
if
块中所做的那样,因此没有理由在中显示
goto;
语句第二个
if
(事实上,它们可以组合成一个
if
)。顺便说一句,如果你用调试器一步一步地调试你的代码,那么很容易了解这些东西是如何工作的。@Nacimota这是有道理的,我在过去几周一直在学习c#,所以仍然习惯于这些东西。我会记住这一点,下次再进行调试。