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);
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.
}
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.
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 .
Je pense qu'il y a des erreurs de compilation.
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);
Dans le futur .NET4.6
//for Double
double inputValues = double.Parse(Console.ReadLine());
//for Int
int inputValues = int.Parse(Console.ReadLine());
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
)
Il vous manque un point-virgule: double b = a * Math.PI;
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;
}