C/C++ sscanf 用法與範例

本篇 ShengYu 介紹 C/C++ sscanf 用法與範例,在 C/C++ 語言中,sscanf 函式是一個非常有用的工具,用於從字串中提取資料(從字串中讀取格式化的輸入)。本文將介紹 sscanf 函式的基本用法,並提供一些常見的使用情況和範例程式碼,scanf 詳細用法範例請繼續往下閱讀。

C/C++ 要讓指定的格式從字串中提取資料,並將提取的資料儲存到指定的變數可以使用 sscanf,使用 sscanf 的話需要引入的標頭檔 <stdio.h>,如果要使用 C++ 的標頭檔則是引入 <cstdio>
sscanf 函式原型為

1
int sscanf(const char *str, const char *format, ...);

其中,str 是包含要解析的字串,format 是格式字串,用於指定解析的方式,而 ... 則是輸出的變數。sscanf 函式會根據 format 字串中的格式來解析 str 字串,並將解析結果儲存到 ... 中指定的變數中。

C/C++ sscanf 基本用法範例

下面是一個簡單的範例,示範了如何使用 sscanf 函式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int main() {
char str[] = "John 25";
char name[20];
int age;

// 從 str 中按照格式提取資料
sscanf(str, "%s %d", name, &age);

printf("Name: %s\n", name);
printf("Age: %d\n", age);

return 0;
}

在這個範例中,我們首先定義了一個字串 str 包含了一個名字和一個年齡,然後我們定義了兩個變數 nameage,用於儲存從字串中提取的名字和年齡,之後我們使用 sscanf 函式按照格式 "%s %d" 從字串 str 中提取名字和年齡,並將它們分別儲存到 nameage 變數中。最後我們列印出提取出的名字和年齡。

除了基本的用法外,C/C++ sscanf 函式還可以處理更覆雜的情況,下面是一些常見的用法及範例程式碼:

C/C++ sscanf 提取多個資料項

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>

int main() {
char str[] = "3.14 42 hello";
double pi;
int num;
char word[20];

// 從 str 中按照格式提取資料
sscanf(str, "%lf %d %s", &pi, &num, word);

printf("Pi: %.2f\n", pi);
printf("Number: %d\n", num);
printf("Word: %s\n", word);

return 0;
}

這個範例中,字串 str 包含了一個浮點數、一個整數和一個單詞。我們定義了三個變數 pinumword,用於儲存從字串中提取的資料。使用 sscanf 函式按照格式 "%lf %d %s" 從字串 str 中提取這三個資料,並將它們分別儲存到對應的變數中。最後我們印出提取出的浮點數、整數和單詞。

C/C++ sscanf 使用格式修飾符

忽略特定的字元,例如:忽略-字元,範例如下,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int main() {
char str[] = "2024-04-30";
int year, month, day;

// 從 str 中按照格式提取資料
sscanf(str, "%d-%d-%d", &year, &month, &day);

printf("Year: %d\n", year);
printf("Month: %d\n", month);
printf("Day: %d\n", day);

return 0;
}

這個範例中,字串 str 包含了一個日期,格式為 “年-月-日”。我們定義了三個變數 yearmonthday,用於儲存從字串中提取的年、月和日。使用 sscanf 函式按照格式 "%d-%d-%d" 從字串 str 中提取年、月和日,忽略中間的-連接字元,並將它們分別儲存到對應的變數中。最終我們列印出提取出的年、月和日。

C/C++ sscanf 處理不定長資料

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

int main() {
char str[] = "10 20 30 40 50";
int numbers[5];

// 從 str 中按照格式提取資料
int count = sscanf(str, "%d %d %d %d %d", &numbers[0], &numbers[1], &numbers[2], &numbers[3], &numbers[4]);

printf("Count: %d\n", count);
printf("Numbers: ");
for (int i = 0; i < count; ++i) {
printf("%d ", numbers[i]);
}
printf("\n");

return 0;
}

這個範例中,字串 str 包含了多個整數,以空格分隔。我們定義了一個整型陣列 numbers,用於儲存從字串中提取的整數。使用 sscanf 函式按照格式 "%d %d %d %d %d" 從字串 str 中提取整數,並將它們儲存到陣列 numbers 中。sscanf 函式回傳成功解析的資料項的數量,我們可以據此確定實際提取了多少個整數。最終,我們列印出提取出的整數以及實際提取的數量。

總結

sscanf 函式是 C 語言中用於從字串中提取資料的強大工具。透過指定合適的格式字串,我們可以靈活地從字串中提取各種類型的資料,並將其儲存到指定的變數中。本文介紹了 sscanf 函式的基本用法以及一些常見的使用情況和範例程式碼,你可以看到 sscanf 函式的靈活性和多功能性。無論是從簡單的整數和浮點數,到複雜的字串和特定格式的輸入,它都能應對自如。

以上就是 C/C++ sscanf 的用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
如果你想學習 C++ 相關技術,可以參考看看下面的文章,
C/C++ 新手入門教學懶人包
C/C++ strcpy 用法與範例
C/C++ strcmp 用法與範例
C/C++ strcat 用法與範例
C/C++ strstr 用法與範例
C/C++ strtok 用法與範例