从sscanf读取,包括空格,打破其他角色

对于这个草率的标题我很抱歉,但我不知道如何正确地格式化我的问题.我正在尝试读取.txt,其中每行都有填充结构所需的信息.首先,我使用fgets读取该行,然后我将使用sscanf来读取各个部分.现在这里是我被困住的地方:通常sscanf会在空格上中断部分,但我需要包含空格.我知道sscanf允许忽略空格,但棘手的部分是我需要一些其他任意字符来分隔部分.例如,我必须打破界限

Carl Sagan~Contact~scifi~1997

作者,姓名,流派,年份的部分.你可以看到我需要卡尔萨根的空间,但我需要这个功能来打破波浪号上的字符串.任何帮助表示赞赏

最佳答案 如果您的输入由〜或任何特定字符分隔:

用这个:

sscanf(s, "%[^~]", name);

[^是转换类型,匹配除列出的字符以外的所有字符,以]结尾

以下是用于测试它的示例program

#include <stdio.h>

int main(int argv, char **argc)
{
    char *s = "Carl Sagan~Contact~scifi~1997";
    char name[100], contact[100], genre[100];
    int yr;

    sscanf(s, "%99[^~]~%99[^~]~%99[^~]~%d", name, contact, genre, &yr);
    printf("%s\n%s\n%s\n%d\n", name, contact, genre, yr);

    return 0;
}
点赞