web-dev-qa-db-fra.com

Comment lire les entrées de l'utilisateur depuis la console?

Je veux obtenir un nombre de l'utilisateur, puis multiplier ce nombre avec Pi. ma tentative est la suivante. Mais a contient du charabia. Par exemple, si j'insère 22, puis a contient 50. Qu'est-ce que je fais mal? Je ne reçois aucune erreur de compilation.

double a,b;
a = Console.Read();
b = a * Math.PI;
Console.WriteLine(b);
38
MaxCoder88

Je ne sais pas quel est votre problème (puisque vous ne nous l'avez pas dit), mais je suppose que

a = Console.Read();

Cela ne lira qu'un seul caractère de votre console.

Vous pouvez changer votre programme pour cela. Pour la rendre plus robuste, acceptez plus d'une entrée de caractère et confirmez que l'entrée est en réalité un nombre:

double a, b;
Console.WriteLine("istenen sayıyı sonuna .00 koyarak yaz");
if (double.TryParse(Console.ReadLine(), out a)) {
  b = a * Math.PI;
  Console.WriteLine("Sonuç " + b); 
} else {
  //user gave an illegal input. Handle it here.
}
62
Øyvind Bråthen
a = double.Parse(Console.ReadLine());

Attention, si l'utilisateur entre quelque chose qui ne peut pas être analysé comme un double, une exception sera levée.

Modifier:

Pour développer ma réponse, la raison pour laquelle cela ne fonctionne pas pour vous est que vous obtenez une entrée de l'utilisateur au format chaîne et que vous essayez de la mettre directement dans un double. Tu ne peux pas faire ça. Vous devez d'abord extraire la valeur double de la chaîne.

Si vous souhaitez effectuer une sorte de vérification d'erreur, procédez comme suit:

if ( double.TryParse(Console.ReadLine(), out a) ) {
  Console.Writeline("Sonuç "+ a * Math.PI;); 
}
else {
  Console.WriteLine("Invalid number entered. Please enter number in format: #.#");
}

Merci à Öyvind et à Abatischev de m'aider à peaufiner ma réponse.

14
Andreas Eriksson
string input = Console.ReadLine();
double d;
if (!Double.TryParse(input, out d))
    Console.WriteLine("Wrong input");
double r = d * Math.Pi;
Console.WriteLine(r);

La principale raison des différentes entrées/sorties auxquelles vous faites face est que Console.Read() renvoie un code de caractère, pas un nombre que vous avez tapé! Apprenez à utiliser MSDN .

6
abatishchev

Je pense qu'il y a des erreurs de compilation.

  • Writeline doit être WriteLine (majuscule 'L')
  • point-virgule manquant à la fin d'une ligne

        double a, b;
        Console.WriteLine("istenen sayıyı sonuna .00 koyarak yaz");
        a = double.Parse(Console.ReadLine());
        b = a * Math.PI; // Missing colon!
        Console.WriteLine("Sonuç " + b);
    
2
philipproplesch

Dans le futur .NET4.6

//for Double
double inputValues = double.Parse(Console.ReadLine());

//for Int
int inputValues = int.Parse(Console.ReadLine());
1
Krishneil
string str = Console.ReadLine(); //Reads a character from console
double a = double.Parse(str); //Converts str into the type double
double b = a * Math.PI; // Multiplies by PI
Console.WriteLine("{0}", b); // Writes the number to console

Console.Read() lit une chaîne sur la console A SINGLE CHARACTER AT A TIME (mais attend une entrée avant de continuer. Vous l'utilisez normalement dans un cycle while Donc, si vous écrivez 25 + Entrée, la valeur unicode de 2 Sera renvoyée, ce qui correspond à 50. Si vous rétablissez une seconde Console.Read() il retournera immédiatement avec 53 (la valeur unicode de 5). Un troisième et un quatrième Console.Read() renverront les caractères de fin de ligne/chariot. Un cinquième attendra nouvelle entrée.

Console.ReadLine() lit un string (vous devez donc changer la chaîne en un double)

1
xanatos

Il vous manque un point-virgule: double b = a * Math.PI;

0
Kieren Johnstone
        double a,b;
        Console.WriteLine("istenen sayıyı sonuna .00 koyarak yaz");
        try
        {
            a = Convert.ToDouble(Console.ReadLine());
            b = a * Math.PI;
            Console.WriteLine("Sonuç " + b); 
        }
        catch (Exception)
        {
            Console.WriteLine("dönüştürme hatası");
            throw;
        }
0
Mustafa Güven