3

コミュニティ。

C#でプログラミングを学んでいます。ユーザーから名前、年齢、好きな色、および 2 つの数字を取得するこの小さなプログラムを作成しました。Notepad ++ を使用してコードを記述し、Windows コマンド プロンプトから C# コンパイラを実行します。プログラムのソースコードはこちら

using System;

class ShowSomething
{
static void Main(string[] args)

{
    string name, age, favColor;
    int num1,num2, sum, mult, subs;
    float div;


    Console.Write("What is your name? ");
    name = Console.ReadLine();
    Console.WriteLine("Hello, " + name);

    Console.WriteLine();

    Console.Write("How old are you? ");
    age = Console.ReadLine();
    Console.WriteLine("So you are " + age, "I thought that you were older!");

    Console.WriteLine();

    Console.Write("What is your favorite Color? ");
    favColor = Console.ReadLine();
    Console.WriteLine(favColor + " is a cool color!");

    Console.WriteLine();

    Console.WriteLine("Nice meeting you, " + name, "Have a good day!");

    Console.WriteLine();

    Console.WriteLine("Let us do some operations, " + name);

    Console.WriteLine();

    Console.Write("Please enter a number: ");
    num1 = Console.Read();

    Console.Write("Please enter another number: ");
    num2 = Console.Read();

    sum = num1 + num2;
    mult = num1 * num2;
    subs = num1 - num2;
    div = num1 / num2;


    Console.WriteLine();

    Console.WriteLine("Alright, " + name, "Let us blow up your mind!");

    Console.WriteLine();

    Console.WriteLine(num1 + "+" + num2, "=" + sum);
    Console.WriteLine(num1 + "*" + num2, "=" + mult);
    Console.WriteLine(num1 + "-" + num2, "=" + subs);
    Console.WriteLine(num1 + "/" + num2, "=" + div);

    Console.WriteLine();
    Console.WriteLine("Mindblown, Right?");
}   

}

プログラムを実行すると、ほとんどすべてがうまくいきます。ただし、ユーザーが操作の最初の数を入力すると、プログラムは 2 番目のプロンプトをスキップし、予想とはまったく異なる結果を出力します。たとえば、最初の数字として 0 を入力すると、プログラムは操作にジャンプして次のように出力します。

///

48+13

48*13

48-13

48/13

びっくりしましたよね?

///

4

3 に答える 3

5

Console.Read期待どおりの結果が得られないため、使用しないでください。

標準入力ストリームから次の文字を読み取ります (そして、それを表す整数値1を返します)。

Console.Read「スキップ」への2番目の呼び出しの理由について、devshortからの良い説明を次に示します。

最初に値「1」を入力すると、それがASCII表現に変換されます。次に、キャリッジ リターンは画面の [input] バッファーにまだあるため、次の読み取り (Console.Read) を押すと、改行が読み取られ、数値に変換されます。

代わりに、Console.ReadLine代わりに (文字列を返す) をint.Parse..と組み合わせて使用​​する方法があります。


1ヒント:キャリッジ リターン文字の値は 13 です。

于 2013-02-13T22:48:30.587 に答える
2

視覚的に見える ascii0のバイト値は 48. または0x30. これは48を説明しています。

基本的に、間違った機能を使用しています。

于 2013-02-13T22:49:24.517 に答える
0

わかりました。コードを少し編集して、何かを変更した理由を説明しました。

        string name, age, favColor;
        int num1, num2, sum, mult, subs; 
        float div;


        Console.WriteLine("What is your name? "); 
        //Start a new line and write ..
        name = Console.ReadLine(); 
        //Read the whole line
        Console.WriteLine("\nHello, {0}", name); 
        //{0} stands for the first variable you refer to after the, etc

        Console.WriteLine("How old are you? ");
        age = Console.ReadLine();
        Console.WriteLine("\nSo you are {0}, I thought that you were older!", age);
        // something new.. \n refers to a "new line", so instead of writing Console.Writeline(); you can use this
        Console.WriteLine("What is your favorite Color? ");
        favColor = Console.ReadLine();
        Console.WriteLine("{0} is a cool color!\n", favColor);

        Console.WriteLine("Nice meeting you, {0}", name);
        Console.WriteLine("Have a good day!\n");


        Console.WriteLine("Let us do some operations, {0}", name);

        Console.WriteLine("Please enter a number: ");
        num1 =  Convert.ToInt16(Console.ReadLine());
        //int.TryParse(Console.ReadLine(), out num1);
        //Another way is to "try parse", try converting a string to an integer


        Console.WriteLine("\nPlease enter another number: ");
        num2 = Convert.ToInt16(Console.ReadLine());
        //int.TryParse(Console.ReadLine(), out num2);
        //Another way is to "try parse", try converting a string to an integer where out is the returning variable

        sum = num1 + num2;
        mult = num1 * num2;
        subs = num1 - num2;
        div = num1 / num2;



        Console.WriteLine("\nAlright, {0}", name);
        Console.WriteLine("Let us blow up your mind!\n");

        //Again use {0} ... which writes easier than having to use + every time,
        //its not wrong but its easier this way
        Console.WriteLine("{0} + {1} = {2}", num1, num2, sum);
        Console.WriteLine("{0} * {1} = {2}", num1, num2, mult);
        Console.WriteLine("{0} - {1} = {2}", num1, num2, subs);
        Console.WriteLine("{0} / {1} = {2}", num1, num2, div);

        Console.WriteLine("\nMindblown, Right?");
        Console.ReadLine();
        //Console.ReadLine(); at the end to prevent the program from closing
于 2013-02-13T23:26:02.987 に答える