2010-10-27 37 views
1

我需要在flare一詞的末尾添加一個數字,具體取決於我有多少。這部分工作很好。我的問題是當我將它打印到屏幕上時。我希望該程序輸出什麼(Camera :: Table [Id] - > sensor-> flare1)傳感器指向的值,在這種情況下,會出現一個。如果程序繼續運行,它會輸出指向flare2,flare3,flare4,...的值,直到達到極限。
我得到的輸出如下:C++,需要幫助與strcat創建的指針!

lens_pos1=¨Camera::Table[Id]->sensor->flare1¨ 
lens_pos2=¨Camera::Table[Id]->sensor->flare2¨ ....... 

我怎麼能輸出flare1的值,而不是粘貼的串?

我想是這樣的:當值10.3,12.4將是那些flare1和flare2分別從一個單獨的C文件採取

lens_pos1=¨10.3¨ lens_pos2=¨12.4¨..... 

for(int i = 1; i <= nbflares; i++) 
{ 
    char integer_string[32]; 
    sprintf(integer_string, "%d", i); 
    char flare[100] = "Camera::Table[Id]->sensor->flare"; 

    strcat(flare,integer_string); 

    fprintf(yyout, "lens_pos%d=\"%s\" ",i,flare); 
} 
+0

什麼類型的照相機:表[ID] - >傳感器,以及什麼類型的照相機:表[ID] - >傳感器 - >耀斑? – 2010-10-27 22:09:00

+0

在定義所有結構的文件,我有以下: – gianx 2010-10-27 22:17:11

+0

在定義所有結構的文件,我有以下: 相機//構造析構 在相機我已經傳感器,光 在傳感器,我: float flare = 10.2 // flare1,flare2,.. float flarescale = 11.2 // flarescale1,flarescale2,... char * flaretext = 12.2 // flaretext1,flaretext2,... 這些是成員I想要一般地訪問,而不是粘貼一堆代碼,並用各種if語句逐一訪問。有沒有一種方法可以在不使用數組的情況下訪問它們? – gianx 2010-10-27 22:24:02

回答

3

您無法訪問類似於C/C++中的變量。您必須重新設計「傳感器」結構以包含數組而不是單個耀斑,並通過索引訪問數組:Camera :: Table [Id] - > sensor-> flare [1],Camera :: Table [Id] - > sensor-> flare [2]等。

+0

@Merlyn Morgan-Graham:問題顯示sensor-> flare1,sensor-> flare2,它支持這個答案的相關性。 – 2010-10-28 04:37:47

1

這不能在C++中完成。某些解釋語言可能會允許這樣的事情,因爲源代碼的文本在程序運行時仍然存在。但是在C++中,當你編譯一個程序時,所有的類和變量名都會丟失。當它到達一個正在運行的可執行文件時,實際的機器指令只是處理偏移量和內存地址。

因此,您需要重新設計數據的存儲方式。

有沒有一種方法可以在不使用數組的情況下訪問它們?

技術上,是的。但只有通過使用更復雜的方案才能涉及更復雜的數據結構(如鏈接列表或地圖)。

爲什麼你要避免數組呢?現在你有一系列相同類型的變量,你想用數字來區分它們的名字。數組是一系列相同類型的變量,它們通過數組中的索引進行區分。這幾乎是一場完美的比賽。

舉例來說,如果你有一個flares陣列,那麼你可以簡單地這樣做:

for(int i = 0; i < nbflares; i++) 
{ 
    fprintf(yyout, "lens_pos%d=\"%f\" ", i, Camera::Table[Id]->sensor->flares[i]); 
} 
+0

謝謝!我覺得可能有一種更簡單的方法,因爲我只是在編程體驗的開始階段。如果數組是最簡單的方法,那麼我將採用這條路線。我只是希望有一條線可以添加到代碼中以不同的方式輸出,但我猜不是。 – gianx 2010-10-28 01:36:47