2017-12-14 136 views
8

Trong tuyên bố nàyWhats thuật ngữ cuối cùng làm gì?

for (i = 1; i <= n; i++) { 
    cout << i << " \n"[ i == n ]; 
} 

thuật ngữ cuối cùng trong cout tuyên bố [i==n] làm là gì? Vòng lặp này in số không gian riêng biệt mà tôi đoán.

+1

Có thể trùng lặp [Làm cách nào để nhận ký tự thứ n của chuỗi?] (Https://stackoverflow.com/questions/8454228/how -can-i-get-the-nth-ký tự-of-a-string) –

+1

@underscore_d: Chắc chắn là không. Lưu ý biểu thức bất thường trong '[i == n]'. – MSalters

+1

và thông qua đánh giá boolean tiêu chuẩn, 'i == n' trở thành' 0' hoặc '1'. Vì vậy, một khi ai đó biết những gì '" foo "[bar]' hiện, '" foo "[i == n]' có vẻ tầm thường với tôi. –

Trả lời

6

Đó là cách ngớ ngẩn để lập chỉ mục hoặc là ký tự ' ' hoặc ký tự '\n'. Đây không ý tưởng và in cùng "Hello World":

#include <iostream> 

int main() { 
     for (int i = 0; i < 11; i++) 
       std::cout << "Hello World"[i]; 
     return 0; 
} 

i == n được hoặc sẽ true hoặc false. Khi truyền tới một số nguyên để lập chỉ mục bằng cách sử dụng [i == n], bạn sẽ nhận được phần tử đầu tiên hoặc thứ hai

+0

Sử dụng đúng cách vòng loại ngớ ngẩn (Nó phải được chuẩn hóa)! – Oliv

+0

Tuyệt vời! Chỉ có, tôi sẽ trao đổi các đối số thành '[]' để có chất lượng bổ sung. 'i [" Hello World "]'. ;-) –

13

Nó là một cách u mê viết:

(i == n ? '\n' : ' ') 

Đó là, khi i == n, một dòng mới được in, nếu không một không gian được in ra.

Ý tưởng là tách các số theo khoảng trắng và đặt một dòng mới sau khi tất cả các số đã được in.

+1

Không bao giờ thấy điều này trước đây! – CinCout

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