如何从用户输入C#填充数组

本文关键字:填充 数组 输入 用户 | 更新日期: 2023-09-27 17:48:52

根据用户输入填充数组的最佳方式是什么?

解决方案会显示一条提示消息,然后从用户那里获取值吗?

如何从用户输入C#填充数组

string []answer = new string[10];
for(int i = 0;i<answer.length;i++)
{
    answer[i]= Console.ReadLine();
}

你能稍微澄清一下这个问题吗?您是否试图从用户那里获得固定数量的答案?您希望使用哪种数据类型——文本、整数、浮点小数?这有很大的不同。

例如,如果你想要一个整数数组,你可以要求用户输入用空格或逗号分隔的整数,然后使用

string foo = Console.ReadLine();
string[] tokens = foo.Split(",");
List<int> nums = new List<int>();
int oneNum;
foreach(string s in tokens)
{
    if(Int32.TryParse(s, out oneNum))
        nums.Add(oneNum);
}

当然,你不一定要额外转换成int,但我认为这可能有助于展示你会如何转换。

将其添加到arin的代码中比在注释中继续这样做更有意义。。。

1) 考虑使用十进制而不是双精度。它更有可能给出用户期望的答案。看见http://pobox.com/~skeet/csharp/floatingpoint.html和http://pobox.com/~skeet/csharp/decimal.html,原因如下。基本上,十进制比double更接近于人类对数字的看法。Double的工作原理更像是计算机"自然"思考数字的方式,这就是它更快的原因——但这与此无关。

2) 对于用户输入,通常值得使用一种不会在错误输入时抛出异常的方法,例如十进制。TryParse和int.TryParse。它们返回一个布尔值来说明解析是否成功,并使用out参数来给出结果。如果您还没有开始学习out参数,那么可能值得暂时忽略这一点。

3) 这只是一点,但我认为明智的做法是在所有"for"/"if"(etc)身体周围都戴上背带,所以我会改变这个:

for (int counter = 0; counter < 6; counter++)
    Console.WriteLine("{0,5}{1,8}", counter, array[counter]);

到此:

for (int counter = 0; counter < 6; counter++)
{
    Console.WriteLine("{0,5}{1,8}", counter, array[counter]);
}

它使块更清晰,意味着你不会意外地写:

for (int counter = 0; counter < 6; counter++)
    Console.WriteLine("{0,5}{1,8}", counter, array[counter]);
    Console.WriteLine("----"); // This isn't part of the for loop!

4) 您的switch语句没有default大小写,因此,如果用户键入除"yes"或"no"以外的任何内容,它将忽略它们并退出。你可能想要这样的东西:

bool keepGoing = true;
while (keepGoing)
{
    switch (answer)
    {
        case "yes":
            Console.WriteLine("===============================================");
            Console.WriteLine("please enter the array index you wish to get the value of it");
            int index = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("===============================================");
            Console.WriteLine("The Value of the selected index is:");
            Console.WriteLine(array[index]);
            keepGoing = false;
            break;
        case "no":
            Console.WriteLine("===============================================");
            Console.WriteLine("HAVE A NICE DAY SIR");
            keepGoing = false;
            break;
        default:
            Console.WriteLine("Sorry, I didn't understand that. Please enter yes or no");
            break;
    }
}

5) 当你开始学习LINQ时,你可能想回到这一点,并替换你的for循环,它将输入相加为:

// Or decimal, of course, if you've made the earlier selected change
double sum = input.Sum();

同样,这是相当先进的-现在不要担心!

C#没有收集输入的消息框,但您可以使用Visual Basic输入框。

如果添加对"Microsoft Visual Basic.NET Runtime"的引用,然后插入:

using Microsoft.VisualBasic;

您可以执行以下操作:

List<string> responses = new List<string>();
string response = "";
while(!(response = Interaction.InputBox("Please enter your information",
                                        "Window Title",
                                        "Default Text",
                                        xPosition,
                                        yPosition)).equals(""))
{
   responses.Add(response);
}
responses.ToArray();

尝试:

array[i] = Convert.ToDouble(Console.Readline());

您可能还想使用double。TryParse()来确保用户没有输入伪造的文本,并以某种方式进行处理。

我已经完成了,最后检查一下,如果有更好的方法,告诉我伙计们

    static void Main()
    {
        double[] array = new double[6];
        Console.WriteLine("Please Sir Enter 6 Floating numbers");
        for (int i = 0; i < 6; i++)
        {
            array[i] = Convert.ToDouble(Console.ReadLine());
        }
        double sum = 0;
        foreach (double d in array)
        {
            sum += d;
        }
        double average = sum / 6;
        Console.WriteLine("===============================================");
        Console.WriteLine("The Values you've entered are");
        Console.WriteLine("{0}{1,8}", "index", "value");
        for (int counter = 0; counter < 6; counter++)
            Console.WriteLine("{0,5}{1,8}", counter, array[counter]);
        Console.WriteLine("===============================================");
        Console.WriteLine("The average is ;");
        Console.WriteLine(average);
        Console.WriteLine("===============================================");
        Console.WriteLine("would you like to search for a certain elemnt ? (enter yes or no)");
        string answer = Console.ReadLine();
        switch (answer)
        {
            case "yes":
                Console.WriteLine("===============================================");
                Console.WriteLine("please enter the array index you wish to get the value of it");
                int index = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("===============================================");
                Console.WriteLine("The Value of the selected index is:");
                Console.WriteLine(array[index]);
                break;
            case "no":
                Console.WriteLine("===============================================");
                Console.WriteLine("HAVE A NICE DAY SIR");
                break;
        }
    }

将输入值添加到List中,完成后使用List.ToArray()获得一个包含值的数组。

当然。。。。Console.ReadLine始终返回字符串。。。。所以你必须将类型字符串转换为双

array[i]=double.Parse(Console.ReadLine());

readline用于字符串。。只需使用读取