2012-06-28 37 views
6

Ok, tôi muốn bắt đầu bằng cách nói rằng tôi không phải là sinh viên nên câu hỏi này không liên quan gì đến bài tập về nhà. Tôi đang cố gắng học C# bởi vì công ty mà tôi muốn làm việc để sử dụng nó. Tôi nghe nói rằng C# là rất giống với java vì vậy tôi đang sử dụng cuốn sách java của tôi có vấn đề tập thể dục để thực hành C#. Đây là câu hỏi của tôi, tôi đang cố gắng thực hiện một chương trình đơn giản mà người dùng nhập 3 điểm và nó lưu trữ nó trong một mảng và sau đó hiển thị ba điểm đã được nhập vào. Vấn đề là nó không lưu trữ các điểm. Tuy nhiên nó không hiển thị một số số ngẫu nhiên như thế nào nếu tôi đặt tại 34, 44, và 54 nó trả về 51. Đây là mã và nhờ tôi tất cả mọi người:C# Console Đầu vào người dùng

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

Chỉ cần nói rằng C# không giống Java. Bạn đang làm cho mình một sự bất hòa. Nhận một cuốn sách C# tốt và học hỏi từ nó. – Oded

+7

Những gì mọi người khác nói là chính xác, nhưng cũng có, vòng lặp của bạn là sai (tốt, có lẽ. Nó lạ bất kể). Bạn đang bỏ qua phần tử đầu tiên. Thay vào đó, sử dụng: 'for (int i = 0; i

+0

Gọi console.read() sau đó console.readline() .. gọi console.readkey() trên test [ i] – Botonomous

Trả lời

1

Console.Read() trả về một nhân vật. Bạn muốn đọc string từ bảng điều khiển, chuyển đổi nó thành một int và sau đó lưu trữ giá trị đó trong mảng của bạn.

8

Vấn đề của bạn là ở đây:

test[i] = Console.Read(); 

này được đặt một nhân vật (mà là một mã ký tự số nguyên) vào mảng thử nghiệm của bạn.

Thay vì làm

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

Edit: Nếu bạn không chắc chắn rằng người dùng sẽ gõ một số nguyên được phân tách, có lẽ họ sẽ gõ vào "sáu", ví dụ bạn có thể xem xét sử dụng thử/catch (nếu bạn muốn biết lý do tại sao nó sẽ không phân tích), hoặc int.TryParse, trả về true, cho biết thành công và gán các số nguyên phân tích cú pháp cho một biến, lĩnh vực, hoặc chỉ số mảng:

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

Có thể được cập nhật để xử lý lỗi với try/catch - nếu không điều này sẽ ném – Charleh

+2

@Charleh Tôi thích tryparse để thử/bắt tránh trường hợp ngoại lệ –

+0

Câu trả lời hay nhất cho người mới bắt đầu. Ngoài ra, mảng bắt đầu bằng 0 trong C# ... –

2

Console.Read() trả về giá trị ASCII của khóa ered. Ví dụ: nếu bạn nhập "A", bạn nhận được giá trị 65 là mã ASCII cho "A".

Bạn sẽ cần phải phân tích chuỗi của bạn đến một số nguyên:

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ũng lưu ý rằng mảng được lập chỉ mục bắt đầu với 0 trong C#, không phải với 1 là mã của bạn giả định. Hoặc bạn vẫn có thể sử dụng Console.Read(), trả về đại diện số nguyên của ký tự được nhập, xác nhận rằng ký tự trên thực tế là một số và chuyển đổi từ mã ASCII thành số thích hợp.

+0

Bắt tốt. Đã sửa lại câu trả lời của tôi. –

+0

Không sao cả. -1 -> +1 – NominSim

+0

TryParse mong đợi tham số ngoài: 'int.TryParse (đầu vào chuỗi, đầu ra int ra);' – rcdmk

2

Từ số docsConsole.Read() "Đọc ký tự tiếp theo từ luồng đầu vào chuẩn".

Bạn muốn Integer tiếp theo, vì vậy cái gì đó như

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

nên làm việc.

+1

Tốt hơn chỉ int.Parse vì không ném - bạn có thể thêm người khác để nói 'vui lòng nhập số thực bạn đánh lừa', v.v. – Charleh

+0

@Charleh Đã cập nhật để hỗ trợ kẻ ngu. – NominSim

+1

Tôi chỉ nhổ đồ uống của mình khi tôi thấy cửa sổ bật lên này trên trao đổi ngăn xếp! – 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(); 
     } 

Như bạn thấy, mảng bắt đầu từ chỉ số 0, vì vậy không có cần phải xác định int [4] (thêm một int hơn bắt buộc), và bạn cần phải lặp từ chỉ số từ 0 đến chiều dài-1

+0

Quên để chuyển đổi từ chuỗi. – spender

+0

Yea ... đã cập nhật :-) – eyossi

2

Vấn đề là bạn đang đọc trong ký tự. Như vậy "51" bạn đang thấy là giá trị thập phân (cơ số 10) ASCII cho số 3.Những gì bạn cần làm là như sau:

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

Đây là mã:

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

     } 
Các vấn đề liên quan