Какой будет лучший способ заполнить массив из пользовательского ввода?
Будет ли решение показывать быстрое сообщение, а затем получать значения от пользователя?
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);
}
Конечно, вам не обязательно делать дополнительный шаг по преобразованию в ints, но я подумал, что это может помочь показать, как вы.
Гораздо разумнее добавить это в качестве ответа на код Марина, чем продолжать делать это в комментариях...
Рассмотрите возможность использования десятичного вместо двойного. Скорее всего, это даст ответ, который ожидает пользователь. См. Http://pobox.com/~skeet/csharp/floatingpoint.html и http://pobox.com/~skeet/csharp/decimal.html по причинам, почему. В основном десятичное число работает намного ближе к тому, как люди думают о числах, чем двойное. Двойной работает больше как то, как компьютеры «естественно» думают о числах, поэтому это быстрее - но это здесь не актуально.
Для пользовательского ввода обычно стоит использовать метод, который не выдает исключения при плохом вводе - например,. decimal.TryParse и int.TryParse. Они возвращают логическое значение, чтобы сказать, удалось ли синтаксическому анализу, и используют параметр out
, чтобы дать результат. Если вы еще не начали изучать параметры «out», возможно, стоит игнорировать этот момент.
Это только маленький момент, но я думаю, что разумно иметь скобки вокруг всех тел "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!
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;
}
}
// 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();
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;
}
}
Добавьте входные значения в список < string > и когда вы закончите, используйте List < string >. ToArray (), чтобы получить массив со значениями.
конечно....Console.ReadLine всегда возвращает строку....так что вы должны преобразовать строку типа в двойную
array [i] = double.Parse (Console.ReadLine ()) ;
строка чтения для строки.. просто используйте читать