2014-03-28 94 views
0
cout<<"Set B : {"; 
for(i=0;i<b;i++) 
{ 
    cout<<setB[i]; 
    cout<<","; 
} 
cout<<" }"<<endl; 

上面的代碼不打印正確。它應該打印設置B:{1,2,3}但打印額外的逗號==>設置B:{1,2,3,}For循環打印一個額外的逗號

任何幫助,將不勝感激。提前致謝!

+4

你認爲會有更少的逗號打印爲什麼比元素? –

+0

[用逗號打印列表C++]可能的重複](http://stackoverflow.com/questions/3496982/printing-lists-with-commas-c) – Potatoswatter

回答

14

使用

cout << "Set B : {"; 

for (i = 0; i < b; ++i) { 
    if (i > 0) cout << ","; 

    cout << setB[i]; 
} 

cout << " }" << endl; 

我改變你的算法

之前,它的意思是: 「把數,然後把昏迷」

現在,它的意思是:「如果有一個在我身後的數字發生昏迷,然後把數字「

之前,你打印一個數字時,你總是打印昏迷,所以你有一個e xtra昏迷。

+1

'++ i'請!即使是現在,編譯器優化也會克服...... –

+1

你說得對,我把它改了:) –

1

循環代碼打印一對數字和逗號。嘗試使用這一個:

cout<<"Set B : {"; 
for(i=0;i<b;i++) 
{ 
    cout<<setB[i]; 
    if(i < b-1) cout<<","; 
} 
cout<<"}"<<endl; 
1

你循環執行COUT < < 「」 3倍。下面將爲你想要什麼:

#include <iostream> 

using namespace std; 

int main(){ 

int setB[] = {1,2,3}; 

cout<<"Set B : {"; 
for(int i=0;i<3;i++) 
{ 
    cout<<setB[i]; 
    if (i < 2) 
     cout<<","; 
} 
cout<<" }"<<endl; 

return 0; 
} 
+0

+1這很好,但'2'值是一個額外的維護點.... –

+0

同意。我在這裏列出的代碼沒有通過任何方式進行優化。只是爲了澄清我的解釋。 – RichS

2

個人而言,我喜歡這個更好的解決方案。您首先打印出第一個元素,然後輸出, [second element]。如果數組爲空

cout <<"Set B : {" << setB[0]; 
for(i = 1; i < b; i++) 
{ 
    cout << ","; 
    cout<<setB[i]; 
} 
cout << " }" << endl; 

警告!:這是不行的。

+2

+1對於這種情況非常適用,但通常必須小心 - 如果setB爲空,'setB [0]'將是未定義的行爲。 –

4

對於for循環的每次迭代,程序將在for循環內執行-everything-。因此,您的循環會遍歷並在您的設置中打印每個數字,然後輸入一個逗號。

問題是,即使在上次運行循環時,它也會打印逗號,因爲它是循環的一部分。

cout << "Set B : {"; 
for(i = 0; i < b; i++){ 
    cout << setB[i]; 
     if (i < (b-1)) 
      cout << ","; 
} 
cout << " }" << endl; 

此代碼將運行完全相同,除了第二次到最後一次它通過循環運行時,它不會打印逗號。不需要太花哨。:)

0

如果你可以使用STL,請嘗試以下操作:

#include <iterator> 
#include <iostream> 

int main() { 
    int setB[]{1,2,3}; 
    std::cout << "Set B : { "; 
    for(auto i = std::begin(setB), e = std::end(setB); i != e;) { 
     std::cout << *i; 
     for(++i; i !=e; ++i) { std::cout << ", " << *i; } 
    } 
    std::cout << " }" << std::endl; 
    return 0; 
} 
+0

它也打印一個額外的逗號。 – songyuanyao

+0

不幸的是,這會在每個元素之後打印逗號。見http://ideone.com/yBb4QR –

+0

有一個自定義迭代器的解決方案[這裏](http://stackoverflow.com/questions/17355864/stdostream-iterator-prevent-last-item-using-the-delimiter) –

0

我經常處理這些循環要放像項目清單之間的空格或逗號方式是這樣的:

int main() 
{ 
    // initially the separator is empty 
    auto sep = ""; 

    for(int i = 0; i < 5; ++i) 
    { 
     std::cout << sep << i; 
     sep = ", "; // make the separator a comma after first item 
    } 
} 

輸出:

0, 1, 2, 3, 4 

如果你想讓它更高速高效的可輸出輸入迴路輸出其餘項目像在此之前使用if()第一項:

int main() 
{ 
    int n; 

    std::cin >> n; 

    int i = 0; 

    if(i < n) // check for no output 
     std::cout << i; 

    for(++i; i < n; ++i) // rest of the output (if any) 
     std::cout << ", " << i; // separate these 
}