2012-06-28 393 views
6

好的,我想先说我不是学生,所以这个问题与作业根本没有任何关系。我正在努力学习C#,因为我想为之工作的公司使用它。我听说C#和java非常相似,所以我使用我的java书,练习c#的练习题。这里是我的问题,我试图做一个简单的程序,用户输入3个等级并将其存储在一个数组中,然后显示输入的三个等级。问题是它没有存储等级。但它确实显示了一些随机数一样,如果我把34,44,和54返回51.这是我的代码,并感谢大家:C#控制台用户输入

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

只是说C#不像Java。你正在破坏自己。获取一本好的C#书并从中学习。 – Oded

+7

其他人说的是正确的,但是,你的循环是错误的(可能,不管怎么说都是奇怪的)。你正在跳过第一个元素。而是使用:for(int i = 0; i

+0

您调用console.read()然后console.readline()..调用console.readkey()on test [我] – Botonomous

回答

1

Console.Read()返回字符。您想从控制台读取string,将其转换为int,然后将该值存储在您的阵列中。

8

你的问题是在这里:

test[i] = Console.Read(); 

这是把一个字符(这是一个整数字符代码)到您的测试阵列。

而是做

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

编辑:如果您不能确定用户将键入一个可分析的整数,也许他们会输入“六个一”,例如,你可能会考虑使用try /抓(如果你想知道为什么它不会解析),或int.TryParse,返回true指示成功解析整数赋值给变量,字段或数组索引:

if(int.TryParse(Console.ReadLine(), out test[1]) 
    Console.WriteLine("Successfully parsed integer"); 
else 
    Console.WriteLine("Please enter an integer."); 
+0

可能值得更新以处理try/catch错误 - 否则会抛出 – Charleh

+2

@Charleh我宁愿tryparse尝试/赶上,以避免例外 –

+0

初学者的最佳答案。此外,在C#中的数组从0开始... –

2

Console.Read()返回密钥的ASCII值ERED。例如,如果您输入“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码转换为适当的数字。

+0

好的。更正了我的回应。 –

+0

没问题。 -1 - > +1 – NominSim

+0

TryParse需要一个out参数:'int.TryParse(string input,out int output);' – rcdmk

2

来自docsConsole.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); 

应该工作。

+1

不仅仅是因为没有投掷int.Parse - 你可以添加一个别的说'请输入一个真正的数字你傻瓜'等 – Charleh

+0

@Charleh更新,以协助愚人。 – NominSim

+1

当我在堆栈交换中看到这个弹出窗口时,我只是吐口水! – Charleh

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到长度为1的

+0

忘记从字符串转换。 – spender

+0

是啊......更新了它:-) – eyossi

2

问题是你正在阅读角色。因此,您看到的“51”是数字3的十进制(基数为10)的ASCII值。你需要做的是以下几点:

string result = Console.ReadLine(); 
int grade = 0; 
int.TryParse(result, out grade) 
test[i] = grade; 
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(); 

     }