一、數據輸入
編寫程序的主要目的就是爲了處理數據。數據從哪裏來?數據的來源有很多種方式,如從磁盤文件中讀取數據、從數據庫中讀取數據、從網頁中抓取數據等,還有一種原始的方式就是從鍵盤輸入數據。
在C語言中,有三個函數可以從鍵盤獲得用戶輸入。
getchar:輸入單個字符,保存到字符變量中。
gets:輸入一行數據,保存到字符串變量中。
scanf:格式化輸入函數,一次可以輸入多個數據,保存到多個變量中。
二、斷章取義
三十年前,個人電腦還不流行的時候,軟件主要用C語言編寫,包括操作界面,數據的輸入和輸出函數都很重要。現在,數據的輸入和展示由網頁和APP等軟件去完成,C程序主要用於數據處理和網絡通信,程序運行在後臺,沒有操作界面。所以,getchar、gets、scanf這幾個函數幾乎不用。
如果您是初學者,採用scanf從鍵盤輸入數據,便於演示程序的功能,所以我們只需要學習scanf函數的簡單用法即可,getchar和gets函數無需關注。
三、scanf輸入
scanf函數是格式化輸入函數,用於接受從鍵盤輸入的數據,用戶輸入數據完成後,按回車鍵(Enter)結束輸入。
scanf函數的調用方法是:
scanf(格式化字符串,參數列表);
注意,不要在scanf的格式化字符串的最後加\n。
1、輸入整數
輸入整數的格式用%d表示,在參數中列出整數型變量名,用於保存輸入的數據。
在輸入數據之前,一般要先輸出一句話提示用戶。下同。
int age=0;
printf("請輸入您的年齡:"); // 提示文字不要換行,讓用戶在後面輸入,下同。
scanf("%d",&age); // 在變量名前要加符號&,取變量的地址。
2、輸入字符
輸入字符的格式用%c表示,在參數中列出字符型變量名,用於保存輸入的數據。
char xb=0;
printf("請輸入您姓別:");
scanf("%c",&xb); // 在變量名前要加符號&
3、輸入浮點數
輸入浮點數的格式用%lf表示,在參數中列出浮點型變量名,用於保存輸入的數據。
double weight=62.5;
printf("請輸入您體重:");
scanf("%lf",&weight); // 在變量名前要加符號&。
4、輸入字符串
輸入字符串的格式用%s表示,在參數中列出字符串變量名,用於保存輸入的數據。
char name[21];
memset(name,0,sizeof(name));
printf("請輸入您姓名:");
scanf("%s",name); // 注意了,字符串變量名前可以不加符號&。
5、輸入多個內容
調用一次scanf函數可以輸入多個數據,全部的數據輸入完成後按回車鍵結束輸入。
int age=0;
char xb=0;
double weight=0;
char name[21];
memset(name,0,sizeof(name));
printf("請輸入您的姓名、姓別(x-男;y-女),年齡和體重,中間用空格分隔:");
scanf("%s %c %d %lf",name,&xb,&age,&weight); // 只有name變量前沒加&。
scanf函數第一個參數(格式化字符串)的格式與後面的參數列表(變量的列表)要一一對應,一個蘿蔔一個坑的填進去,不能多,不能少,順序也不能錯,否則會產生意外的結果。
6、示例(book13.c)
/*
* 程序名:book13.c,此程序演示scanf函數輸入數據。
* 作者:C語言技術網(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>
#include <string.h>
int main()
{
int age=0;
char xb=0;
double weight=0;
char name[21];
memset(name,0,sizeof(name));
printf("請輸入您的姓名、姓別(x-男;y-女),年齡和體重,中間用空格分隔:");
scanf("%s %c %d %lf",name,&xb,&age,&weight); // 只有name變量前沒加&,其它的都加了。
printf("您的姓名是:%s,姓別:%c,年齡:%d歲,體重%lf公斤。\n",name,xb,age,weight);
return 0;
}
運行效果
四、注意事項
1)本文只學習scanf函數最簡單的用法。
2)scanf函數只是在C程序基本知識的學習中纔用到,在實際開發中基本上不用。
3)scanf函數的變量列表,除了字符串,其它的變量前面都要加&,表示取地址,如果不加,程序編譯不會報錯,但運行時會出現意想不到的後果(1-賦值不成功;2-段錯誤Core dump)。
五、版權聲明
C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。
來源:C語言技術網(www.freecplus.net)
作者:碼農有道