2012-01-15 59 views
1

我有這樣的代碼,SCANF行爲讀取時焦炭

int firstNum; 
int secondNum; 
char operator; 

NSLog(@"Please enter the first number"); 
scanf("%i", &firstNum); 
NSLog(@"Please enter the operator"); //Line 3 
scanf("%c", &operator); 
NSLog(@"Please enter the second number"); 
scanf("%i", &secondNum); 

當我運行它,系統到達3號線,它不會等待用戶輸入一個字符值,而是立即執行下一行。怎麼了?

回答

0

scanf("%c")調用不會跳過空格(請參閱scanf)。

Ç匹配的寬度計數字符(默認值1)的序列;下一個 指針必須是指向char的指針,並且對於所有字符必須有足夠的空間 (不添加終止NUL)。 通常的 跳過領先的白色空間被抑制。要首先跳過空白區域 ,請使用格式中的顯式空格。

因此,讀取第一個整數後,讀取緩衝區中剩餘字符的任何行。

要明確跳過空格,你可以替換成:

scanf(" %c", &operand); 

需要注意的是,如果用戶輸入123 + 234和命中在第一個提示符下輸入,隨後的兩個scanf旨意不會等待任何輸入,但簡單地處理+234

如果這是一個問題,改爲閱讀整行,並使用sscanf