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

Чтение двух целых чисел в одной строке с использованием С#

Я знаю, как сделать консоль, прочитав два целых числа, но каждый из них будет таким же, как это

int a = int.Parse(Console.ReadLine());
int b = int.Parse(Console.ReadLine());

если я ввел два числа, то есть (1 2), значение (1 2), не может быть разбор целых чисел что я хочу, если я ввел 1 2, тогда он примет это как два целых числа

4b9b3361

Ответ 1

Один из вариантов - принять одну строку ввода в виде строки, а затем обработать ее. Например:

//Read line, and split it by whitespace into an array of strings
string[] tokens = Console.ReadLine().Split();

//Parse element 0
int a = int.Parse(tokens[0]);

//Parse element 1
int b = int.Parse(tokens[1]);

Одной из проблем с этим подходом является то, что он не сработает (путем выброса IndexOutOfRangeException/FormatException), если пользователь не вводит текст в ожидаемом формате. Если это возможно, вам нужно будет подтвердить ввод.

Например, с регулярными выражениями:

string line = Console.ReadLine();

// If the line consists of a sequence of digits, followed by whitespaces,
// followed by another sequence of digits (doesn't handle overflows)
if(new Regex(@"^\d+\s+\d+$").IsMatch(line))
{
   ...   // Valid: process input
}
else
{
   ...   // Invalid input
}

Альтернативно:

  • Убедитесь, что вход разбит на ровно 2 строки.
  • Используйте int.TryParse, чтобы попытаться разобрать строки на числа.

Ответ 2

Вам нужно что-то вроде (без кода проверки ошибок)

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

Это считывает строку, разбивается на пробелы и анализирует разделенные строки как целые числа. Конечно, в действительности вы хотели бы проверить, действительно ли введенные строки являются действительными целыми числами (int.TryParse).

Ответ 3

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

Ответ 4

Прочитайте строку в строке, разделите строку и затем проанализируйте элементы. Простой вариант (который должен содержать проверку ошибок, добавленный к нему):

string s = Console.ReadLine();
string[] values = s.Split(' ');
int a = int.Parse(values[0]);
int b = int.Parse(values[1]);

Ответ 5

string[] values = Console.ReadLine().Split(' ');
int x = int.Parse(values[0]);
int y = int.Parse(values[1]);

Ответ 6

в 1 строке, благодаря LinQ и регулярному выражению (без проверки типов)

var numbers = from Match number in new Regex(@"\d+").Matches(Console.ReadLine())
                    select int.Parse(number.Value);

Ответ 7

string x;
int m;
int n;

Console.WriteLine("Enter two no seperated by space: ");

x = Console.ReadLine();
m = Convert.ToInt32(x.Split(' ')[0]);
n = Convert.ToInt32(x.Split(' ')[1]);

Console.WriteLine("" + m + " " + n);

Это должно работать согласно вашей потребности!

Ответ 8

public static class ConsoleInput
{
    public static IEnumerable<int> ReadInts()
    {
        return SplitInput(Console.ReadLine()).Select(int.Parse);
    }

    private static IEnumerable<string> SplitInput(string input)
    {
        return Regex.Split(input, @"\s+")
                    .Where(x => !string.IsNullOrWhiteSpace(x));
    }
}

Ответ 9

int a, b;
string line = Console.ReadLine();
string[] numbers= line.Split(' ');
a = int.Parse(numbers[0]);
b = int.Parse(numbers[1]);

Ответ 10

Попробуйте следующее:

string numbers= Console.ReadLine();

string[] myNumbers = numbers.Split(' ');

int[] myInts = new int[myNumbers.Length];

for (int i = 0; i<myInts.Length; i++)
{
    string myString=myNumbers[i].Trim();
    myInts[i] = int.Parse(myString);
}

Надеюсь, это поможет:)

Ответ 11

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

namespace SortInSubSet
{
    class Program
    {

