web-dev-qa-db-fra.com

lire deux nombres entiers dans une ligne en utilisant C #

je sais comment faire une console lire deux nombres entiers, mais chaque nombre 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), je ne peux pas être analysé en nombres entiers

27
Nadeem

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 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 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:

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érifiez que l’entrée se divise en exactement 2 chaînes.
  2. Utilisez int.TryParse pour tentez pour analyser les chaînes en nombres. 
26
Ani

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 analyse 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).

6
Frank

Ensuite, vous devriez d'abord le stocker dans une chaîne, puis le scinder en utilisant l'espace comme jeton.

5
RvdK

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

string s = Console.ReadLine();
string[] values = s.Split(' ');
int a = int.Parse(values[0]);
int b = int.Parse(values[1]);
3
Dan Puzey
string[] values = Console.ReadLine().Split(' ');
int x = int.Parse(values[0]);
int y = int.Parse(values[1]);
2
gusto

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

var numbers = from Match number in new Regex(@"\d+").Matches(Console.ReadLine())
                    select int.Parse(number.Value);
1
iChaib
int a, b;
string line = Console.ReadLine();
string[] numbers= line.Split(' ');
a = int.Parse(numbers[0]);
b = int.Parse(numbers[1]);
1
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
Raz Megrelidze
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 vos besoins!

1
Nishant

Essaye ça:

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

J'espère que ça aide:)

0
Association
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

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 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 est de tromper l’application 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.

0
Coder992