2016-01-13 78 views
-4

我是C新手,不理解循環語法的這種類型。循環語法的C++

for(int i(9), j(0); i > j; i--, j++) 
cout << i; 

這給出了98765的結果,但是爲什麼?

我已經習慣了循環是這樣的:

for(int i = 9, int j = 0; i>j; i--, j++){ 
System.out.println(i); 
} 

我看到,我被初始化爲9和j爲0,但它是如何得到一個數字那麼大?

+5

這聽起來像您可能需要學習如何使用調試器來逐步執行代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。詳細閱讀:** [如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

+0

'cout << i << endl; '會產生與Java源代碼相同的輸出 – StahlRat

+1

你究竟對此感到困惑?整數初始化,使用逗號運算符,還是爲什麼您的輸出不會刷新到終端? –

回答

10

它按預期打印9,8,7,6,5,沒有任何逗號。它不是一個大數字。

System.out.println() - 在最後打印一個新行。

cout - 行爲方式與System.out.print()類似,不會在最後打印換行符。

+0

也許你可以提到'cout <<'不像'System.out.println'不會添加'\ n'字符;) – MrHug

+0

@MrHug謝謝你的建議。編輯我的答案。 – Atri

+0

'\ n'是錯誤的。 'endl'是正確的... http://stackoverflow.com/questions/7324843/why-use-endl-when-i-can-use-a-newline-character – Centril

3

因爲不打印新的行字符:

因爲空白被忽略
for(int i(9), j(0); i > j; i--, j++) 
    cout << i << '\n'; 
0

縮進不會用C++沒關係...

因此,

for(int i(9), j(0); i > j; i--, j++) 
cout << i; 

的是相同:

for(int i(9), j(0); i > j; i--, j++) 
    cout << i; 

這是:

for(int i(9), j(0); i > j; i--, j++) { 
    cout << i; 
} 

所以它不是1號碼,但很多。

這在Java和大多數C族語言中都是一樣的。

println從System.out的(一個PrintStream)... <<只寫你傳遞什麼cout,通常是標準輸出。 要正確寫一個換行符cout你應該使用:

cout << i << endl;

更多見Why use endl when I can use a newline character?

+1

這不是OP所困惑的,我認爲 – MrHug

+0

@MrHug嗯 - 從他的問題來看,這並不明確,所以它可能就是他問到的問題......問題的標題是「C++ for循環語法」,而不是:「 C++:如何打印換行符?「而'endl'是最正確的方法...不是'\ n'。 答案應該記住所有人,而不僅僅是OP ...那些倒票是不公平的。 – Centril

+0

你是對的,但我會建議在一篇文章中解決多個問題,而不是最不可能的問題(因爲他的困惑是關於「大數」而不是它編譯的事實) – MrHug

2

我只是想添加一些已經在這裏張貼的(好)答案:

int i(9);

做同樣的事情

int i = 9;

這就是所謂直接初始化。看看:Constructor of type int

我認爲這是什麼混淆你在第一個地方。

0

它沒有打印大數字,它只是在每個迭代/循環中一個接一個地打印i。要了解使用此

cout << i << endl; 

,或者嘗試不同的編號爲ij

0

這不是一個大數目。實際上,輸出是5個不同的數字(9,8,7,6,5)。 你只需要通過以下方法來打印他們在不同的線路:

cout<<i<<endl; 

OR

cout<<i<<"\n"; 

OR

printf("%d\n",i); 

還有一兩件事: INT I(9)簡單地轉讓值9給我。它與int i = 9相同。