2013-09-29 102 views
1

我已經看到有關這個話題的其他問題,但沒有一個答案對我有用。如何交換c中struct數組的元素?

我swapClasses方法如下:

void swapClasses(struct ClassInfo *p1, struct ClassInfo *p2){ 
    ClassInfo *temp = p1; 

    *p1 = *p2; 
    *p2 = *temp; 
} 

但是,當我執行的代碼,並嘗試添加應該在技術上首先出現在數組中的一類,它只是添加到末尾。即使我知道代碼的一部分執行(即使用簡單的打印語句進行測試),也不會發生交換。我相信我使用指針的方式有些問題。任何人都可以建議嗎?

+1

C和C++有怪異LIX。由於您使用的是iostream,因此您必須使用C++編譯器進行編譯。因此這個問題應該被標記爲C++。 – Mat

+0

是的......實際上非常令人沮喪。我們應該用C編寫程序,但我們顯然需要cin.getline()函數(代碼的那部分已經由我的教授編寫)。我應該做的每件事都必須用C編寫。我已經添加了C++標記,因爲你已經提出了它。 – rphello101

+1

@ rphello101你在什麼意義上「需要」cin.getline()函數?你可以通過在C中調用'fgets(buffer,sizeof buffer,stdin)'來做同樣的事情。另外,我建議你修改指針,你犯了一個微不足道的錯誤。 – 2013-09-29 04:43:17

回答

4

獲取指向數組元素的指針不會保存該元素不被寫入通過指向它的另一個指針覆蓋。所以你的交換功能是錯誤的。你應該複製的第一個項目進入暫時的,就像這樣:

void swapClasses(struct ClassInfo *p1, struct ClassInfo *p2){ 
    ClassInfo temp = *p1; 
    *p1 = *p2; 
    *p2 = temp; 
} 
+0

我試着按照你的建議更換swapClasses。現在,當我添加一個類時,數組中的舊元素保持不變,並且我輸入的新元素被添加到末尾,但是完全空白......(通過打印數組的函數可以看到)任何想法? – rphello101

+0

@ rphello101在你的代碼中也可能存在其他的bug,在這種情況下:)我指出了這個問題,因爲這乍一看是完全明顯的,但要完全誠實:你的代碼很長,很難閱讀(由於缺乏空白),我沒有真正的校對能力(這裏是7AM)。 – 2013-09-29 04:58:30

+0

對於我的生活,我無法在其他地方發現錯誤。我知道有些事情正在發生,我希望你的解決方案就是答案......我已經花了上週的時間與這個計劃進行鬥爭。它在2個小時內到期。我們會看看是否有人有時間幫助我... – rphello101