2011-10-20 59 views
1

我需要編寫一個程序,其中在運行期間,將任意大小的整數集作爲輸入。它們將被空白區分開。最後,給出一個新行,顯示輸入結束。如何將它們保存到整數數組中,以便以後可以顯示它們。我認爲這有點困難,因爲在編譯期間輸入的值的數量不知道在運行期間通過輸入獲取值並對它們進行抽取

回答

0

聽起來像作業。

糾正我,如果我錯了,我會給你更多的提示。

你可以聲明一個真正大小的數組,不會被用戶輸入填充,然後使用scanf或類似的東西來獲取整數,直到你點擊'\ n',或者你可以抓住每個整數一次,隨時分配內存,使用malloc和memcpy調用的組合。第一種選擇不應該在現實世界的問題中完成,即使你的教科書可能會告訴你這樣做,我當然也不會提倡這種做法。

只是有這樣的以K & R.

一個例子這是你將不得不在C的解決方案通常是兩個選項之一的一個典型問題。

  1. 使用一個真正的大數組,它是大到足以容納輸入。當數據可能非常大時,有時這是一個糟糕的選擇。當你將一個視頻幀或一個大文本文件保存到陣列時,一個壞主意的例子就是這個例子。這也會讓您在舊版本的Windows中出現緩衝區溢出攻擊。然而,對於較小的(家庭作業)程序,這有時是一個很好的快速解決方案,您可以指望用戶(即不想破壞程序的教授)不輸入1000個字符。通常這被認爲是不好的做法,請考慮我的第二個選擇,因爲我之前提到的安全原因。

  2. 使用動態數組(即malloc)。這可能是你的教授希望你做的事情,因爲這聽起來像是一個學生第一次學習指針和數組時所使用的典型問題。這是一個很好的方法,只需記住在完成時給你的記憶打電話。這裏棘手的部分是,你仍然需要提前知道你想要的數組的大小(當然不是在編譯時)。

+0

在一個關鍵任務的高安全性應用程序「不會可以通過對用戶輸入裝」直到有一次......有安全的(R)功能與其它解決方案相比希望神靈用戶不會讓你感到驚訝。 – ssube

+0

@peachykeen。我們並不是在談論關鍵任務高安全性應用程序,而是在談論一個作業問題。程序員有很多次這樣做。我不能告訴你我讀了多少次:char buffer [1000]; memset(buffer,'\ 0',1000);在其他(衆所周知的)程序之前進行用戶輸入。 –

+1

當然,在這種情況下,你可以和人們都有,而且它不會在美國航空航天局運行,但是絕對沒有任何理由使這種做法永久化。它在現實生活中的不良使用導致了整個類別的錯誤(緩衝區溢出),其中一些錯誤具有實際的安全隱患。 – ssube

相關問題