2012-11-25 41 views
-4

同時在c項目上工作我發現了以下問題。 我聲明瞭一個浮點變量並對其執行scanf操作。示例代碼 -在c中接受控制檯的值時出錯?

<#include stdio.h>  
<#include conio.h>  
void main()  
{ 
    clrscr(); 
    float foo; 
    scanf(" %f ",&foo); 

    //remaining code goes here 

    getch(); 
} 

我發現,錯誤是由於後在scanf函數聲明%F之前給出的空間。 但我不知道背後的原因是什麼? 謝謝。

+1

什麼錯誤? – iabdalkader

+0

'<#include stdio.h>'是語法錯誤。 'conio.h'是一個古老的DOS事物,不是標準C.'void main'是錯誤的。不要在命令行程序中隨機清除屏幕。要了解更多關於'scanf'的信息,請閱讀它的文檔。 – melpomene

+0

不要忘了'scanf()'告訴你它成功完成了多少次轉換。你需要檢查你是否有一個值被轉換,所以:'if(scanf(「%f」,&foo)!= 1)...處理錯誤...'。 '%f'之前的空間是無害的;無論如何,數字轉換會跳過主要的空白區域(包括換行符)。尾隨的白色空間是有問題的; 'scanf()'在數字後面尋找空格以外的字符,以便知道它已經讀取了足夠的內容。我希望人們在C課程開始時沒有被教過'scanf()';正確使用它是一個非常困難的功能。 –

回答

0

我認爲這可能會對你有所幫助。

函數scanf將讀取並忽略在下一個非空白字符(空白字符包括空格,換行符和製表符 - 見isspace)之前遇到的任何空格字符。

A single whitespace in the format string validates any quantity of 
whitespace characters extracted from the stream (including none). 

也應該像#include<stdio.h><#include stdio.h>

+0

嗨Omkant。 <#include stdio.h>的語法錯誤是我發佈該問題時的錯誤。在%f之後,我瞭解了關於空白的觀點。但是我想知道編譯器實際上做了什麼,當它知道%f後有一個空格時? –