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

C語言scanf()函數:格式化輸入函數

編輯:關於C語言
 

頭文件:#include <stdio.h>

scanf() 函數用來格式化輸入數據,即按用戶指定的格式從鍵盤上把數據讀入到指定的變量中。其原型為:int scanf ( char * format [ ,argument, ... ]);

【參數】format為格式化控制字符串,可以由三類字符構成。

1) 格式化說明符

------------------------------------------------------------

格式字符           說明

------------------------------------------------------------

%a                 讀入一個浮點值(僅C99有效)

%A                 同上

%c                 讀入一個字符

%d                 讀入十進制整數

%i                  讀入十進制,八進制,十六進制整數

%o                 讀入八進制整數

%x                  讀入十六進制整數

%X                 同上

%c                 讀入一個字符

%s                 讀入一個字符串

%f                  讀入一個浮點數

%F                 同上

%e                 同上

%E                 同上

%g                 同上

%G                 同上

%p                 讀入一個指針

%u                 讀入一個無符號十進制整數

%n                 至此已讀入值的等價字符數

%[]                 掃描字符集合

%%                讀%符號

另外,還有附加格式說明字符,用於追加在上面的格式說明符後面。

-----------------------------------------------------------------

修飾符                       說明

-----------------------------------------------------------------

L/l                          長度修飾符,輸入"長"數據

h                            長度修飾符,輸入"短"數據

W                           整型常數,指定輸入數據所占寬度

*                             星號,空讀一個數據

hh                          同 h,但僅對C99有效

ll                             同 l,但僅對C99有效

2) 空白字符

空白字符會使scanf()函數在讀操作中略去輸入中的一個或多個空白字符,空白符可以是space,tab,newline等等,直到第一個非空白符出現為止。

3) 非空白字符

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

argument 為需要讀入的所有變量的地址。

注意,是變量地址,而不是變量標識符:

如果是一般的變量,通常要在變量名前加上"&"取得地址,但輸出時是用變量名。

如果是數組,用數組名就代表了該數組的首地址,輸出時也是用數組名

如果是指針,直接用指針名本身,不要加上“*”,輸出時也用該指針即可。

【返回值】成功則返回被賦值的參數的個數。如果 format 和 argument 匹配錯誤,或者遇到結束符,那麼返回值可能小於參數的個數。

如果讀取發生錯誤,將會返回 EOF,並設置錯誤標識,後續可以通過 ferror() 檢測。

如果遇到結束符,將會設置文件結束標識,後續可以通過 feof() 檢測。

如果在讀取寬字符的時候發生編碼錯誤,那麼將會把 errno 設置為  EILSEQ。

【實例】下面的代碼將演示 scanf() 可以讀取的數據類型。

daimayanshi.png

運行結果為:

Enter your family name: Soulie

Enter your age: 29

Mr. Soulie , 29 years old.

Enter a hexadecimal number: ff

You have entered 0xff (255).

又如,記錄帶空格的字符串,然後輸出(已經注釋的部分為要求輸入三個整數,然後逐個打印出來)。

#include<stdio.h>

int main()

{

    /*int a,b,c;

    puts("Input a,b,c:");

    scanf("%d,%d,%d",&a,&b,&c);

    printf("\n%d,%d,%d\n",a,b,c);*/

    // 可以輸入帶空格的字符串*/

    char str[80];

    scanf("%[^\n]",str);  // 格式化輸入

    printf("%s\n",str);  // 格式化輸出

    return 0;

}

【運行結果】

sdf ef13

sdf ef13

scanf() 函數是初學者接觸最多的函數,相信大家都 已非常熟悉,這裡不再贅述,但是它還有一個許多人都沒有注意到的功能,即可以記錄帶空格的字符串,注意學習例子中指定格式的方法。

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