`sscanf` 和 `scanf` 都是 C 语言中用于从字符串中读取格式化输入的函数,但它们的主要区别在于输入源的不同。
1、### scanf
`scanf` 函数用于从标准输入(通常是键盘)读取格式化的输入。它的原型如下:
```int scanf(const char *format, ...)```
**参数**:
- `format`:一个格式字符串,指定要读取的数据类型和格式。
- `...`:可变参数列表,指向存储读取数据的变量的指针。
**返回值**:
- 成功读取的输入项数。
- 如果在遇到任何输入之前遇到文件结束标记或读取错误,则返回 EOF。
**示例**:
```c
#include <stdio.h>
int main() {
int num;
float fnum;
char str[100];
printf("Enter an integer, a float and a string: ");
scanf("%d %f %s", &num, &fnum, str);
printf("You entered: %d, %.2f, %s\n", num, fnum, str);
return 0;
}
```
在这个示例中,`scanf` 从键盘读取一个整数、一个浮点数和一个字符串。
2、### sscanf
`sscanf` 函数用于从指定的字符串读取数据。它的原型如下:
```c
int sscanf(const char *str, const char *format, ...);
```
**参数**:
- `str`:要解析的字符串。
- `format`:一个格式字符串,指定要读取的数据类型和格式。
- `...`:可变参数列表,指向存储读取数据的变量的指针。
**返回值**:
- 成功读取的输入项数。
- 如果在遇到任何输入之前遇到文件结束标记或读取错误,则返回 EOF。
**示例**:
```c
#include <stdio.h>
int main() {
int num;
float fnum;
char str[] = "123 45.67 hello";
sscanf(str, "%d %f %s", &num, &fnum, str);
printf("You entered: %d, %.2f, %s\n", num, fnum, str);
return 0;
}
```
在这个示例中,`sscanf` 从字符串 `"123 45.67 hello"` 中读取一个整数、一个浮点数和一个字符串。
3、### 总结
- `scanf` 从标准输入读取数据。
- `sscanf` 从一个给定的字符串读取数据。
- 两者的格式字符串和返回值相同,但输入源不同。
选择使用 `scanf` 还是 `sscanf` 取决于你需要从哪里读取数据。如果数据来自用户输入,使用 `scanf`;如果数据来自一个字符串,使用 `sscanf`。