返回介绍

3.1 主循环

发布于 2025-02-24 22:44:37 字数 959 浏览 0 评论 0 收藏 0

程序的主循环从标准输入读取一行数据,初始化以便数字和操作符能被提取出来,空格被忽略,调用一个函数去确认正确的算术表达式并存储之,最终处理所存储的表达式。如果出错了,我们简单的读取下一行数据。如下为主循环:

#include <setjmp.h>
int main (void)
{  
  volatile int errors = 0;
     char buf [BUFSIZ];

     if (setjmp(onError)){
        ++ errors;
     }

     while (fgets(buf, sizeof buf, stdin)){
        if (scan(buf))
        {   void * e = sum();

           if (token){
              error("trash after sum");
           }
           process(e);
           delete(e);
        }
}
     return errors > 0;
}
void error (const char * fmt, ...)
{  
  va_list ap;

     va_start(ap, fmt);
     vfprintf(stderr, fmt, ap), putc('/n', stderr);
     va_end(ap);
     longjmp(onError, 1);
}

错误恢复点被使用 setjmp() 所定义。如果 error() 在程序中的某个位置被调用, longjmp() 伴随着从 setjmp() 另外一个返回而继续执行。在这种情况下,结果是一个值被传进 longjmp() ,错误累加,而且下一个输入行被读取。如果遇到错误,程序的出口代码将报告错误。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文