小白每天學習兩個函數D8-(sscanf,vscanf)

////////////////////sscanf/////////////////////////////////
C語言sscanf()函數:從字符串中讀取指定格式的數據
頭文件:
?
1
#include <stdio.h>
sscanf()函數用於從字符串中讀取指定格式的數據,其原型如下:

?
1
int sscanf (char *str, char * format [, argument, ...]);
【參數】參數str爲要讀取數據的字符串;format爲用戶指定的格式;argument爲變量,用來保存讀取到的數據。
【返回值】成功則返回參數數目,失敗則返回-1,錯誤原因存於errno 中。
sscanf()會將參數str 的字符串根據參數format(格式化字符串)來轉換並格式化數據(格式化字符串請參考scanf()), 轉換後的結果存於對應的變量中。
sscanf()與scanf()類似,都是用於輸入的,只是scanf()以鍵盤(stdin)爲輸入源,sscanf()以固定字符串爲輸入源。
【實例】從指定的字符串中讀取整數和小寫字母。
#include <stdio.h>
int main(void)
{
  char str[100] ="123568qwerSDDAE";
  char lowercase[100];
  int num;
  sscanf(str,"%d %[a-z]", &num, lowercase);
  printf("The number is: %d.\n", num);
  printf("The lowercase is: %s.", lowercase);
  return 0;
}
輸出結果:
The number is: 123568.
The lowercase is: qwer.
可以看到format參數有些類似正則表達式(當然沒有正則表達式強大,複雜字符串建議使用正則表達式處理),支持集合操作,例如:
    %[a-z] 表示匹配a到z中任意字符,貪婪性(儘可能多的匹配)
    %[aB'] 匹配a、B、'中一員,貪婪性
    %[^a] 匹配非a的任意字符,貪婪性
另外,format不僅可以用空格界定字符串,還可以用其他字符界定,可以實現簡單的字符串分割(更加靈活的字符串分割請使用strtok())。例如:
?
1
2
sscanf("2006:03:18", "%d:%d:%d", a, b, c);
sscanf("2006:03:18 - 2006:04:18", "%s - %s", sztime1, sztime2);


////////////////////vscanf/////////////////////////////////
頭文件:

#include <stdio.h>  #include <stdarg.h>
定義函數:
int vscanf(const char * format, va_list ap);
函數說明:vscanf()會將輸入的數據根據參數format 字符串來轉換並格式化數據. 格式轉換形式請參考scanf(). 轉換後的結果存於對應的參數內. va_list 用法請參考附錄C 或vprintf()範例.
返回值成功則返回參數數目, 失敗則返回-1, 錯誤原因存於errno 中。
發佈了42 篇原創文章 · 獲贊 18 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章