2009-06-11 19 views
17

Tôi đã nhìn thấy điều này nhân dịp trong những cuốn sách tôi đã đọc. Nhưng tôi không tìm thấy lời giải thích nào cả."for (;;)" làm gì trong C#?

for (;;) 
{ 
    // Do some stuff. 
} 

Có phải kiểu như "while (true)" không? Về cơ bản là một vòng lặp vô tận cho việc bỏ phiếu hoặc một cái gì đó? Về cơ bản một cái gì đó bạn sẽ làm cho đến khi bạn cố ý phá vỡ vòng lặp?

+8

7 câu trả lời trong phút đầu tiên sau khi đăng câu hỏi! – SPWorley

+2

Có chức năng giống nhau. Tôi thích trong khi (true) vì các vòng lặp thực sự có chức năng bổ sung cho việc lặp lại, ngoài việc chỉ kiểm tra điều kiện. Một số người thích (;;) vì họ đọc nó mãi mãi. – justinhj

+1

Trong C# 4 ký tự trong "(;;)" thực sự chuyển thành "bao giờ" - do đó mãi mãi :) – Hugoware

Trả lời

48

Có phải kiểu như "while (true)" không?

Có. Nó lặp lại mãi mãi.


Cũng lưu ý những nhận xét của Andrew Coleson:

Ngôn ngữ như C không có built-in nguyên thủy boolean, vì vậy một số người thích for (;;) trong khi (1)

+1

Tôi không hiểu tại sao điều này có 22 phiếu bầu, với các câu trả lời tương tự khác. –

+4

Nó đã đúng, và nó đã được đầu tiên. Nó xảy ra. Tôi đã không kiếm được bất kỳ đại diện cho nó - đã được giới hạn ngày hôm nay. –

+0

Đó là số lượng phiếu bầu tuyệt vời! – RichardOD

9

Vòng lặp mãi mãi.

17

Bạn là chính xác. Đây là một thành ngữ C# chung cho một vòng lặp vô tận.

12

Có, Đây là vòng lặp vô hạn.

8

Có, đó là vòng lặp vô hạn. Ý tưởng/hiệu quả giống như đang thực hiện while(true) { ... }

20

Có.

Trong một vì nếu không có gì được cung cấp:

  • Các khởi động không có gì.
  • Điều kiện là luôn luôn đúng
  • Tuyên bố đếm không làm gì

Nó tương đương với while (true).

+6

Hay điều kiện đó không bao giờ là sai? –

+0

@ theOtherScott, tôi nghĩ bạn nói đúng. –

8

Inifinite loop như nói

while (0<1) 
+0

"trong khi (1)" sẽ không biên dịch trong C#. trong khi mong đợi một bool, không có cast tiềm ẩn từ int đến bool. –

+0

bạn nói đúng, bạn sẽ phải tự đúc nó, nhưng nó chắc chắn hoạt động trong C++, nhưng tôi đã thay đổi nó thành một ví dụ tốt hơn – TStamper

+0

Nếu tôi là ≥ 2 để bắt đầu thì sao? Một ví dụ tốt hơn sẽ là một cái gì đó như "trong khi (3 <4)". – ShreevatsaR

10

Vâng, đó là một vòng lặp vô tận, giống như while (true).

Đó là quy ước được ưa thích một chút, có thể vì quy trình này ngắn hơn. Không có sự khác biệt về hiệu quả.

6

Để chính xác, bất kỳ vòng lặp nào không có bất kỳ thứ gì giữa dấu chấm phẩy sẽ lặp mãi mãi (cho đến khi kết thúc bằng một số phương tiện khác), bởi vì nó không có bất biến được xác định.

13

đúng.Lưu ý rằng niềng răng của một vòng lặp for chứa ba phần:

  1. đang khởi
  2. Một điều kiện để tiếp tục vòng lặp
  3. Cái gì đó được thực hiện cho mỗi vòng lặp

Với for(;;), tất cả trong số này là rỗng, vì vậy không có gì được thực hiện để khởi tạo vòng lặp, không có điều kiện để giữ cho nó chạy (tức là nó sẽ chạy vô thời hạn) và không có gì được thực hiện cho mỗi lần lặp ngoại trừ nội dung của vòng lặp.

11

Nếu tôi nhớ chính xác nó sử dụng trên "while (true)", là nó nhiều hơn giống như "for (;;) // bao giờ"

+2

+1 cho trò chơi chữ. –

4

Nó không có một điều kiện kết thúc, vì vậy nó sẽ lặp mãi mãi cho đến khi nó tìm thấy một break, như bạn đã đoán.

9

Hãy xem vòng lặp for.

for (initialization ; condition ; increment ) 

1) khởi - thiết lập một biến truy cập ở đây
2) trạng - giữ lặp cho đến khi biến đếm đáp ứng điều kiện
3) increment - tăng bộ đếm

Nếu không có điều kiện, vòng lặp sẽ tiếp tục mãi mãi. Nếu nó như vậy, thì không cần thiết phải truy cập. Do đó

for(;;) 
1

Thường được sử dụng trong lập trình được nhúng.

ngắt và hẹn giờ cài đặt. - vòng lặp mãi mãi.

Khi xảy ra gián đoạn hoặc hẹn giờ sẽ được xử lý.

4

tôi cũng có thể thêm rằng nó trông giống như 2 mặt cười khuôn mặt nháy mắt với bạn

for (;;)

có lẽ đó là lý do tại sao một số người muốn sử dụng nó.

+0

Cảm ơn bạn, tôi thích câu trả lời của bạn:] –

4

Có, nó lặp lại mãi mãi. Nhưng lý do tại sao bạn nên sử dụng

for(;;) 

thay vì

while(true) 

while(true) 

sẽ cung cấp cho bạn một cảnh báo trình biên dịch "biểu thức điều kiện liên tục", trong khi cho -vòng không. Ít nhất bạn sẽ nhận được cảnh báo trình biên dịch như vậy ở mức cảnh báo cao nhất.