程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> scanf()函數的用法和實踐

scanf()函數的用法和實踐

編輯:關於C語言
 

摘要:

本文闡述了基於ANSI,Win 95,Win NT上的 C/C++語言中scanf()函數的用法,以及在實際使用中常見錯誤及對策。

關鍵詞

scanf()

 

一、             序言

在CSDN論壇的C/C++版塊,我時常見到“對於scanf()函數的用法、及出現的各種錯誤而迷惑”的帖子,萌發了我寫這篇文章的念頭。文中結合自身在學習和編程中對它的認識和體會,以具體示例闡述問題,目的在於使得初學者能夠正確使用scanf()函數,少走不必要的彎路。

二、             scanf()函數的用法

scanf()函數是格式化輸入函數,它從標准輸入設備(鍵盤) 讀取輸入的信息。

 

其調用格式為:      scanf("<格式化字符串>",<地址表>);

 

格式化字符串包括以下三類不同的字符;

1、 格式化說明符:

格式化說明符與printf()函數中的格式說明符基本相同。但和printf()函數中格式字符串的用法有一些小區別。我們來看下面這個表。

格式字符

說明

%d

從鍵盤輸入十進制整數

%o

從鍵盤輸入八進制整數

%x

從鍵盤輸入十六進制整數

%c

從鍵盤輸入一個字符

%s

從鍵盤輸入一個字符串

%f

從鍵盤輸入一個實數

%e

與%f的作用相同

附加格式說明字符表

字符

說明

L

輸入"長"數據

H

輸入"短"數據

M

指定輸入數據所占寬度

*

空讀一個數據

 

2、    空白字符: 空白字符會使scanf()函數在讀操作中略去輸入中的一個或多個空白字符。

3、    非空白字符: 一個非空白字符會使scanf()函數在讀入時剔除掉與這個非空白字符相同的字符。

 

地址表是需要讀入的所有變量的地址,而不是變量本身。這與printf()函數完全不同,要特別注意。各個變量的地址之間同","分開。

例如:

#include <stdio.h>

void main()

{

       int i, j;

       printf("i, j=?\n");

       scanf("%d, %d", &i, &j);

}

上例中的scanf()函數先讀一個整型數,然後把接著輸入的逗號剔除掉,最後讀入另一個整型數。如果","這一特定字符沒有找到,scanf()函數就終止。若參數之間的分隔符為空格,則參數之間必須輸入一個或多個空格。

說明:

(1)          對於字符串數組或字符串指針變量,由於數組名和指針變量名本身就是地址,因此使用scanf()函數時,不需要在它們前面加上"&"操作符。

例如:

#include <stdio.h>

void main()

{

       char *p, str[20];

      

              p = new char[20];

             

          scanf("%s", p); /*從健盤輸入字符串*/

          scanf("%s", str);

          printf("%s\n", p); /*向屏幕輸出字符串*/

          printf("%s\n", str);

}

 

(2)          可以在格式化字符串中的"%"各格式化規定符之間加入一個整數,表示任何讀操作中的最大位數。

如上例中若規定只能輸入10字符給字符串指針p,則第一條scanf() 函數語句變為:scanf("%10s", p);

程序運行時一旦輸入字符個數大於10,p就不再繼續讀入,而後面的一個讀入函數即scanf("%s", str)就會從第11個字符開始讀入。

(3)             scanf()函數中沒有精度控制。

如: scanf("%5.2f",&a); 是非法的。不能企圖用此語句輸入小數為2位的實數。

(4)             scanf中要求給出變量地址,如給出變量名則會出錯

如 scanf("%d",a);是非法的,應改為scnaf("%d",&a);才是合法的。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved