web-dev-qa-db-ja.com

コンソールからユーザー入力を読み取るにはどうすればよいですか?

ユーザーから数値を取得し、その数値にPiを掛けます。これに対する私の試みは以下の通りです。ただし、aには意味不明な内容が含まれています。たとえば、22を挿入すると、aには50が含まれます。私は何を間違えていますか?コンパイラエラーは発生しません。

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

あなたの問題が何なのかわかりません(あなたは私たちに言っていないので)が、私は推測しています

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.
}
62
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に感謝します。

14
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 の使用方法を学びます。

6
abatishchev

コンパイラエラーがいくつかあると思います。

  • WritelineはWriteLineでなければなりません(大文字の 'L')
  • 行末にセミコロンがありません

        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

いつか.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()は、コンソールから文字列を読み取りますA単一文字AT A TIME(ただし、進む前にエンターを待ちます。通常はwhileサイクルで使用します)。したがって、25 + Enterと記述すると、2のUnicode値、つまり50が返されます。 2番目のConsole.Read()をやり直すと、535のUnicode値)ですぐに戻ります。 3番目と4番目のConsole.Read()は、行末/キャリッジ文字を返します。 5番目は新しい入力を待ちます。

Console.ReadLine()stringを読み取ります(したがって、文字列をdoubleに変更する必要があります)

1
xanatos

セミコロンがありません:double b = a * Math.PI;

0
        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