Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测行是否与格式匹配-在C中_C - Fatal编程技术网

检测行是否与格式匹配-在C中

检测行是否与格式匹配-在C中,c,C,我有一个文件,我需要检查它的行是否为以下格式: 姓名:姓名1,姓名2,姓名3,姓名4 (一些字符串,后跟“:”,然后是一个空格,后面是用“,”)分隔的字符串 我尝试使用以下代码执行此操作: int result =0; do { result =sscanf(rest,"%[^:]: %s%s", p1,p2,p3); if(result==3) { printf("invalid!"); fclose(fpointer);

我有一个文件,我需要检查它的行是否为以下格式:

姓名:姓名1,姓名2,姓名3,姓名4

(一些字符串,后跟“:”,然后是一个空格,后面是用“,”)分隔的字符串

我尝试使用以下代码执行此操作:

int result =0;

do
{
    result =sscanf(rest,"%[^:]: %s%s", p1,p2,p3);
    if(result==3)
    {
        printf("invalid!");
        fclose(fpointer);
        return -1;
    }
}while (fgets(rest ,LINE , fpointer) != NULL);
这适用于以下行:name:name1、name2(name1和name2之间有空格)

但它失败的原因如下:

姓名:姓名1,姓名2

我想告诉sscanf,不要在“:”之前避开这个空白

有人能看出来吗

谢谢你的帮助

这对我很有用:

result = sscanf(rest,"%[^*:]: %[^,],%s", p1, p2, p3);

请注意,
*
用于使用空格(如果有)。

可能
%[^,]
有助于查找非逗号序列(前面有空格以跳过可选空格)。如果需要处理3、4、5……个名称,您还需要能够重复扫描。那么,你的实际需求是什么呢?(一些字符串,后跟“:”,然后是一个空格,之后是用“,”)分隔的字符串-也许您应该重写它,在每个分隔符之间包含“一个或多个空格”。函数族不是一般解析的理想候选函数。相反,您可能希望使用搜索冒号“
”:”
,然后使用
sscanf
提取其他两个字符串。建议您可以使用strtok()进行解析。问题是之前有一个空格:“在您的解决方案中,似乎也有两个以上的名称以“,”分隔。”如果在“:”之前有空格,则这不是合法的一行:“您希望在
%[^,]
术语前面有一个空格,以跳过冒号后面的前导空格。
%c
%[…]
%n
均不跳过空格;所有其他转换都可以。