【发布时间】:2016-04-06 15:55:33
【问题描述】:
我需要从文件中读取某些参数。我的问题是扫描文件的行以查找参数。文本文件的结构如下:
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 中。我不理解这种行为,因为这一行与我的搜索模式不匹配。
我的代码有什么问题?
我的理解
【问题讨论】:
-
20是两个chars,而不是一个。\n也是char。注意:\n是格式字符串,指示sscanf扫描任何个空白字符,包括无,直到第一个非空白字符。 -
if(sscanf(buf, " character %c", &val)==1){ -
@BLUEPIXY 空格是否包含制表符?如果任何其他字符或字符串或整数在正确字符后面,我的程序应该打印错误消息,这就是为什么我尝试像这样编写我的搜索模式。据我所知,您的代码会忽略正确字符之后的任何字符,并且在这种情况下不会打印错误。
-
"空格是否包含制表符?" -- 是。事实上,它包含了所有的空白字符
' '、'\f'、'\n'、'\r'、'\t'和'\v'。 -
@JWH 见DEMO