【问题标题】:How to input in an integer array如何输入整数数组
【发布时间】:2014-07-22 19:48:50
【问题描述】:

如何在 C# 中输入数组?

我编写了一个无法正常工作的代码。例如,如果我输入 1,那么它会给出输出 49。

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

namespace Google
{
    class Program
    {
        static void Main(string[] args)
        {
            int n;
            int[] array=new int[26];
            Console.Write("Enter number of cases : ");
            n = Console.Read();
            for (int i = 0; i < n; i++)
            {
                array[i] = Console.Read();
                Console.WriteLine( array[i]);
            }
            Console.Read();
        }  
    }
}

【问题讨论】:

  • 调试器告诉你什么?
  • 让我看看我是否正确理解了您的问题,您是否正在尝试将命令提示符的输入存储到数组中?
  • +1 表示他是个菜鸟并提出了一个很好的问题。接下来开始了解Debugging an application
  • 我并不是说不要帮助这个人,但这种类型的问题通常会被标记。我想 SO 有时会变得多愁善感。

标签: c#


【解决方案1】:

Console.Read 返回字符代码,而不是您输入的数字。

改用int.Parse(Console.ReadLine())

n = int.Parse(Console.ReadLine());
//...
array[i] = int.Parse(Console.ReadLine());

【讨论】:

    【解决方案2】:

    49 是正确的。此数字用于字符“1”的 ascii 值 来源(http://www.asciitable.com/)

    您需要为您的 int 包含一个解析器。

    正如 Selman22 所说:

    array[i] = int.Parse(Console.ReadLine());
    

    会为你工作。

    【讨论】:

      【解决方案3】:

      大多数竞争性编程都将内联整数输入作为输入数组。 在这种情况下,控制台输入可以这样做:

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.Threading.Tasks;
      using System.Collections;
      
      namespace CSharp
      {
          class Program
          {
              static void Main(string[] args)
              {
      
                  int n;
                  n =Int32.Parse(Console.ReadLine());
                  int[] arr = new int[n];
                  string[] s = Console.ReadLine().Split(' ');
      
                  for (int i= 0;i< n;i++)
                  {
                      arr[i] = Int32.Parse(s[i]);
                  }
                  Console.WriteLine(n);
                  foreach (var item in arr)
                  {
                      Console.Write(item+" ");
                  }
              }
          }
      }
      

      【讨论】:

        【解决方案4】:
        arr = Array.ConvertAll(Console.ReadLine().Trim().Split(' '),Convert.ToInt32);
        

        【讨论】:

        • 嗨,欢迎来到 Stack Overflow。请edit你的答案解释代码。谢谢!
        • 这就是我想要的。谢谢
        【解决方案5】:

        Console.Read 方法从输入流中获取下一个字符,并将其转换为整数值,即字符的ASCII 值。你想要Console.ReadLine

        array[i] = int.Parse(Console.ReadLine());
        

        如果您想验证用户的输入,请使用int.TryParse


        顺便说一句,如果您只想获取从 09 的数字(可能您不这样做),则可以使用 Read 方法完成,但代码看起来很难看:

         array[i] = int.Parse(((char)Console.Read()).ToString());
        

        【讨论】:

        • 另一种丑陋的做法:(int)char.GetNumericValue((char)Console.Read())
        • 一种骇人听闻的方法:Console.Read() - '0'
        【解决方案6】:

        一个班轮解决方案:

        var array = Console.ReadLine().Split().Select(int.Parse).ToArray();
        

        说明

        array 将是从控制台输入读取的整数数组,在一行中以空格分隔。

        示例输入:“1 2 3 4 5”。

        【讨论】:

          【解决方案7】:

          您正在读取一个字符,而不是一个数字,在您的情况下,它返回的 ASCII 值是 1,即 49。您应该使用正确的解析函数,例如 Int32.Parse(Console.ReadLine())。

          【讨论】:

            【解决方案8】:

            1 遇到 49 应该是您的提示。 49 是字符“1”的 ASCII 值。

            所以发生的事情是,您的 Console.Read() 调用返回了一个 char,该 char 被隐式​​转换为整数到您的整数数组中。

            您可能实际上希望用户输入一个数字并按回车键。因此,您最好使用Console.ReadLine(),然后在从中获得的字符串上使用 int.TryParse。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-04-11
              • 2015-02-24
              • 2019-04-15
              • 1970-01-01
              • 2014-08-22
              • 2012-01-01
              相关资源
              最近更新 更多