计算器返回0值,不能输入双数
Calculator returns 0 value, can‘t input double numbers
我将temp
格式化为double
,但输入没有小数点的数字时会返回0
,输入有小数点的数据会导致"表达式无效"。
%{
#include<stdio.h>
#include<math.h>
int valid=0
double temp;
%}
%token num
%left '+''-'
%left '*''/'
%left '^'
%nonassoc UMINUS
%%
expr1: expr { temp=$1; }
expr : expr '+' expr { $$=$1+$3; }
| expr '-' expr { $$=$1-$3; }
| expr '*' expr { $$=$1*$3; }
| expr '/' expr { if($3==0) { valid=1; $$=0; } else { $$=$1/$3; } }
| '(' expr ')' { $$=$2; }
| '-' expr { $$=-1*$2; }
| num { $$=yylval;}
;
%%
#include<stdlib.h>
int yyerror(){
printf("nInvalid expression!n");
valid=2;
return 0;
}
int yyparse();
double main(double argc, char *argv[]){
extern FILE *yyin;
++argv;
--argc;
yyin=fopen(argv[0],"r");
yyparse();
if(valid==1){
printf("nDivision by 0!n");
}
if(valid==0){
printf("nValid expression!n");
printf("The value evaluated is %dn",temp);
}
return 0;
}
由于既没有定义YYSTYPE
也没有定义%union
,因此会得到默认的YYSTYPE
,即int
。因此,当您将所有浮点值用作语义值时,它们都将转换为整数。
在语法的第一部分添加一个#define YYSTYPE double
(在%{
…%}
之间(,它将是一个双精度。
相关文章:
- 为什么不能通过在错误输入后设置 std::cin.clear() 来使用 std::cin?
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- 为什么我不能从结构将数据输入到字符数组中?
- 确定输入"conscalc: calc"的类型时出错。不能联合编码器。具有不同字段集的结构类型
- 不能将类中的输入函数与带参数的函数分开
- 为什么我不能继续使用 std::cin 向同一变量输入其他值?
- 为什么我不能从输入文件中检索简单数据并使用C++将其写入输出文件?
- 输入 EOF 后,不能重复使用 cin 来读取值
- C++ 入门 5th 1.4.4 为什么不能立即输入 std::cout 内容
- 不能在一行中输入 (cin) 超过 10 个整数,以空格分隔到数组中
- 为什么我不能在以下代码中提供空间作为输入?
- 为什么我们不能在C++输入数组时输入向量?
- 为什么我不能使用此 scanf 函数读取输入字符串?
- 输入布局,访问违规,错误处理不能像我希望的那样工作
- c++的新功能,scanf不能正确读取/打印输入
- SFML文本输入不能正常工作
- 为什么我不能使用两个scanf函数输入字母
- 不能在回文程序中输入多个字符串
- 如果是字符或字符串返回false,但如果输入不能转换为整数则返回true.c++的while循环
- 计算器返回0值,不能输入双数