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
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:
- Vérifier que l'entrée se divise en exactement 2 cordes.
- Utiliser
int.TryParse
essayer pour séparer les chaînes en nombres.
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).
alors vous devez d'abord le stocker dans une chaîne et ensuite le diviser en utilisant l'espace comme jeton.
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]);
string[] 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 (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);
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!
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));
}
}
int a, b;
string line = Console.ReadLine();
string[] numbers= line.Split(' ');
a = int.Parse(numbers[0]);
b = int.Parse(numbers[1]);
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:)
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;
}
}
}
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.