sscanf函数是C语言中一个非常有用的函数,它可以从一个字符串中读取格式化的数据,并将其存储到指定的变量中。其功能与scanf类似,但scanf是从标准输入流(通常是键盘)读取数据,而sscanf是从一个字符串中读取数据。

1、sscanf 的基本使用

sscanf 函数用于从字符串中读取格式化的输入。在循环中使用 sscanf 时,可以反复调用它,从字符串中提取值,直到字符串被读取完毕。

1)解析整数和浮点数

#include <stdio.h>

int main() {
    char str[] = "123 456.78";  // 输入字符串
    int intValue;
    float floatValue;

    // 使用 sscanf 从字符串中解析整数和浮点数
    int result = sscanf(str, "%d %f", &intValue, &floatValue);

    // 输出解析结果
    if (result == 2) {
        printf("整数: %d\n", intValue);
        printf("浮点数: %.2f\n", floatValue);
    } else {
        printf("解析失败\n");
    }

    return 0;
}

2)解析多个数据类型

#include <stdio.h>

int main() {
    char str[] = "Alice 30 5.9";  // 输入字符串
    char name[20];
    int age;
    float height;

    // 使用 sscanf 从字符串中解析多个数据
    int result = sscanf(str, "%s %d %f", name, &age, &height);

    // 输出解析结果
    if (result == 3) {
        printf("姓名: %s\n", name);
        printf("年龄: %d\n", age);
        printf("身高: %.1f\n", height);
    } else {
        printf("解析失败\n");
    }

    return 0;
}

3)解析带有分隔符的字符串

#include <stdio.h>

int main() {
    char str[] = "2023-01-25";
    int year, month, day;

    // 使用 sscanf 解析日期
    int result = sscanf(str, "%d-%d-%d", &year, &month, &day);

    // 输出解析结果
    if (result == 3) {
        printf("年: %d\n", year);
        printf("月: %d\n", month);
        printf("日: %d\n", day);
    } else {
        printf("解析失败\n");
    }

    return 0;
}

2、循环遍历字符串

使用 sscanf 时,要确保在每次调用后更新字符串指针,以便 sscanf 可以读取下一个部分。这是通过传递字符串指针并在每次调用后修改它来实现的。

#include <stdio.h>

int main() {
    const char *str = "10 20 30 40 50";
    int num;
    const char *ptr = str;

    while (sscanf(ptr, "%d", &num) == 1) {
        printf("读取的数字: %d\n", num);
        // 移动指针到字符串中的下一个数字
        while (*ptr != ' ' && *ptr != '\0') {
            ptr++;
        }
        // 跳过数字之间的空格
        while (*ptr == ' ') {
            ptr++;
        }
    }

    return 0;
}

3、使用 fgets 的替代方法

如从用户输入或文件中读取数据,可以将 fgetssscanf 结合使用,先读取整行数据,再使用 sscanf 在循环中解析它。

#include <stdio.h>

int main() {
    char line[100];
    int num;

    printf("请输入数字: ");
    fgets(line, sizeof(line), stdin); // 读取输入的一行

    char *ptr = line;
    while (sscanf(ptr, "%d", &num) == 1) {
        printf("读取的数字: %d\n", num);
        // 将指针移动到下一个数字
        while (*ptr != ' ' && *ptr != '\0') {
            ptr++;
        }
        while (*ptr == ' ') {
            ptr++;
        }
    }

    return 0;
}

推荐文档

相关文档

大家感兴趣的内容

随机列表