2013-05-31 53 views
-5

我一直在爲此搜索一段時間,但無法找到答案。如果有人知道如何做到這一點,我將不勝感激!如何在沒有確定的輸入量的情況下使用scanf

問題:我必須編寫一個程序來存儲一些數字,但我不知道會有多少數字!我能做什麼?

我想知道是否可以使用計時來完成任務。我的意思是,如果5秒過去了,並且沒有輸入數據,那麼就開始處理這些數字。它會工作,但我無法編碼。有人可以幫忙嗎?

+1

通常情況下,您會期望某種終結符,例如, CR/LF或文件結尾。有什麼理由不能依靠這個嗎? –

+1

如果你用C++編寫,你可能不應該使用'scanf()'。如果你用C語言編寫,你最好直接使用'fgets()'或'getline()',然後'sscanf()'而不是'scanf()'。如果你正在使用'scanf()',那麼'while(scanf(「%d」,&x)== 1){...將x保存到動態分配的數組中......}就可以了。 –

+0

用戶將手動輸入數據,不能要求任何種類的終結符。順便說一句,我正在C寫作。 –

回答

2

1)第一個解決方案:

您可以要求用戶在開始輸入所需元素的數量。

2)第二個解決方案:

請掃描號碼,直到你從用戶那裏得到EOF。和存儲輸入數成鏈接的列表或動態分配的數組(調整你數組大小枝條的realloc

3)第三溶液

保持掃描數字與一個超時。如果在超時期間沒有輸入,那麼程序將認爲用戶已完成輸入數字,然後程序停止從標準輸入讀數。輸入數字可以存儲到鏈接列表或動態數組中,如第二種解決方案所示。使用select()scanf()以便增加超時行爲,如此處所示answer

+0

嘿,謝謝你的回答! 1)不能這樣做,輸入數據將不會有數量的數量。 2)EOF不僅在讀取FILE * f時返回? 在此先感謝! –

+1

(1)用戶不擅長計數;要求'多少'不適合使用的程序 - 對於所有編程練習似乎都這樣做。也許這是來自Fortran 66的遺留物,然後才能依靠檢測EOF。 (2)爲什麼一個鏈表?爲什麼不是動態分配的數組? –

+0

@JonathanLeffler也是一個很好的解決方案。我會更新我的答案,謝謝 – MOHAMED

相關問題