一、sscanf的基礎用法
sscanf函數是C++語言中的輸入函數,用於將字符串按指定格式轉化為變量。它的原型為:
int sscanf(const char *str, const char *format, ...);
其中,str表示輸入的字符串,format為轉換格式,可以包含格式說明符%和轉換字符,後面的省略號表示可變參數。下面是一個簡單的示例:
#include <stdio.h> int main() { char str[] = "123 456"; int a, b; sscanf(str, "%d %d", &a, &b); printf("a=%d b=%d", a, b); return 0; }
該程序將字符串”123 456″按照格式”%d %d”轉化為兩個整型變量a和b的值,並輸出結果a=123 b=456。
二、sscanf的格式說明符
格式說明符指定了輸入字符串和輸出變量之間的轉換關係。常用的格式說明符有:
- %d:把輸入的字符串轉換為帶符號的十進制整數
- %u:把輸入的字符串轉換為無符號的十進制整數
- %f:把輸入的字符串轉換為帶符號的十進制浮點數
- %lf:把輸入的字符串轉換為帶符號的十進制雙精度浮點數
- %c:把輸入的字符轉換為字符類型
- %s:把輸入的字符串轉換為字符數組
- %%:輸出%字符
三、sscanf的高級用法
除了上面介紹的基本用法外,sscanf還具備較強的靈活性,可以用來解析更為複雜的字符串。下面是一個實際應用示例:
#include <stdio.h> #include <string.h> int main() { char str[] = "name=Tom age=20 score=90"; char name[100]; int age, score; memset(name, 0, sizeof(name)); sscanf(str, "name=%s age=%d score=%d", name, &age, &score); printf("name=%s age=%d score=%d", name, age, score); return 0; }
該程序將字符串”name=Tom age=20 score=90″按照一定的格式解析為3個變量name、age和score的值,並輸出結果name=Tom age=20 score=90。
四、sscanf的錯誤處理
sscanf函數在轉換過程中可能會出現錯誤,比如格式不匹配、輸入字符串不合法等,此時需要進行錯誤處理。可以使用返回值來判斷是否發生了錯誤,返回值為成功轉換的數據項數目。如果發生了錯誤,可以使用errno全局變量獲取錯誤碼,或打印錯誤信息。下面是一個示例:
#include <stdio.h> #include <errno.h> int main() { char str[] = "123 ABC"; int x; errno = 0; int num = sscanf(str, "%d %d", &x); if (num == 1) { printf("x=%d", x); } else { if (errno == EINVAL) { printf("格式錯誤"); } else if (errno == ERANGE) { printf("數據溢出"); } else { printf("未知錯誤"); } } return 0; }
該程序將字符串”123 ABC”按照格式”%d %d”嘗試轉化為一個整型變量x的值,由於格式不匹配,轉換失敗,輸出結果為”格式錯誤”。
原創文章,作者:OJPL,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/133229.html