从用户读取整数数组,用C#

时间:2015-09-16 13:55:44

标签: c# space separator

我被要求解决C#中的一个问题,从控制台获取'n'个用户输入的总和,用空格分隔一行。

int n = Convert.ToInt32(Console.ReadLine());
int[] arr = new int[n];
int sum = 0;
for(int i = 0; i < n; i++) {
   arr[i] = Convert.ToInt32(Console.ReadLine());
   sum += arr[i];
}
Console.WriteLine("{0}",sum);

如何修改此代码以获取空间分隔输入的预期输出? 这些值也需要存储在数组中。

输入:

5

1 2 3 4 5

输出:

15

5 个答案:

答案 0 :(得分:4)

I am working in Visual Studio 2015

您当然必须根据需要处理任何不良用户输入。

根据您增加的要求:

int result = Console.ReadLine().Split().Select(int.Parse).Sum();

答案 1 :(得分:3)

你可以这样做:

int result = input.Split(' ').Take(n).Select(int.Parse).Sum();

但在我看来,你可以避免向用户询问计数,并将他们输入的所有行加在一起:

string input = Console.ReadLine();
int result = input.Split(' ').Select(int.Parse).Sum();
Console.WriteLine(result);

(请注意,此代码不会进行错误检查。)

编辑:似乎你想拥有一组int。在这种情况下,您可以这样做(再次,没有错误检查):

using System;
using System.Linq;

namespace Demo
{
    internal class Program
    {
        private static void Main()
        {
            int n = int.Parse(Console.ReadLine());
            int[] arr = Console.ReadLine().Split(' ').Take(n).Select(int.Parse).ToArray();
            int sum = arr.Sum();

            Console.WriteLine("{0}", sum);
        }
    }
}

答案 2 :(得分:0)

您需要在C#中使用split函数。当你读到这一行时,你会得到整行。这意味着您试图说&#34; sum = 0加上Convert.ToInt32(&#39; 5 1 2 3 4 5&#39;)&#34;哪个不起作用。

你需要一个等于的整数数组     Console.ReadLine()。分割(&#34;&#34;);

String.Split函数: https://msdn.microsoft.com/en-us/library/b873y76a.aspx

答案 3 :(得分:0)

在循环内使用arr [i] = Convert.ToInt32(Console.ReadLine())将导致程序在不同的行而不是单行上进行输入。 您可以做的是将输入作为字符串,然后根据空间进行拆分,从而生成一个输入值的数组。然后你可以将它们相加

答案 4 :(得分:0)

考虑到Naveen似乎是学生的事实,我认为更多的代码可以更好地解释,让他从这个练习中学到更多:

我制作了一个样本,用空格或输入分隔一些数字,当用户输入T时,使用循环并使用Linq以传统方式计算总和。我确信有很多更好的方法可以做同样的事情,但也许更结构化的东西可以更好地开始理解C#。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SumTheNumbers
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("Insert the numbers separated by a space or [Enter]> key, when finished write T and press [Enter] and you will have the result");
            List<int> values = new List<int>();
            while (true)
            {
                string inputData = Console.ReadLine();
                if (inputData.ToUpper().StartsWith("T")) break;
                string[] svals = inputData.Split(' ');

                for (int i = 0; i < svals.Length; i++)
                {
                    int x = 0;
                    int.TryParse(svals[i], out x);
                    if (x != 0) values.Add(x);
                }



            }

            //Traditional mode
            int total = 0;
            for (int i = 0; i < values.Count; i++)
            {
                total = total + values[i];
            }

            //Linq mode

            int totalLinq = values.Sum();

            Console.WriteLine("The sum is");
            Console.Write("Total: ");
            Console.WriteLine(total.ToString());
            Console.Write("Total linq: ");
            Console.WriteLine(totalLinq.ToString());
            Console.WriteLine("Press a key to end...");
            Console.ReadKey();

        }
    }
}