在C语言中,字符串输入和格式输入是常见的操作,主要通过一些标准库函数来实现。这些函数包括 `gets`、`fgets`、`scanf` 等。以下是这些函数的详细说明和示例。
1. `gets` 和 `fgets`
gets
: 从标准输入读取一行字符串,遇到换行符结束,换行符会被替换为字符串结束符\0
。
- 参数: 指向字符数组的指针,用于存储读取的字符串。
- 返回值: 返回指向字符串的指针。
注意: gets
已被弃用,不安全,因为它不检查缓冲区边界,可能导致缓冲区溢出。应使用 fgets
。
fgets
: 从标准输入读取指定数量的字符,存储在字符串中。
- 参数:
char *str
:指向字符数组的指针,用于存储读取的字符串。int n
:要读取的最大字符数(包括终止字符\0
)。FILE *stream
:输入流(通常为stdin
)。
- 返回值: 返回指向字符串的指针。
示例:
#include <stdio.h> int main() { char str[50]; // 使用 fgets 读取字符串 printf("请输入一行文本:\n"); fgets(str, sizeof(str), stdin); // 输出读取的字符串 printf("你输入的文本是:%s", str); return 0; }
结果:
请输入一行文本: Hello, World! 你输入的文本是:Hello, World!
2. `scanf`
scanf
: 从标准输入读取格式化数据。
- 参数: 格式控制字符串后跟一个或多个指向变量的指针,用于存储读取的数据。
- 返回值: 成功匹配和赋值的项数。如果到达输入流末尾或发生读错误,则返回
EOF
。
#include <stdio.h> int main() { char str[50]; int num; float fnum; printf("请输入一个字符串、一个整数和一个浮点数:\n"); scanf("%s %d %f", str, &num, &fnum); printf("你输入的字符串是:%s\n", str); printf("你输入的整数是:%d\n", num); printf("你输入的浮点数是:%f\n", fnum); return 0; }
结果:
请输入一个字符串、一个整数和一个浮点数: Hello 42 3.14 你输入的字符串是:Hello 你输入的整数是:42 你输入的浮点数是:3.140000
3. 混合输入
有时需要混合输入不同类型的数据,包括字符串、整数和浮点数。示例:
#include <stdio.h> int main() { char str[50]; int num; char ch; float fnum; printf("请输入一个字符串、一个整数、一个字符和一个浮点数:\n"); scanf("%s %d %c %f", str, &num, &ch, &fnum); printf("你输入的字符串是:%s\n", str); printf("你输入的整数是:%d\n", num); printf("你输入的字符是:%c\n", ch); printf("你输入的浮点数是:%f\n", fnum); return 0; }
结果:
请输入一个字符串、一个整数、一个字符和一个浮点数: Hello 42 A 3.14 你输入的字符串是:Hello 你输入的整数是:42 你输入的字符是:A 你输入的浮点数是:3.140000
4. 使用 `fgets` 和 `sscanf` 组合进行复杂输入
有时需要读取整行输入并进行解析,这时可以结合 `fgets` 和 `sscanf` 使用。示例:
#include <stdio.h> int main() { char input[100]; char str[50]; int num; float fnum; printf("请输入一个字符串、一个整数和一个浮点数(用空格分隔):\n"); fgets(input, sizeof(input), stdin); sscanf(input, "%s %d %f", str, &num, &fnum); printf("你输入的字符串是:%s\n", str); printf("你输入的整数是:%d\n", num); printf("你输入的浮点数是:%f\n", fnum); return 0; }
结果:
请输入一个字符串、一个整数和一个浮点数(用空格分隔): Hello 42 3.14 你输入的字符串是:Hello 你输入的整数是:42 你输入的浮点数是:3.140000