简体   繁体   English

C#控制台用户输入

[英]C# Console User Input

Ok, I want to first start off by saying I'm not a student so this question has nothing to do with homework at all. 好吧,我想首先说我不是学生所以这个问题与家庭作业完全无关。 I'm trying to learn C# because the company that I want to work for uses it. 我正在努力学习C#,因为我想要工作的公司使用它。 I heard that C# is very similar to java so I'm using my java book that has exercise problems to practice c#. 我听说C#与java非常相似所以我正在使用我的java书来解决运动问题来练习c#。 Here is my question, I'm trying to make a simple program that the user enters 3 grades and it stores it in an array and then displays the three grades that were entered. 这是我的问题,我正在尝试创建一个简单的程序,用户输入3个等级并将其存储在一个数组中,然后显示输入的三个等级。 The problem is that its not storing the grades. 问题是它没有存储成绩。 It does however display some random number like if I put in 34, 44, and 54 it returns 51. Here is my code and thanks everyone: 然而它显示一些随机数,如果我输入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();
            }
        }
    }
}

Your problem is here: 你的问题在这里:

test[i] = Console.Read();

This is putting a character (which is an integer character code) into your test array. 这是将一个字符(这是一个整数字符代码)放入您的测试数组中。

Instead do 相反

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

Edit: If you aren't certain that the user will type a parsable integer, maybe they'll type in "six", for example you might consider using a try/catch (if you want to know why it wouldn't parse), or the int.TryParse, which returns true to indicate success and assigns the parsed integer to a variable, field, or array index: 编辑:如果你不确定用户会输入一个可解析的整数,也许他们会键入“six”,例如你可能会考虑使用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.");

Console.Read() returns the ASCII value of the key entered. Console.Read()返回输入密钥的ASCII值。 For example if you type in "A", you get the value 65 which is the ASCII code for "A". 例如,如果键入“A”,则得到值65,即“A”的ASCII码。

You will need to parse your string to an integer: 您需要将字符串解析为整数:

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

}                

Also note that arrays are indexed starting with 0 in C#, not with 1 as your code assumes. 另请注意,数组在C#中以0开头编号,而不是代码假定的1。

Alternatively you can still use Console.Read (), which returns the integer representation of the character entered, confirm that the character is in fact a number, and convert from the ASCII code to the appropriate number. 或者,您仍然可以使用Console.Read (),它返回输入字符的整数表示形式,确认该字符实际上是一个数字,并从ASCII代码转换为适当的数字。

From the docs Console.Read() "Reads the next character from the standard input stream." 文档 Console.Read() “读取标准输入流中的下一个字符。”

You want the next Integer, so something like 你想要下一个Integer,就像这样

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

Should work. 应该管用。

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

As you can see, arrays starts from index 0, so there is no need to define int[4] (one more int than required), and you need to loop from index 0 to length-1 如您所见,数组从索引0开始,因此不需要定义int [4](比需要的更多一个int),并且需要从索引0循环到length-1

The problem is that you are reading in the character. 问题是你正在读这个角色。 As such the "51" you are seeing is the decimal (base 10) ASCII value for the number 3. What you need to do is the following: 因此,您看到的“51”是数字3的十进制(基数10)ASCII值。您需要做的是以下内容:

string result = Console.ReadLine();
int grade = 0;
int.TryParse(result, out grade)
test[i] = grade;

Console.Read() returns a character. Console.Read()返回一个字符。 You want to read a string from the console, convert it to an int , and then store that value in your array. 您希望从控制台读取string ,将其转换为int ,然后将该值存储在数组中。

Here is the code: 这是代码:

int[] test = new int[3]; int [] test = new 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();

        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM