學了一段時間的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函數的使用格式當然還不止這一點,我呢,只要是把我在平時的編程中遇到的容易混淆的小細節給總結出來,使在今後能夠謹慎運用.