1
我一直在尝试编写一个Lex程序将八进制数转换为十进制数。但是在接受数字作为输入之后,却没有做任何事情。没有输出。并没有程序终止。该程序仍在运行,没有任何输出。在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;
}
也就是说文本转换数为二进制我已经在很长一段时间看到的最奇怪的方式。你使用'atoi()'转换一次,然后以某种方式重新解释已转换的数字,就好像它是八进制的? 'atoi()'的结果是“一个数字”;它可能表示为在计算机内存中的位,但它肯定是*不是*“十进制”,因为您的代码似乎假设。 – unwind