C 在Lex中将八进制数转换为十进制数

C 在Lex中将八进制数转换为十进制数,c,lex,C,Lex,我一直在尝试编写一个Lex程序,将八进制数转换为十进制数。但在接受数字作为输入后,却什么也不做。没有输出。没有程序终止。程序仍在运行,没有任何输出 可能是什么错误?我对yywrap和todec函数的恶作剧有强烈的感觉 提前感谢。:) 源代码: %{ #include <stdlib.h> #include <stdio.h> #include <math.h> int v = 0, o = 0, d = 0; //valid b

我一直在尝试编写一个Lex程序,将八进制数转换为十进制数。但在接受数字作为输入后,却什么也不做。没有输出。没有程序终止。程序仍在运行,没有任何输出

可能是什么错误?我对
yywrap
todec
函数的恶作剧有强烈的感觉

提前感谢。:)

源代码:

%{
    #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;
}
%{
#包括
#包括
#包括
int v=0,o=0,d=0;//有效位,八进制数,十进制数
%}
%%
^[0-7]+{v=1;o=atoi(yytext);}
[\n]{;}
. {v=0;}
%%
int yywrap()
{
如果(v)
{
d=todec(o);
printf(“十进制是%d\n”,d);
}
其他的
{
printf(“无效”);
}
}
国际贸易日(10月国际贸易日)
{
int dec=0,pos=0;
而(10月)
{
INTA=10%10;
dec+=a*pow(8,位置);
pos++;
十月/=10;
}
返回12月;
}
int main()
{
printf(“输入八进制数:”);
yylex();
返回0;
}
我将引用
*当扫描仪从YYINPUT接收到文件结束指示时,它会检查yywrap()函数

因此,如果您使用ctrl-d模拟下线行为(输入数字并按下返回键后),您可以看到您的计算是正确的

如果您想立即看到结果,则必须在计算后写入输出


干杯

这是我很久以来见过的将文本中的数字转换成二进制的最奇怪的方法。使用
atoi()
转换一次,然后以某种方式重新解释已转换的数字,就像它是八进制的一样?
atoi()
的结果是“一个数字”;它可能在计算机内存中表示为位,但它肯定不是您的代码所假定的“十进制”。