Подтвердить что ты не робот

Как заполнить массив из пользовательского ввода С#?

Каким будет лучший способ заполнить массив из пользовательского ввода?

Будет ли решение показывать подсказку, а затем получать значения от пользователя?

4b9b3361

Ответ 1

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

Ответ 2

Не могли бы вы немного уточнить вопрос? Вы пытаетесь получить фиксированное количество ответов от пользователя? Какой тип данных вы ожидаете - текст, целые числа, десятичные числа с плавающей запятой? Это имеет большое значение.

Если вы хотите, например, массив целых чисел, вы можете попросить пользователя ввести их в разделенные пробелами или запятыми, а затем использовать

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

Конечно, вам необязательно идти на дополнительный шаг конвертации в ints, но я думал, что это может помочь показать, как вы это сделали.

Ответ 3

Было гораздо больше смысла добавить это как ответ на код арина, чем продолжать делать это в комментариях...

1) Рассмотрим использование десятичного числа вместо двойного. Это скорее даст ответ, который ожидает пользователь. См. http://pobox.com/~skeet/csharp/floatingpoint.html и http://pobox.com/~skeet/csharp/decimal.html по причинам Зачем. В принципе десятичное значение намного ближе к тому, как люди думают о цифрах, чем двойное. Двойное поведение больше похоже на то, как компьютеры "естественно" думают о числах, поэтому он быстрее - но это не имеет значения здесь.

2) Для ввода пользователем обычно стоит использовать метод, который не генерирует исключение при плохом вводе - например, decimal.TryParse и int.TryParse. Они возвращают логическое значение, чтобы сказать, удалось ли выполнить синтаксический анализ, и использовать параметр out, чтобы дать результат. Если вы еще не начали изучать параметры out, возможно, стоит проигнорировать этот момент на данный момент.

3) Это всего лишь небольшая точка, но я думаю, что было бы разумно иметь привязки вокруг всех "для" / "если" (и т.д.) тел, поэтому я бы изменил это:

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, поэтому, если пользователь набирает что-либо, кроме "да" или "нет", он просто игнорирует их и завершает работу. Возможно, вы захотите иметь что-то вроде:

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

Опять же, это довольно продвинутый вариант - не беспокойтесь об этом сейчас!

Ответ 4

С# не имеет окна сообщений, которое будет собирать ввод, но вы можете использовать поле ввода 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();

Ответ 5

Try:

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

Вы также можете использовать double.TryParse(), чтобы убедиться, что пользователь не ввел фиктивный текст и каким-то образом его обработал.

Ответ 6

Я сделал это окончательно, проверьте его, и если есть лучший способ сказать мне, ребята

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

Ответ 7

Добавьте входные значения в список, и когда вы закончите, используйте List.ToArray(), чтобы получить массив со значениями.

Ответ 8

конечно.... Console.ReadLine всегда возвращает строку.... так что вам нужно преобразовать строку типа в double

массив [I] = double.Parse(Console.ReadLine());

Ответ 9

readline для строки. просто используйте read