我正在做首字母缩略词的翻译。就是说,如果它找到'OMS'打印'OrganizaciónMundial del trabajo',但是一旦我编译并运行程序,它就会无限运行。
我正在使用Windows作为开发环境。我已经看过示例,但看不到错误在哪里。这是代码:
%option noyywrap
%{
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
%}
%%
OMS {fprintf(yyout,"Organización Mundial del trabajo");}
%%
int main(int argc, char *argv[]) {
FILE*yyin=fopen(argv[1],"r");
FILE*yyout=fopen(argv[2],"w");
yylex();
fclose(yyin);
fclose(yyout);
return 0;
}
最佳答案
FILE*yyin=fopen(argv[1],"r");
FILE*yyout=fopen(argv[2],"w");
这些行声明并初始化了两个名为
yyin
和yyout
的局部变量。它们在函数末尾关闭,但否则保持不使用状态(也就是说,没有人对其进行任何输入/输出)。它们不适用于该程序的其余部分。同时,与这些局部变量完全分开的全局变量yyin
和yyout
保持不变。您只需要从两行中删除
FILE*
即可:yyin=fopen(argv[1],"r");
yyout=fopen(argv[2],"w");
现在,名称
yyin
和yyout
引用了程序其余部分已知的全局变量。