2017-12-14 51 views
8
このステートメントで

最後の言葉は何をしていますか?

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

cout声明[i==n]がやっての最後の項は何ですか? このループは、スペース別の数字を出力します。

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

i == n、改行が印刷されそうスペースが印刷され、:

+1

[文字列のn番目の文字を取得するにはどうすればよいですか?](https://stackoverflow.com/questions/8454228/how -in-get-the-nth-a-stringを得ることができます) –

+1

@underscore_d:間違いなく。 '[i == n]'の珍しい表現に注意してください。 – MSalters

+1

であり、標準的なブール評価によって、 'i == n 'は' 0'または '1'になります。だから、誰かがfoo "[bar]が何をするかを学ぶと、" foo "[i == n]'は私にとっては些細なことです。 –

答えて

6

' 'の文字または'\n'のいずれかをインデックスするのは馬鹿様です。これは、同じ考えや版画 "Hello World" のん:

#include <iostream> 

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

i == nのいずれかであるtrueまたはfalseになるだろう。 [i == n]を使用してインデックス付けする整数にキャストすると、第1または第2の要素が返されます

+0

愚かな修飾子の正しい使用(これは標準化すべきです)! – Oliv

+0

素敵!ただ、私は引数を '[]'にスワップして品質を向上させます。 'i [" Hello World "]'。 ;-) –

13

それは執筆の鈍角方法があります。

考えられるのは、数字をスペースで区切り、すべての数字を印刷した後に改行を入れることです。

+1

前にこれを見たことがありません! – CinCout