6

好的,我想首先说我不是学生,所以这个问题与家庭作业完全无关。我正在尝试学习 C#,因为我想为之工作的公司正在使用它。我听说 C# 与 java 非常相似,所以我正在使用我的 java 书,其中有练习题来练习 c#。这是我的问题,我正在尝试制作一个简单的程序,用户输入 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());

编辑:如果您不确定用户会输入一个可解析的整数,也许他们会输入“六”,例如您可以考虑使用 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”,您将得到值 65,它是“A”的 ASCII 码。

您需要将字符串解析为整数:

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();

}                

另请注意,数组在 C# 中从 0 开始索引,而不是您的代码假设的 1。

或者,您仍然可以使用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](比需要的多一个int),需要从索引0循环到length-1

于 2012-06-28T20:50:06.523 回答
2

问题是您正在阅读角色。因此,您看到的“51”是数字 3 的十进制(以 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从控制台读取 a ,将其转换为 a 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 回答