6

わかりました。最初に、私は学生ではないと言いたいので、この質問は宿題とはまったく関係ありません。就職したい会社がC#を使っているので、C#を学ぼうとしています。C# は Java と非常に似ていると聞いたので、演習問題のある Java の本を使って C# を練習しています。これが私の質問です。ユーザーが3つの成績を入力し、それを配列に保存してから、入力された3つの成績を表示する簡単なプログラムを作成しようとしています。問題は、成績が保存されていないことです。ただし、34、44、および 54 を入力すると 51 が返されるような乱数が表示されます。これが私のコードです。皆さんに感謝します。

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

namespace Practice1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] test = new int[4];

            int i = 1;

            for (i = 1; i <= 3; i++)
            {
                Console.WriteLine("Please enter test " + i);
                test[i] = Console.Read();
                Console.ReadLine();

            }
            for (i = 1; i <=3; i++)
            {
                Console.WriteLine(test[i]);
                Console.ReadLine();
            }
        }
    }
}
4

7 に答える 7

9

あなたの問題はここにあります:

test[i] = Console.Read();

これは、文字(整数の文字コード)をテスト配列に配置することです。

代わりに

test[i] = int.Parse(Console.ReadLine());

編集:ユーザーが解析可能な整数を入力するかどうかわからない場合は、「6」と入力する可能性があります。たとえば、try / catchの使用を検討する場合があります(解析されない理由を知りたい場合)。 、またはint.TryParseは、成功を示すためにtrueを返し、解析された整数を変数、フィールド、または配列インデックスに割り当てます。

if(int.TryParse(Console.ReadLine(), out test[1])
   Console.WriteLine("Successfully parsed integer");
else
   Console.WriteLine("Please enter an integer.");
于 2012-06-28T20:48:52.587 に答える
2

Console.Read()は、入力されたキーのASCII値を返します。たとえば、「A」と入力すると、「A」のASCIIコードである値65が得られます。

文字列を整数に解析する必要があります。

for (i = 0; i < 4; i++)
{
    Console.WriteLine("Please enter test " + i);
    string input = Console.ReadLine();
    int value;
    bool success = int.TryParse(input, out value);
    if (success)
    {
        test[i] = value
    }
    else
    {
        // Show an error message that the user must enter an integer.
    }

    Console.ReadLine();

}                

また、配列は、コードで想定されている1ではなく、C#では0からインデックスが付けられることに注意してください。

または、 Console.Read ()を使用して、入力した文字の整数表現を返し、文字が実際に数字であることを確認して、ASCIIコードから適切な数字に変換することもできます。

于 2012-06-28T20:49:50.823 に答える
2

ドキュメント からConsole.Read()「標準の入力ストリームから次の文字を読み取ります。」

次の整数が必要なので、

bool cont = false;
int val = 0;
do
{
    cont = int.TryParse(Console.ReadLine(), out val);
    if(!cont){Console.WriteLine( "please enter a real number you fool" );}
} while (!cont);

動作するはずです。

于 2012-06-28T20:50:03.370 に答える
2
        int[] test = new int[3];

        for (int i = 0; i < 3; i++)
        {
            Console.WriteLine("Please enter test " + i + 1);
            test[i] = Int.Parse(Console.ReadLine());
        }
        for (int i = 0; i < 3; i++)
        {
            Console.WriteLine(test[i]);
            Console.ReadLine();
        }

ご覧のとおり、配列はインデックス0から始まるため、int [4](必要以上に1つ多いint)を定義する必要はなく、インデックス0から長さ-1までループする必要があります。

于 2012-06-28T20:50:06.523 に答える
2

問題は、あなたがキャラクターを読んでいるということです。そのため、表示されている「51」は、数値3の10進数(基数10)のASCII値です。実行する必要があるのは次のとおりです。

string result = Console.ReadLine();
int grade = 0;
int.TryParse(result, out grade)
test[i] = grade;
于 2012-06-28T20:50:07.267 に答える
1

Console.Read()文字を返します。stringコンソールからを読み取り、それをに変換してから、intその値を配列に格納します。

于 2012-06-28T20:48:49.353 に答える
0

コードは次のとおりです。

int[] テスト = 新しい int[3];

        for (int e = 0; e < 3; e++)
        {
            Console.WriteLine("Please enter test ");
            test[e] = int.Parse(Console.ReadLine());
        }


        Console.WriteLine("000000000000000000000000000\n");

        for (int e = 0; e < 3; e++)
        {

            Console.WriteLine(test[e]);
            //Console.ReadLine();

        }
于 2016-04-01T01:41:13.323 に答える