【发布时间】:2022-10-23 20:27:31
【问题描述】:
在我正在处理的项目中,我从.txt 文件中导入设置。
为了完成这项工作,我需要验证文本文件的第一行是否以某种格式写入。格式应为%d,%d。 2 个整数,中间有逗号,例如 7,7 或 150,20。我尝试通过以下方式使用sscanf 和strcmp 使其工作,但没有运气。
fgets(line, 100, fp);
int s1, s2;
if (!(sscanf(line, "%d,%d", s1, s2))) {
return 1;
}
if (!(strcmp(line, "%d,%d"))) {
return 1;
}
关于如何使这项工作的任何建议?
【问题讨论】:
-
pcre 可以胜任
-
阅读
strspn()。 ASCII 数字 - 逗号 - ASCII 数字 - 空终止符。 (也阅读 scanf() 系列函数返回的内容......您做出了错误的假设。) -
if( !(sscanf(line,"%d,%d", s1, s2)) )应该是if(sscanf(line,"%d ,%d", &s1, &s2) != 2)注意更改的几个细节。最重要的是&地址操作符。 -
困惑于为什么您尝试将输入行(应该是
150,20与某些格式规范字符串进行比较)。strcmp不理解他们。那些"%d"等格式规范仅适用于像scanf和printf这样的函数,它们有一些相似但实际上完全不同的规则。 -
@Psi 为此,我认为这可能是矫枉过正。如果您希望这是唯一在线上的东西,也许是
if(sscanf(line, " %d,%d %c", &s1, &s2, &syntax_error) != 2)。不要忘记验证行尾。