        static int N, K;
        static Dictionary<int, int> dicElements = new Dictionary<int, int>();
        static void Main(string[] args)
        {

            while (!ReadNK())
            {
                Console.WriteLine("***************** PLEASE RETRY*********************");
            }

            var sortedDict = from entry in dicElements orderby entry.Key/3 , entry.Value ascending select entry.Value;

            foreach (int ele in sortedDict)
            {
                Console.Write(ele.ToString() + "  ");
            }

            Console.ReadKey();
        }

        static bool ReadNK()
        {
            dicElements = new Dictionary<int, int>();
            Console.WriteLine("Please entere the No. of element 'N' ( Between 2 and 9999) and Subset Size 'K' Separated by space.");

            string[] NK = Console.ReadLine().Split();

            if (NK.Length != 2)
            {
                Console.WriteLine("Please enter N and K values correctly.");
                return false;
            }

            if (int.TryParse(NK[0], out N))
            {
                if (N < 2 || N > 9999)
                {
                    Console.WriteLine("Value of 'N' Should be Between 2 and 9999.");
                    return false;
                }
            }
            else
            {
                Console.WriteLine("Invalid number: Value of 'N' Should be greater than 1 and lessthan 10000.");
                return false;
            }

            if (int.TryParse(NK[1], out K))
            {
                Console.WriteLine("Enter all elements Separated by space.");
                string[] kElements = Console.ReadLine().Split();

                for (int i = 0; i < kElements.Length; i++)
                {
                    int ele;

                    if (int.TryParse(kElements[i], out ele))
                    {
                        if (ele < -99999 || ele > 99999)
                        {
                            Console.WriteLine("Invalid Range( " + kElements[i] + "): Element value should be Between -99999 and 99999.");
                            return false;
                        }

                        dicElements.Add(i, ele);
                    }
                    else
                    {
                        Console.WriteLine("Invalid number( " + kElements[i] + "): Element value should be Between -99999 and 99999.");
                        return false;
                    }

                }

            }
            else
            {
                Console.WriteLine(" Invalid number ,Value of 'K'.");
                return false;
            }


            return true;
        }
    }
}

Ответ 12

У меня гораздо более простое решение, используйте оператор switch и пишите сообщение для пользователя в каждом случае, используя Console.write(), начиная с ("\n").

Здесь приведен пример заполнения массива с циклом for при вводе пользователя. * Примечание: вам не нужно писать цикл for для этого. * Попробуйте этот пример с целым массивом с именем arrayOfNumbers [] и переменной integer temp. Запустите этот код в отдельном консольном приложении и посмотрите, как вы можете вводить данные пользователя в одной строке!

           int temp=0;
           int[] arrayOfNumbers = new int[5];

        for (int i = 0; i < arrayOfNumbers.Length; i++)
            {
      switch (i + 1)
                {
                    case 1:
                        Console.Write("\nEnter First number: ");
                        //notice the "\n" at the start of the string        
                        break;
                    case 2:
                        Console.Write("\nEnter Second number: ");
                        break;
                    case 3:
                        Console.Write("\nEnter Third number: ");
                        break;
                    case 4:
                        Console.Write("\nEnter Fourth number: ");
                        break;
                    case 5:
                        Console.Write("\nEnter Fifth number: ");
                        break;


                    } // end of switch

                    temp = Int32.Parse(Console.ReadLine()); // convert 
                    arrayOfNumbers[i] = temp; // filling the array
                    }// end of for loop 

Магический трюк здесь заключается в том, что вы обманываете консольное приложение, секрет в том, что вы вводите пользовательский ввод в той же строке, на которой вы пишете свое приглашение. (сообщение => "Введите первый номер:")

Это приводит к тому, что пользовательский ввод выглядит как вставленный в ту же строку. Я признаю это немного примитивным, но он делает то, что вам нужно, не тратя время на сложный код для такой простой задачи.