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

时间:2008-10-23 16:37:24

标签: c#

从用户输入填充数组的最佳方法是什么?

解决方案是否会显示提示消息,然后从用户处获取值?

9 个答案:

答案 0 :(得分:43)

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

答案 1 :(得分:5)

你可以澄清一下这个问题吗?您是否尝试从用户那里获得固定数量的答案?您期望什么数据类型 - 文本,整数,浮点十进制数?这会产生很大的不同。

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

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);
}

当然,你不一定要采取额外的步骤转换为整数,但我认为这可能有助于展示你的意愿。

答案 2 :(得分:4)

将此作为arin's code的答案添加比在评论中继续这样做更有意义......

1)考虑使用decimal而不是double。它更有可能给出用户期望的答案。有关原因,请参阅http://pobox.com/~skeet/csharp/floatingpoint.htmlhttp://pobox.com/~skeet/csharp/decimal.html。基本上十进制的工作更接近于人类对数字的看法,而不是双重数字。 Double更像是计算机“自然地”思考数字的原因,这就是为什么它更快 - 但这与此无关。

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

3)这只是一点点,但我认为围绕所有“for”/“if”(等)身体进行括号是明智的,所以我要改变这一点:

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();

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

答案 3 :(得分:2)

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();

答案 4 :(得分:2)

尝试:

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

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

答案 5 :(得分:1)

我已经完成了最终检查,如果有更好的方式告诉我们

    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;
        }
    }

答案 6 :(得分:0)

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

答案 7 :(得分:0)

当然.... Console.ReadLine总是返回字符串....所以你必须将类型字符串转换为double

阵列[I] = double.Parse(到Console.ReadLine());

答案 8 :(得分:0)

readline用于字符串.. 只需使用阅读