Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#控制台用户输入_C# - Fatal编程技术网

C#控制台用户输入

C#控制台用户输入,c#,C#,好的,我想首先说我不是学生,所以这个问题与家庭作业无关。我正在努力学习C#,因为我想为之工作的公司使用它。我听说C#与java非常相似,所以我正在用我的java书籍练习C#。这是我的问题,我试图制作一个简单的程序,用户输入3个等级,然后将其存储在一个数组中,然后显示输入的3个等级。问题是它没有存储等级。但它确实显示了一些随机数,比如我输入34、44和54,它返回51。这是我的代码,谢谢大家: using System; using System.Collections.Generic; usin

好的,我想首先说我不是学生,所以这个问题与家庭作业无关。我正在努力学习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();
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
名称空间实践1
{
班级计划
{
静态void Main(字符串[]参数)
{
int[]测试=新的int[4];
int i=1;
对于(i=1;i
Console.Read()
返回一个字符。如果要从控制台读取
字符串,请将其转换为
int
,然后将该值存储在数组中。

您的问题在于:

test[i] = Console.Read();
这是将一个字符(这是一个整数字符代码)放入测试数组

取而代之的是

test[i] = int.Parse(Console.ReadLine());
如果你不确定用户将键入一个可解析的整数,也许他们会键入“六”,例如你可以考虑使用一个TIG/catch(如果你想知道它为什么不解析),或者In.TyPARSE,它返回true表示成功,并将解析的整数赋给一个变量、字段或数组索引:

if(int.TryParse(Console.ReadLine(), out test[1])
   Console.WriteLine("Successfully parsed integer");
else
   Console.WriteLine("Please enter an integer.");
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();

}                
(i=0;i<4;i++)的

{
Console.WriteLine(“请输入测试”+i);
字符串输入=Console.ReadLine();
int值;
bool success=int.TryParse(输入,输出值);
如果(成功)
{
测试[i]=数值
}
其他的
{
//显示用户必须输入整数的错误消息。
}
Console.ReadLine();
}                
还要注意的是,数组在C#中是从0开始索引的,而不是代码假定的从1开始索引的

或者,您仍然可以使用(),它返回输入字符的整数表示形式,确认该字符实际上是一个数字,并将ASCII码转换为相应的数字。

控制台读取()
“从标准输入流中读取下一个字符。”

你想要下一个整数,所以

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);
应该可以工作。

int[]测试=新的int[3];
        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();
        }
对于(int i=0;i<3;i++) { Console.WriteLine(“请输入测试”+i+1); test[i]=Int.Parse(Console.ReadLine()); } 对于(int i=0;i<3;i++) { 控制台写入线(测试[i]); Console.ReadLine(); }

如您所见,数组从索引0开始,因此无需定义int[4](比所需多出一个int),您需要从索引0循环到长度-1

问题在于您正在读取字符。因此,您看到的“51”是十进制(以10为基数)数字3的ASCII值。您需要执行以下操作:

string result = Console.ReadLine();
int grade = 0;
int.TryParse(result, out grade)
test[i] = grade;
代码如下:

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

        }
for(int e=0;e<3;e++)
{
Console.WriteLine(“请输入测试”);
test[e]=int.Parse(Console.ReadLine());
}
Console.WriteLine(“000000000000000000000\n”);
对于(int e=0;e<3;e++)
{
控制台写入线(测试[e]);
//Console.ReadLine();
}

只是说C#不像Java。这对你自己是一种伤害。找一本好的C#书并从中学习。其他人说的都是正确的,但你的循环是错误的(好吧,也许吧。不管怎样,这很奇怪)。你跳过了第一个元素。相反,使用:
for(int i=0;i
test上调用console.read()然后调用console.readline()…调用console.readkey()[i]我喜欢StackOverflow的原因是每个人都参与了答案。很快,一分钟内就有8个以上的答案!@Brandon-关于Oden的评论,我可以强烈推荐微软的“Java程序员C”,我用它开始了5年前的交叉训练,但忘记了从字符串转换。可能值得更新,以便用try/catch处理错误-否则throws@Charleh我更希望特里帕斯尽量避免exceptions@JohnDavis它们在java中也一样well@OskarKjellin啊,我不知道。不管怎样,在他的代码中,他似乎从1开始。或者他做了一些奇怪的事情…不知道为什么他声明了长度为4的数组…@JohnDavis对于初学者来说,得到一个超出范围的异常是很常见的,然后他们不是将其从0更改为0,而是更改数组的大小。我在许多人身上看到了这一点,我在这些年里辅导过他们。很好的捕获。更正了我的回答。TryParse expects一个out参数:
int.TryParse(字符串输入,out int输出)
@rcdmk:Fixed.正在为他的案例编写完整的代码,并且已经捕获到了这一点。由于没有抛出,因此比仅使用int.Parse更好-您可以添加一个else来表示“请输入一个真实的数字,您这个傻瓜”etc@Charleh更新以帮助傻瓜。当我在stack exchange上看到这个弹出窗口时,我刚刚吐了我的饮料!