2014-02-26 35 views
2

假設我有一個有50個整數的結構。有沒有辦法打印出每個整數的值,而無需手動輸入?如何打印結構的每個成員

實施例:

struct foo 
{ 
    int one; //= 1 
    int two; //= 2 
    int three; //= 3 
    ... 
    int fifty; //= 50 
}; 
int main() 
{ 
    foo bar; 
    int dream; 
    cout << someThing(bar) //prints 12345...50 
} 

編輯: 我實現這樣的數據應被存儲在數組中,這僅僅是一個假設性的問題。 我只是好奇,如果這樣的事情存在。

+0

你可能不應該有這樣的結構。這就是陣列的用途。 – meagar

+3

其中有50個整數的結構?立即重新思考你的設計 – Borgleader

+0

你如何分配int one = 1;值直接構造成員? – Sumeet

回答

3

那麼,你也許應該用於在首位這樣的事情,因爲數組會作出這個任務就輕鬆多了:-)

但是,你可以嘗試鑄造結構到一個數組並打印出來。有沒有保證,將在每一個執行工作,因爲它可能是結構得到不同的填充到一個數組,但我無法想象爲什麼,但你可能會得到幸運:

int *base = (int*)(&bar.one); 
for (int i = 0; i < 50; i++) 
    std::cout << "Item #" << (i + 1) << " = " << base[i] << '\n'; 

通過舉例的方式,下面的程序:

#include <iostream> 

struct foo { 
    int one, two, three, four; 
}; 

int main() { 
    foo bar; 
    bar.one = 42; 
    bar.two = 314159; 
    bar.three = 271828; 
    bar.four = 1414; 

    int *base = (int*)(&bar.one); 
    for (int i = 0; i < 4; i++) 
     std::cout << "Item #" << (i + 1) << " = " << base[i] << '\n'; 
    return 0; 
} 

輸出該:

Item #1 = 42 
Item #2 = 314159 
Item #3 = 271828 
Item #4 = 1414 

在我的環境(7的Debian,G ++ 4.7.2):

但是,如果你想對待他們像一個數組,他們真的應該一個數組。

+0

很酷,這是真正的切肉刀。謝謝。 – user3331346

+0

初始化其定義中的結構成員不是一個錯誤嗎?問題中的代碼片段顯然是錯誤的,應該糾正。 – ajay

+1

@ajay這是自C++ 11以來的工作原理,並且是一種很好的方式,可以在不編寫自己的構造函數的情況下爲簡單結構提供預定義的初始化。 – Excelcius