我一直试图编写一个Lex程序来将八进制数转换成十进制数。但在接受数字作为输入后,却什么也没做。没有输出。没有程序终止。程序仍在运行,没有任何输出。
可能是什么错误?我对yywraptodec函数做恶作剧有强烈的感觉。
提前谢谢。:)
源代码:

%{
    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
    int v = 0, o = 0, d = 0; //valid bit, octal number, decimal number
%}

%%
^[0-7]+  {v = 1; o = atoi(yytext);}
[\n] {;}
. {v = 0;}
%%

int yywrap()
{
    if (v)
    {
        d = todec(o);
        printf("Decimal is %d\n", d);
    }
    else
    {
        printf("Invalid");
    }
}

int todec(int oct)
{
    int dec = 0, pos = 0;
    while(oct)
    {
        int a = oct % 10;
        dec += a * pow(8, pos);
        pos++;
        oct /= 10;
    }
    return dec;
}

int main()
{
    printf("Enter the octal number: ");
    yylex();
    return 0;
}

最佳答案

我将引用http://dinosaur.compilertools.net/flex/flex_10.html
*当扫描仪从YYINPUT接收到文件结束指示时,它会检查yywrap()函数
因此,如果使用ctrl-d(输入数字并按回车键后)模拟下线行为,则可以看到计算结果是正确的。
如果希望立即看到结果,则必须在计算输出后编写输出。
干杯

关于c - 在Lex中将八进制数转换为十进制数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20612827/

10-11 18:12