如何从用户输入C#填充数组
本文关键字:填充 数组 输入 用户 | 更新日期: 2023-09-27 17:48:52
根据用户输入填充数组的最佳方式是什么?
解决方案会显示一条提示消息,然后从用户那里获取值吗?
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用于字符串。。只需使用读取