C語言中關於scanf函數的用法


 

scanf()函數的控制串

函數名: scanf

功 能: 執行格式化輸入

用 法: int scanf(char *format[,argument,...]);

scanf()函數是通用終端格式化輸入函數,它從標准輸入設備(鍵盤) 讀取輸入的信息。可以讀入任何固有類型的數據並自動把數值變換成適當的機內格式。

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

scanf()函數返回成功賦值的數據項數,出錯時則返回EOF。

其控制串由三類字符構成:
1.  格式化說明符; 
2.  空白符; 
3.  非空白符;

(A) 格式化說明符

格式字符 說明 
%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,ll同上h,l但僅對C99有效。

(B) 空白字符

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

(C) 非空白字符

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

 

其他: 
在scanf函數中,我們可以使用 %c來讀取一個字符,使用 %s 讀取一個字符串. 但是讀取字
符串時不忽略空格,讀字符串時忽略開始的空格,並且讀到空格為止,因此我們只能讀取一個單
詞,而不是整行字符串.因此一般使用fgets來讀取一個字符串.其實scanf函數也可完成這樣的
功能,而且還更強大.
這里主要介紹一個參數,%[ ] ,這個參數的意義是讀入一個字符集合. [ ]是個集合的標
志,因此%[ ]特指讀入此集合所限定的那些字符, 比如 %[A-Z] 是輸入大寫字母,一旦遇到不在
此集合的字符便停止. 如果集合的第一個字符是" ^ ", 這說明讀取不在" ^ " 后面集合的字
符,既遇到" ^ " 后面集合的字符便停止.注意此時讀入的字符串是可以含有空格的.
Eg. 輸入一個字符串, 這個字符串只含有小寫字符.遇到第一個不是小寫字符時停止.
scanf("%[a-z],str);
Eg. 想輸入一個字符串, 遇到 "." 停止,可設計如下:
scanf("%[^.]", str);
使用這個參數,你可以完成許多強大的功能呦!
#include "1.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int t1(void)
{
    char str[50];
    scanf_s("%[^\n]",str);
    printf("str = %s\n", str);
    return 0;
}

/*
root@ubuntu:/work/demo# ./cmd
1234 std 435
str = 1234 std 435
*/

 

引用:

C語言中關於scanf函數的用法

C語言 中scanf詳解 http://wenku.baidu.com/view/3c396904de80d4d8d15a4f75.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM