對scanf函數的認識

           學了一段時間的C語言,雖然能夠編寫一點點小程序,但是回頭再次看書的途中,突然覺得又收穫了不少知識,尤其是對格式化輸入/輸出函數的理解和應用方面.我想把我對輸出函數scanf的運用總結一下,希望能對自己或他人(尤其是初學者)有幫助.

        scanf函數稱爲格式化輸出函數,即按照用戶指定的格式從鍵盤上把數據輸入到指定的變量之中.它是一個標準庫函數,他的函數原型在頭文件"stdio.h"中.scanf函數的一般形式爲:

        scanf("格式控制字符串",地址列表); 比方說:

      #include <stdio.h>
     int main(void)
      {
         float  a;

         printf("請輸入變量a的值: \n");
         scanf("%f",&a);

        printf("a=%2.3f\n",a);   

       }

       雖然他的用法看起來很簡單,但是,我剛開始的時候總是與printf函數搞混淆(因爲兩者的調用形式很像),其實這兩個函數有很大的區別,因此在使用scanf函數的時候有很多講究,一不小心就會出現小錯誤.

       首先,scanf函數不能顯示非格式字符串,也就是說不能顯示提示字符串,.如上面的語句中printf函數就可以有中文提示信息,而scanf函數中就不能有中文出現;

       其次,scanf函數中沒有精度控制,也不能有換行轉義字符"\n",這和printf不一樣.如上面的語句中,如scanf語句中寫成scanf("%2.3f",&a)和scanf("%f\n",&a)都是非法的;

       再次,scanf函數中要求給出變量的地址,如給的是變量名就會出錯哦,即scanf("%f",a)是非法的;

       再次,這一點是最容易搞錯的,在輸入字符數據時,若格式控制串中沒有非格式字符,則認爲所有輸入的字符均爲有效字符.如:

int main(void)
{
 char  i,k,j;
 scanf("%c%c%c",&i,&j,&k);

 printf("i=%c,   j=%c,   k=%c",i,j,k);

}

        輸入和顯示結果爲:如輸入字符a b c,則把'a'賦給變量i,''賦給變量j,'b'賦給變量k.只有當輸入爲abc時,才能是這樣的輸出結果:i=a,   j=b,   k=c.

        當然如果格式控制串中有非格式字符,則輸入時也要輸入該非格式字符,如:

#include <stdio.h>
int main(void)
{
 char  i,k,j;
 scanf("%c,%c,%c",&i,&j,&k);
 printf("i=%c, j=%c, k=%c",i,j,k);
}

         輸入時應該是:a,b,c.顯示結果爲:i=a, j=b, k=c.

最後,在scanf函數中,如果有"*"符,用以表示該輸出項,讀入後不賦予相應的變量,即跳過該輸出值.如:

#include <stdio.h>
int main(void)
{
 int i,k;
 scanf("%d  %*d  %d",&i,&k);
 printf("i=%d,  k=%d",i,k);

}

          當輸入三個數字爲: 23  12  34時,顯示結果應爲:i=23,  k=34.

         對於scanf函數的使用格式當然還不止這一點,我呢,只要是把我在平時的編程中遇到的容易混淆的小細節給總結出來,使在今後能夠謹慎運用.

 

 

 

 

      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章