2013-10-08 21 views
1
scanf("%d",&n); 

如果用戶輸入'E',那麼會在n中存儲什麼? 當用戶輸入'E'時,我必須停止輸入,並將輸入作爲整數。如何知道scanf何時中止?

+0

您正在掃描「E」的%d格式說明符? – Sadique

+0

實際上,我必須把整數作爲輸入,並在用戶輸入時停止輸入E –

+0

爲什麼在世界上你會使用E?只需使用你的程序不會使用的值 - 可能是-1? – Sadique

回答

1

您必須檢查scanf返回的內容。如果你輸入「E」並有%d,那麼你將會有所謂的匹配失敗。 檢查以下scanf手冊頁(它適用於linux,但一般應該是相同的):scanf man page

2

scanf返回匹配元素的數量。

返回值

這些函數返回成功匹配 和分配輸入項目,其可爲少於規定的,或早期匹配失敗的甚至在 零事件的數量。

你可以這樣做:

while(scanf("%d", &n) == 1) { 
    // do something with n 
} 
+0

這worked..thanks很多 –

-2

你需要得到兩件事情從scanf信息:

  1. 無論分配什麼n,並
  2. 多少個字符它消耗了(如果您使用的是sscanf)。

scanf返回它已經完成了多少分配。所以如果它成功分配到n,它將返回1,否則它將返回0.

我在這裏假設輸入應該是一個浮點寫出mantissaEexponent,但這是隻是爲了說明的目的。對於標準輸入(scanf):

int mantissa, exponent; 
int mantissaSet = 0, int exponentSet = 0; 
mantissaSet = scanf("%d", &mantissa); 
char c = getc(); 
if (c != EOF && c == 'E') { 
    exponentSet = scanf("%d", &exponent); 
} 
if (mantissaSet) { ... /* mantissa was set */ } 
if (exponentSet) { ... /* exponent was set */ } 

當從字符串得到輸入,你需要知道到哪裏尋找'E'如果有一個輸入,所以你需要添加一個%n轉換來獲取這些信息出。下面的代碼說明它如何工作的字符串(與sscanf):

const char * string = "1234E56"; 
int mantissa, exponent; 
int mantissaSet = 0, exponentSet = 0; 
int charCount = 0; 
int mantissaSet = sscanf(string, "%d%n", &mantissa, &charCount); 
if (string + charCount == 'E') { 
    exponentSet = sscanf(string + charCount + 1, "%d%n", &exponent, &charCount); 
    ... 
} 
+0

-1臃腫的回答充滿了unrelevant東西 –

+0

@KarolyHorvath:。這怎麼unrelevant是超越我的提問者顯然想獲得看似可選的整數,然後是一個可選的E和一個整數。我已經展示瞭如何做到這一點t,同時使用'scanf'和'sscanf',因爲'sscanf'的技巧是不同的。這是爲了完整。我不認爲單線球員對於新手式問題是非常有用的,因爲需要更多的指導。這就是所謂的教育學,你知道。那些新的答案並不是真空。 –

+0

「當用戶輸入'E'時,我不得不停止輸入」 - 我猜E代表退出。 –