gpt4 book ai didi

c - 尽管行与搜索模式不匹配,sscanf 仍返回 1

转载 作者:太空宇宙 更新时间:2023-11-04 03:33:09 25 4
gpt4 key购买 nike

我需要从文件中读取某些参数。我的问题是扫描文件的行以查找参数。文本文件的结构如下:

character *\n

所以每一行都必须有模式 (space or tab)character[space or tab][char][space or tab]\n

开头的空格或制表符是可选的。我试着用

char val;
if(sscanf(buf, "%*[ \t]character%*[ \t]%c%*[ \t]\n",&val)==1||sscanf(buf, "character%*[ \t]%c%*[ \t]\n",&val)==1){
printf("%c in %i\n", val,line);
}else{
fprintf(stderr,"Error while reading line %i\n",line);
}

buf 包含当前行。

我的问题是,在 character\n 这样的行中,我的程序没有打印错误。相反,它将 '\n' 保存在 val 中。我不理解这种行为,因为这一行与我的搜索模式不匹配。

我的代码有什么问题?

我的理解

最佳答案

I do not understand this behavior, because this line does not match my search pattern.

*scanf 函数不会先检查模式,如果匹配,则填充值。他们一次检查一个字符,并指出他们能够使用格式字符串中的多少个字段。

不幸的是,在您的情况下,%c 肯定可以匹配 '\n'。随后的 %*[\t] 失败,随后的 \n 也会失败,但由于它们没有存储在任何地方,它们不会影响 sscanf的返回值,所以你不能从结果中判断是否有错误。

解决这个问题的最简单方法可能是根本不使用 *scanf 函数。使用自定义例程可以轻松描述您的输入格式,但使用格式字符串则不那么容易。

关于c - 尽管行与搜索模式不匹配,sscanf 仍返回 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34567397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com