lecture de deux entiers sur une ligne en utilisant C#

je sais faire lire deux entiers à une console mais chaque entier par lui-même comme ceci

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

si j'ai entré deux nombres, I. e( 12), the value( 12), cant be parse to integers ce que je veux c'est que si j'entre 1 2 alors il le prendra comme deux entiers

26
demandé sur Nadeem 2010-10-07 16:56:00

12 réponses

une option serait d'accepter une seule ligne d'entrée comme chaîne de caractères et de la traiter ensuite. Par exemple:

//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]);

un problème avec cette approche est qu'elle échouera (en lançant un IndexOutOfRangeException/ FormatException) si l'utilisateur n'entre pas dans le texte dans le format attendu. Si cela est possible, vous devrez valider l'entrée.

Par exemple, avec des expressions régulières:

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
}

alternativement:

  1. Vérifier que l'entrée se divise en exactement 2 cordes.
  2. Utiliser int.TryParseessayer pour séparer les chaînes en nombres.
24
répondu Ani 2010-10-07 13:23:07

Vous avez besoin de quelque chose comme (pas de code de contrôle d'erreurs)

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

ceci lit une ligne, divise en espaces et parse les chaînes divisées en entiers. Évidemment, dans la réalité, vous voulez vérifier si les chaînes sont en fait valables entiers (int.TryParse).

6
répondu Frank 2010-10-07 13:07:04

alors vous devez d'abord le stocker dans une chaîne et ensuite le diviser en utilisant l'espace comme jeton.

5
répondu RvdK 2010-10-07 12:56:54

Lire la ligne en une chaîne, diviser la chaîne, puis analyser les éléments. Une version simple (qui nécessite une vérification des erreurs) serait:

string s = Console.ReadLine();
string[] values = s.Split(' ');
int a = int.Parse(values[0]);
int b = int.Parse(values[1]);
3
répondu Dan Puzey 2010-10-07 12:58:52
string[] values = Console.ReadLine().Split(' ');
int x = int.Parse(values[0]);
int y = int.Parse(values[1]);
2
répondu gusto 2016-06-06 10:07:46

en 1 ligne, grâce à LinQ et à l'expression régulière (pas de vérification de type nécessaire)

var numbers = from Match number in new Regex(@"\d+").Matches(Console.ReadLine())
                    select int.Parse(number.Value);
1
répondu iChaib 2010-10-08 10:23:01
string x;
int m;
int n;

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

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

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

Cela Devrait fonctionner selon votre besoin!

1
répondu Nishant 2013-06-29 10:33:06
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));
    }
}
1
répondu Raz Megrelidze 2014-02-05 19:26:19
int a, b;
string line = Console.ReadLine();
string[] numbers= line.Split(' ');
a = int.Parse(numbers[0]);
b = int.Parse(numbers[1]);
1
répondu TaGi Asadullazadeh 2016-06-06 10:08:49

essaye ceci:

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);
}

Espérons que cela aide:)

0
répondu Association 2017-01-25 13:53:29
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;
        }
    }
}
0
répondu Dhanapradap Myilswamy 2017-12-06 09:37:00

j'ai une solution beaucoup plus simple, utilisez une instruction switch et écrivez un message pour l'utilisateur dans chaque cas, en utilisant la Console.write() en commençant par un ("\n").

voici un exemple de remplissage d'un tableau avec une boucle for tout en prenant l'entrée de l'utilisateur. * Remarque: vous n'avez pas besoin d'écrire une boucle for pour que cela fonctionne* Essayez cet exemple avec un tableau entier appelé arrayOfNumbers[] et une variable entière temp. Exécutez ce code dans une application console séparée et regardez comment vous pouvez prendre la saisie de l'utilisateur sur la même ligne!

           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 

Le Tour de magie ici est que vous trompez l'application de la console, le secret est que vous prenez l'entrée de l'utilisateur sur la même ligne que vous écrivez votre message prompt. (message=>"Entrez le Premier Nombre: ")

cela donne l'impression que les entrées de l'utilisateur sont insérées sur la même ligne. J'admets qu'il est un peu primitif, mais il fait ce dont vous avez besoin sans avoir à perdre votre temps avec du code compliqué pour une tâche aussi simple.

0
répondu Coder992 2018-05-20 13:15:28