为什么下列代码(简单的C语言计算器代码)在通过编译和组建后却无法正确运行?

该计算器代码在编译和组建时显示0错误,0警告,可是在运行时如果输入像“1+2+3”这样的字符串的话就会弹出“出现了未知字符”的错误提示,可是我这时分明没有打入未知字符啊,请问到底是代码哪里出错了?请大家帮我改改!

代码如下:
#include<stdio.h>
char o;
void is(char a)
{
if(o==a)
o=getchar();
else
{
printf("输入了未知的运算符,即将退出程序\n");
exit(1);
}
}
int bracket(void)
{
int result;
if (o=='(')
{
is('(');
result=low();
is(')');
}
else if (o>='0'&&o<='9')
{
ungetc(o,stdin);
scanf("%d",&result);
o=getchar();
}
else
{
printf("输入了未知的字符,即将退出程序\n");
exit(1);
}
return result;
}
int high(void)
{
int divide;
int result=bracket();
while((o=='*')||(o=='/'))
if (o=='*')
{
is('*');
result*=bracket();
break;
}
else if (o=='/')
{
is('/');
divide=bracket();
if (divide==0)
{
printf("错误,除数为0,即将退出程序\n");
exit(1);
}
result/=divide;
break;
}
return result;
}
int low(void)
{
int result=high();
while((o=='+')||(o=='-'))
if (o=='+')
{
is('+');
result+=high();
break;
}
else if (o=='-')
{
is('-');
result-=high();
break;
}
else
{
printf("出现了未知字符\n");
exit(1);
}
return result;
}
main()
{
int result;
printf("请输入要计算的式子\n");
o=getchar();
result=low();
if(o=='\n')
printf("计算结果是%d\n",result);
else
{
printf("出现了未知字符\n");
exit(1);
}
scanf("%d",result);
return 0;
}
顺带一提,我用的编译器是VC++6.0

很明显,你的代码在处理1+2+3的case上存在bug的,而处理(1+2)+3或者1+(2+3)则是OK的,查看错误的原因也是if(o=='\n')不成立而走入了else无法解析字符+追问

那应该怎么改呢?我要的是解决方案

追答

很简单,将int low(void)中的两个break删除!

追问

为什么我在点了组建和编译后却看不到源文件的文件夹内有EXE文件?
虽然这个问题本不该由你再为我解答的但拜托了,燃眉之急求解答啊!

追答

没关系,是否这个exe文件生成在Debug/Release目录下拉,找找看;

一般地,如果你没有使用makefile自己组建工程的话,exe文件就是按照IDE自己定义的path去生成的

温馨提示:内容为网友见解,仅供参考
无其他回答

C语言代码运行不出现象可能有哪些原因?
环境问题:代码在不同的操作系统、编译器或硬件平台上可能存在差异,导致代码无法正常运行。可以检查编译器和操作系统的兼容性,或在特定的环境中运行代码。逻辑问题:代码逻辑存在问题,导致代码无法正确执行。可以检查代码逻辑是否正确,是否存在死循环、递归深度过大等问题。综上,C语言代码运行不出现象可能...

c语言编的很简单的计算器,实现两个两位数四则运算,运行程序输入完计算...
如果假设输入案例是12+12的话,按照你的程序你应该这样输入:1 2+1 2数字之间要有空格或者这样输入:1 2+ 1 2 也就是分四行输入数据,如果你想输入12+12然后键入回车程序自动运行的话,你可以这样修改:include <stdio.h> int main(){ char a[5];\/\/存计算表达式 int m,n;printf("请输入两...

C语言计算器程序错误
第一次计算完毕z=10之后,没有更新i的位置,循环第二次又计算了z=0。所以你b数组最后存储的是 10,0,2,3,3,1,于是计算成了 10+0*2\/3-3等于7.在计算完z的数值后,要更新i的位置,在j=j+1与x=z之间添加 i = k -1这一句,如下。简单测了一下,应该好了。……while(a[j]>='...

keil5.14 软件仿真所有代码都不能运行,是什么原因?
代码逻辑错误: 检查你的代码是否存在逻辑错误,这可能导致程序在运行时无法继续执行。查看代码中的循环、条件语句、函数调用等部分,确保逻辑正确。死循环: 如果程序中存在死循环,可能导致程序无法正常结束。检查是否有意外的无限循环。资源耗尽: 检查你的程序是否在运行过程中消耗了过多的资源,例如内存。

编程菜鸟,这段代码有错?教材上是这样的啊编译器不停报错,根本停不下来...
上面是一段c语言程序,简单分析一下为什么调不通:include<stdio.h>为IO函数类库必须有,要不printf和scanf都使用不了。main{中间是一下代码},是主函数,一个c程序必须有它,所有的逻辑都要写在里面,才能运行,但是这个前面要给它一个返回值,一般void mian{}就行,设置无返回值,要不会报错。

C语言代码简单计算器,为什么运行结果多了0.000001(\/\/̀Д\/́\/)是...
这是二进制造成的浮点数误差。计算机计算不太大的整数时是非常精确的,但是在计算小数、以及必须使用科学计数法表示的巨大整数时,由于小数的十进制与二进制转换的时候会有一个奇怪的现象:许多看起来非常简单的十进制小数转换为二进制的时候,可能位数超过计算机的精度、甚至是一个循环小数,计算机不得不...

用C语言设计一个简单计算器程序,能根据键盘输入的运算指令和数据,做...
回答:可以 去做吧

怎么让C语言写的计算器计算完一组数以后不让程序结束,返回再重新计算别...
增加了循环输入的功能,你试试吧,代码最后4句是后加的:include<stdio.h>#include <ctype.h>int main(){ while(1) {float a,b;printf("请输入两个正数,中间用逗号隔开:\\n");scanf("%f,%f",&a,&b);printf("两数之和a+b为%f\\n",a+b);printf("两数之差a-b为%f\\n",a-b)...

计算器c语言代码
你这个代码的问题太多了,下面已经给你一一改过来了,并且编译运行通过了,自己比较一下: 你原先的错误都给你标出来了:#include<stdio.h> void displaymenu() \/\/这个函数应该放在main函数外面进行定义{ printf("\\n\\n***\\n"); printf("* 1.加法 *\\n"); printf("* 2.?法 *\\n"); printf("* 3.乘法...

用c语言程序设计一个简单计算器,求其源代码
char cnum[5], str2[20] = "", c;int x, y, x0, y0, i, j, v, m, n, act, flag = 1;\/* Function prototypes *\/ void drawboder(void);void initialize(void);void computer(void);void changetextstyle(int font, int direction, int charsize);void mwindow(char *header);...

相似回答