ユーザーから数値を取得し、その数値にPiを掛けます。これに対する私の試みは以下の通りです。ただし、a
には意味不明な内容が含まれています。たとえば、22
を挿入すると、a
には50
が含まれます。私は何を間違えていますか?コンパイラエラーは発生しません。
double a,b;
a = Console.Read();
b = a * Math.PI;
Console.WriteLine(b);
あなたの問題が何なのかわかりません(あなたは私たちに言っていないので)が、私は推測しています
a = Console.Read();
これにより、コンソールから1文字のみが読み取られます。
プログラムをこれに変更できます。より堅牢にするために、1文字以上の入力を受け入れ、入力が実際に数値であることを検証します。
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());
ユーザーがdoubleに解析できないものを入力すると、例外がスローされることに注意してください。
編集:
私の答えを拡張するために、それがあなたのために機能しない理由は、文字列形式でユーザーから入力を得て、それを直接doubleに入れようとしているからです。それはできません。最初に文字列からdouble値を抽出する必要があります。
何らかのエラーチェックを実行する場合は、次のようにします。
if ( double.TryParse(Console.ReadLine(), out a) ) {
Console.Writeline("Sonuç "+ a * Math.PI;);
}
else {
Console.WriteLine("Invalid number entered. Please enter number in format: #.#");
}
答えを洗練させてくれたÖyvindとabatischevに感謝します。
string input = Console.ReadLine();
double d;
if (!Double.TryParse(input, out d))
Console.WriteLine("Wrong input");
double r = d * Math.Pi;
Console.WriteLine(r);
あなたが直面している異なる入出力の主な理由は、Console.Read()
が入力した数値ではなく文字コードを返すことです! MSDN の使用方法を学びます。
コンパイラエラーがいくつかあると思います。
行末にセミコロンがありません
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);
いつか.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()
は、コンソールから文字列を読み取りますA単一文字AT A TIME(ただし、進む前にエンターを待ちます。通常はwhile
サイクルで使用します)。したがって、25
+ Enterと記述すると、2
のUnicode値、つまり50
が返されます。 2番目のConsole.Read()
をやり直すと、53
(5
のUnicode値)ですぐに戻ります。 3番目と4番目のConsole.Read()
は、行末/キャリッジ文字を返します。 5番目は新しい入力を待ちます。
Console.ReadLine()
はstring
を読み取ります(したがって、文字列をdouble
に変更する必要があります)
セミコロンがありません: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;
}