2012-05-10 56 views
0

我試圖從命令行讀取一個非負數或減號,如果輸入不是其中一個程序終止,所以我做了以下內容:scanf()讀取減號並不放回

while((scanf("%d", &n)==1 && n>-1 && (input=1)) || (scanf("%c", &delete)==1 && delete=='-' && (input=2))) 

input是一個整數,並指示將其讀數字或減號(在循環input=1 & input=2意)。

現在,該方案適用於數字,但是如果我輸入一個減號第一scanf()讀它,但不把它放回去apparantly,所以第二scanf()覺得沒有什麼和終止程序。

但是,如果我輸入--(兩個減號),第一個scanf()會讀取一個,第二個scanf()會讀取另一個,它會正常工作。

來自命令行的輸入不能改變,它必須是一個減號。解決這個問題的最好方法是什麼?

請注意,我知道如何使用getchar()來讀取輸入,然後檢查它,但我不想那麼麻煩。

+2

這是一些很骯髒的代碼,你有... –

回答

4

最好的方法是將整行文本讀入緩衝區,然後然後檢查緩衝區的內容,而不是依賴於依賴推回的易讀鏈。

只需使用fgets()sscanf()

+0

嗯,我從來沒有實際使用這些!但是在閱讀完它們之後,我想我會在未來更加適應這些。我改變了我的代碼,現在一切正常。 有沒有特定的情況下,你會推薦scanf()而不是這些? – MinaHany

+2

@MinaHany除了完全丟棄代碼之外,我不這麼認爲,不。 :) – unwind

+0

非常感謝您的幫助! 祝你有美好的一天:) – MinaHany