10

私はC#言語に不慣れで、X-box用のXNA GameStudioで使用するためにC#言語の学習を始めたばかりです。

私はJavaとC++の経験が少ないので、初心者ではありません。だからこそ、この問題は私にとってとても苛立たしいものです。

ユーザーから入力された2つの数値を追加するように設計された簡単なコードを作成しました。非常にシンプルなものですが、私が感じる新しい言語にとっては良い第一歩です。

変数を宣言し、Console.Read()を使用してユーザーから数値を取得して追加しようとしました。これまでのところ、コードは必要なメッセージを出力してから停止し、ユーザーからの単一の入力を読み込みます。その後、それは台無しになります。コンソールは次のメッセージを出力し、乱数を読み取り(入力なし)、それらを合計して即座に出力します。

これが私のコードです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Add
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Please enter the first number to add: ");
            int firstNumber = Console.Read();

            Console.WriteLine("Please enter the second number to add: ");
            int secondNumber = Console.Read();

            int Sum = firstNumber + secondNumber;
            Console.WriteLine("The total of the two numbers is: " + Sum);

        }
    }
}

サンプル実行:

追加する最初の番号を入力してください。

2

追加する2番目の番号を入力してください。

2つの数字の合計は次のとおりです。63


追加する最初の番号を入力してください。

3

追加する2番目の番号を入力してください。

2つの数値の合計は次のとおりです。64


それはそのように続き、secondNumberが61であるかのように動作します。

助けてくれてありがとう!

4

8 に答える 8

11

これは、コンソールから次の文字を読み取り、それをに変換しているためintです。これにより、数値ではなくASCII値が得られます。したがって、2と入力すると、ASCIIコード50の文字「2」として解釈されます。代わりにこれを試してください。

int firstNumber = Int32.Parse(Console.ReadLine());
于 2012-04-25T15:34:31.583 に答える
8

Console.Read単一の文字を読み取ります。したがって、「2」を入力してEnterキーを押すと、(1)ASCII値が50の文字「2」を指定し、次に(2)ASCII値が13のキャリッジリターン文字を指定します。これらは...63です。:-)

于 2012-04-25T15:35:00.717 に答える
3

Garethが言ったことに加えて、MSDN情報によって、2番目のConsole.Read()メソッドでの入力を待機していない理由が明らかになるかもしれません。

Console.Read()

Readメソッドは、入力文字を入力している間、その戻りをブロックします。Enterキーを押すと終了します。Enterキーを押すと、プラットフォームに依存するライン終了シーケンスが入力に追加されます(たとえば、Windowsはキャリッジリターンラインフィードシーケンスを追加します)。その後のReadメソッドの呼び出しは、一度に1文字ずつ入力を取得します。最後の文字が取得された後、Readはその戻りを再びブロックし、サイクルが繰り返されます。

したがって、最初のRead()では、Enterキーを押すまで、好きなものを入力できます。

次に、2番目のConsole.Read()に到達し、「ねえ、私はすでに最初のConsole.Read()からの文字を通過させています。たまたま、2番目の文字は空白(キャリッジリターン)です」と言います。そして、その空白のASCII値をsecondNumberに割り当てます。

于 2012-04-25T15:41:02.473 に答える
1

問題は、Console.Read()が最初のReturnキーの押下を読み取り、それを2番目のConsole.Read()呼び出しに送信することです。コードは代わりにReadLine()を使用し、次のようになります。

Console.WriteLine("Please enter the first number to add: ");
int firstNumber = Convert.ToInt32(Console.ReadLine());

Console.WriteLine("Please enter the second number to add: ");
int secondNumber = Convert.ToInt32(Console.ReadLine());
于 2012-04-25T15:39:02.660 に答える
1

Console.Readは、入力ブロックから1文字を読み取ります。数字を入力してからEnterキーを押すと、Enterキー、または入力した最初の数字の次の桁が読み取られます。

代わりにConsole.ReadLineを使用することをお勧めします。

于 2012-04-25T15:43:46.270 に答える
0

Console.ReadLine()メソッドが必要だと思います

于 2012-04-25T15:34:21.437 に答える
0

Console.ReadLine();を試してください。

于 2012-04-25T15:34:29.497 に答える
0

Readはストリーム内の次の文字を取得するため、ReadLineをReadではなくしたい場合がありますが、ReadLineはユーザーがEnterキーを押すのを待ちます。

これは、ユーザーが初めて34と入力した場合にバグを引き起こします。これは、firstNumberが34ではなく3に等しいためです。

于 2012-04-25T15:35:19.587 に答える