scanf family API 高级用法
生活随笔
收集整理的這篇文章主要介紹了
scanf family API 高级用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
sscanf是一個很好用的函數,利用它可以從字符串中取出整數、浮點數和字符串等等。它的使用方法簡單,特別對于整數和浮點數來說。但新手可能并不知道處理字符串時的一些高級用法,這里做個簡要說明吧。?
char str[512] = {0}; ?
sscanf( "123456 ", "%s ", str); ?
printf( "str=%s\n ", str); ?
sscanf( "123456 ", "%4s ", str); ?
printf( "str=%s\n ", str); ?
sscanf( "123456 abcdedf ", ?"%[^ ] ", ?str); ?
sscanf( "123456abcdedfBCDEF ", "%[1-9a-z] ", str); ?
printf( "str=%s\n ", str); ?
sscanf( "123456abcdedfBCDEF ", "%[^A-Z] ", str); ?
printf( "str=%s\n ", str); ?
函數說明 scanf()會將輸入的數據根據參數format字符串來轉換并格式化數據。Scanf()格式轉換的一般形式如下
%[*][size][l][h]type
以中括號括起來的參數為選擇性參數,而%與type則是必要的。
* 代表該對應的參數數據忽略不保存。
size 為允許參數輸入的數據長度。
l 輸入的數據數值以long int 或double型保存。
h 輸入的數據數值以short int 型保存。
底下介紹type的幾種形式
%d 輸入的數據會被轉成一有符號的十進制數字(int)。
%i 輸入的數據會被轉成一有符號的十進制數字,若輸入數據以“0x”或“0X”開頭代表轉換十六進制數字,若以“0”開頭則轉換八進制數字,其他情況代表十進制。
%0 輸入的數據會被轉換成一無符號的八進制數字。
%u 輸入的數據會被轉換成一無符號的正整數。
%x 輸入的數據為無符號的十六進制數字,轉換后存于unsigned int型變量。
%X 同%x
%f 輸入的數據為有符號的浮點型數,轉換后存于float型變量。
%e 同%f
%E 同%f
%g 同%f
%s 輸入數據為以空格字符為終止的字符串。
%c 輸入數據為單一字符。
[] 讀取數據但只允許括號內的字符。如[a-z]。
[^] 讀取數據但不允許中括號的^符號后的字符出現,如[^0-9].
?
返回值 成功則返回參數數目,失敗則返回-1,錯誤原因存于errno中。 與50位技術專家面對面20年技術見證,附贈技術全景圖
1. 常見用法
以下是引用片段:?char str[512] = {0}; ?
sscanf( "123456 ", "%s ", str); ?
printf( "str=%s\n ", str); ?
2. 取指定長度的字符串
如在下例中,取最大長度為4字節的字符串。?
以下是引用片段:?sscanf( "123456 ", "%4s ", str); ?
printf( "str=%s\n ", str); ?
3. 取到指定字符為止的字符串
如在下例中,取遇到空格為止字符串。?
以下是引用片段:?sscanf( "123456 abcdedf ", ?"%[^ ] ", ?str); ?
printf( "str=%s\n ", str); ?
4. 取僅包含指定字符集的字符串
如在下例中,取僅包含1到9和小寫字母的字符串。?
以下是引用片段:?sscanf( "123456abcdedfBCDEF ", "%[1-9a-z] ", str); ?
printf( "str=%s\n ", str); ?
5. 取到指定字符集為止的字符串
如在下例中,取遇到大寫字母為止的字符串。?
以下是引用片段:?sscanf( "123456abcdedfBCDEF ", "%[^A-Z] ", str); ?
printf( "str=%s\n ", str); ?
6. 特殊格式
如何解釋 fscanf(fd,"%*[^\n]")
"%[^\n]"表示讀輸入字符串,直到碰到字符‘\n’為止,其中^表示否的意思
7. 總結
Scanf(格式化字符串輸入),相關函數 fscanf,snprintf,sscanf,格式詳解!
#include <stdio.h>
?int scanf(const char *format, ...);函數說明 scanf()會將輸入的數據根據參數format字符串來轉換并格式化數據。Scanf()格式轉換的一般形式如下
%[*][size][l][h]type
以中括號括起來的參數為選擇性參數,而%與type則是必要的。
* 代表該對應的參數數據忽略不保存。
size 為允許參數輸入的數據長度。
l 輸入的數據數值以long int 或double型保存。
h 輸入的數據數值以short int 型保存。
底下介紹type的幾種形式
%d 輸入的數據會被轉成一有符號的十進制數字(int)。
%i 輸入的數據會被轉成一有符號的十進制數字,若輸入數據以“0x”或“0X”開頭代表轉換十六進制數字,若以“0”開頭則轉換八進制數字,其他情況代表十進制。
%0 輸入的數據會被轉換成一無符號的八進制數字。
%u 輸入的數據會被轉換成一無符號的正整數。
%x 輸入的數據為無符號的十六進制數字,轉換后存于unsigned int型變量。
%X 同%x
%f 輸入的數據為有符號的浮點型數,轉換后存于float型變量。
%e 同%f
%E 同%f
%g 同%f
%s 輸入數據為以空格字符為終止的字符串。
%c 輸入數據為單一字符。
[] 讀取數據但只允許括號內的字符。如[a-z]。
[^] 讀取數據但不允許中括號的^符號后的字符出現,如[^0-9].
?
返回值 成功則返回參數數目,失敗則返回-1,錯誤原因存于errno中。 與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的scanf family API 高级用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java图片失真_java 图片合成 解
- 下一篇: 子网掩码详解分析