gpt4 book ai didi

c - 分离 fscanf 错误检查以便我可以传递特定消息?

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

这里是 C 语言的新手。该程序应该在一行中读入一个片段文件,片段前后用“#”分隔。例如#fragment1##fragment2##fragment3#

我要检查的两个错误是片段不超过 1000 个字符,并且文件在片段的两边都遵循正确的“#”格式。我真的不明白 fscanf 语法是如何工作的,但我认为以下内容会检查错误:

  char buffer[MAX_FRAG_LEN+1];
if (fscanf(fp, "#%1000[^#]#", buffer) == 1) {
return strdup(buffer);
} else {
fprintf(stderr, "Error! Incorrect format.\n");
}

但是,我想将错误分开,这样我就可以明确地传递一条消息,指出是两个错误中的哪个错误。我怎样才能单独进行检查?非常感谢!

最佳答案

要使您的技术发挥作用,您应该在 fscanf 返回后手动检查缓冲区后的下一个字符是否为 '#'。这使您可以区分太长的字符串错误和丢失的 "##" 错误。

  char buffer[MAX_FRAG_LEN+1];
if (fscanf(fp, "#%1000[^#]", buffer) == 1) {
int c = fgetc(fp);
if (c == '#') return strdup(buffer);
if (c != EOF) {
ungetc(c, fp);
fprintf(stderr, "Error! More than 1000 characters.\n");
} else {
fprintf(stderr, "Error! Last fragment did not end with '#'.\n");
}
} else {
fprintf(stderr, "Error! Fragment did not start with '#'.\n");
}

但是,使用fscanf 进行解析通常很棘手。如果输入的格式完全出乎意料,则很难从中正确恢复。因此,通常更容易通过在单个缓冲区中读取整行来处理错误,然后按照 Duck 的建议解析该行。

关于c - 分离 fscanf 错误检查以便我可以传递特定消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11405326/

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