lire deux nombres entiers dans une ligne en utilisant C #

Je sais comment faire une console lire deux entiers, mais chaque entier par lui-même comme ça

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

si j’ai entré deux nombres, c’est-à-dire (1 2), la valeur (1 2), ne peut pas être analysé en nombres entiers ce que je veux, c’est que si j’ai entré 1 2, il le prendra comme deux entiers

Une option serait d’accepter une seule ligne d’entrée sous forme de chaîne, puis de la traiter. Par exemple:

 //Read line, and split it by whitespace into an array of ssortingngs ssortingng[] 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 une IndexOutOfRangeException / FormatException ) si l’utilisateur n’entre pas le texte dans le format attendu. Si cela est possible, vous devrez valider la saisie.

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

 ssortingng 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érifiez que l’entrée se divise en exactement 2 chaînes.
  2. Utilisez int.TryParse pour tenter d’parsingr les chaînes en nombres.

Vous avez besoin de quelque chose comme (pas de code de vérification d’erreur)

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

Cela lit une ligne, sépare les espaces et parsing les chaînes en tant qu’entiers. Bien sûr, en réalité, vous voudrez vérifier si les chaînes entrées sont bien des entiers valides (int.TryParse).

Ensuite, vous devriez d’abord le stocker dans une chaîne, puis le séparer en utilisant l’espace en tant que jeton.

Lisez la ligne dans une chaîne, scindez-la, puis parsingz les éléments. Une version simple (à laquelle une vérification d’erreur doit être ajoutée) serait:

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

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

 var numbers = from Match number in new Regex(@"\d+").Matches(Console.ReadLine()) select int.Parse(number.Value); 
 ssortingng 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 vos besoins!

 public static class ConsoleInput { public static IEnumerable ReadInts() { return SplitInput(Console.ReadLine()).Select(int.Parse); } private static IEnumerable SplitInput(ssortingng input) { return Regex.Split(input, @"\s+") .Where(x => !ssortingng.IsNullOrWhiteSpace(x)); } } 
 int a, b; ssortingng line = Console.ReadLine(); ssortingng[] numbers= line.Split(' '); a = int.Parse(numbers[0]); b = int.Parse(numbers[1]); 

Essaye ça:

 ssortingng numbers= Console.ReadLine(); ssortingng[] myNumbers = numbers.Split(' '); int[] myInts = new int[myNumbers.Length]; for (int i = 0; i 

J'espère que ça aide:)

 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SortInSubSet { class Program { static int N, K; static Dictionary dicElements = new Dictionary(); static void Main(ssortingng[] 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.ToSsortingng() + " "); } Console.ReadKey(); } static bool ReadNK() { dicElements = new Dictionary(); Console.WriteLine("Please entere the No. of element 'N' ( Between 2 and 9999) and Subset Size 'K' Separated by space."); ssortingng[] 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."); ssortingng[] 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; } } } 

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

Voici un exemple de remplissage d’un tableau avec une boucle for en tenant compte des entrées 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 temporaire. Exécutez ce code dans une application de console séparée et observez comment vous pouvez utiliser les entrées 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 est de tromper l’application de la console. Le secret est que vous saisissez les entrées des utilisateurs sur la même ligne que celle sur laquelle vous écrivez votre message d’invite. (message => "Entrez le premier numéro:")

Cela donne l’impression que l’utilisateur est inséré sur la même ligne. J'admets que c'est un peu primitif, mais il fait ce dont vous avez besoin sans perdre votre temps avec du code compliqué pour une tâche aussi simple.