C語言scanf函數詳解和示例

一、數據輸入

編寫程序的主要目的就是爲了處理數據。數據從哪裏來?數據的來源有很多種方式,如從磁盤文件中讀取數據、從數據庫中讀取數據、從網頁中抓取數據等,還有一種原始的方式就是從鍵盤輸入數據。

在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

作者:碼農有道

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