2012-06-28 251 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(); 

     }