C语言简易科学计算器加减乘除括号

#include<stdio.h>#include<stdlib.h>main(){inti,j,h,g,num[20],z,m,n,s;charch[80],r,sig... #include <stdio.h>
#include <stdlib.h>
main()
{
int i,j,h,g,num[20],z,m,n,s;
char ch[80],r,sign[20];
for (i=0;i<20;i++)
{
num[i]=0;
} /*储存数组初始化*/
for (i=0;;i++)
{
scanf("%c",ch[i]);
if (ch[i]=='\n')
{
z=i;
break;
}
} /*读入程序到此结束*/

for(i=0;i<=z;i++)
{
s=0;
switch (ch[i])
{
case '+':sign[s]='+';s++;
case '-':sign[s]='-';s++;
case '*':sign[s]='*';s++;
case '/':sign[s]='/';s++;
case '(':sign[s]='(';s++;
case ')':sign[s]=')';s++;

}
} /*读入符号*/

do{
m=0;
num[m]=atoi(ch);
n=sizeof(num[0]);
for (i=n+2;i<=z-n-2;i++)
{
ch[i-n-2]=ch[i];
}
m++;
}while (ch[0]=='\n'); /*进行数字的读入转换*/

for (i=0;;i++) /*开始进行计算*/
{
if (sign[i]=='(')
{
for (j=i+1;j<=z;j++)
{
if (sign[j]==')')
{
for (h=i+1;h<=j;h++)
{
if (sign[h]=='*')
{
num[h-1]=num[h-1]*num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
if (sign[h]=='/')
{
num[h-1]=num[h-1]/num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
}
for (h=i+1;;h++)
{
if (sign[h]=='+')
{
num[h-1]=num[h-1]+num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
if (sign[h]=='-')
{
num[h-1]=num[h-1]-num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
}
}
}
}
for (h=i+1;h<=j;h++)
{
if (sign[h]=='*')
{
num[h-1]=num[h-1]*num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
if (sign[h]=='/')
{
num[h-1]=num[h-1]/num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
}
for (h=i+1;;h++)
{
if (sign[h]=='+')
{
num[h-1]=num[h-1]+num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
if (sign[h]=='-')
{
num[h-1]=num[h-1]-num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
}
}
printf("%d \n",num[0]);
r=getchar();
return 0;
}
无法运行程序。。想问下是为啥。。。
展开
 我来答
Rankabc
推荐于2016-12-01 · TA获得超过3559个赞
知道大有可为答主
回答量:3705
采纳率:59%
帮助的人:1046万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
int i,j,h,g,num[20]={0},z,m,n,s; //num[20]可以这样初始化
char ch[80],r,sign[20];
    
gets(ch);  //字符串输入
                
    for(i=0;i<strlen(ch);i++)
{
s=0;
switch (ch[i])
{
case '+':sign[s]='+';s++;break; //缺少break;
case '-':sign[s]='-';s++;break;
case '*':sign[s]='*';s++;break;
case '/':sign[s]='/';s++;break;
case '(':sign[s]='(';s++;break;
case ')':sign[s]=')';s++;break;

}
}                                          /*读入符号*/

do{
m=0;
num[m]=atoi(ch);            
n=sizeof(num[0]);
   for (i=n+2;i<=(z-n-2);i++)
{
   ch[i-n-2]=ch[i];
}
m++;
}while (ch[0]=='\n');            /*进行数字的读入转换*/
  
/////  发现下面好多死循环,怎么可能会有结果呢   ////////////////
    for (i=0;;i++)                   /*开始进行计算*/
{
if (sign[i]=='(')
{
for (j=i+1;j<=z;j++)
{
                 if (sign[j]==')')
{
for (h=i+1;h<=j;h++)
{
if (sign[h]=='*')
{
num[h-1]=num[h-1]*num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
                          if (sign[h]=='/')
{
num[h-1]=num[h-1]/num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
}
for (h=i+1;;h++)
{
 if (sign[h]=='+')
{
num[h-1]=num[h-1]+num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
                          if (sign[h]=='-')
{
num[h-1]=num[h-1]-num[h];
for (g=h;;g++)  //死循环
{
num[g]=num[g+1];
}
}
}
}
}
}
for (h=i+1;h<=j;h++)
{
if (sign[h]=='*')
{
num[h-1]=num[h-1]*num[h];
for (g=h;;g++)   //死循环
{
num[g]=num[g+1];
}
}
            if (sign[h]=='/')
{
num[h-1]=num[h-1]/num[h];
for (g=h;;g++)   //死循环
{
num[g]=num[g+1];
}
}
}
for (h=i+1;;h++)   //死循环
{
if (sign[h]=='+')
{
num[h-1]=num[h-1]+num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
            if (sign[h]=='-')
{
num[h-1]=num[h-1]-num[h];
for (g=h;;g++)
{
num[g]=num[g+1];
}
}
}
}
    printf("%d \n",num[0]);
r=getchar();
return 0;
}
月霜白露
2014-02-06 · 超过34用户采纳过TA的回答
知道答主
回答量:68
采纳率:0%
帮助的人:48.8万
展开全部
不好意思,挺晚了,您的程序只是大致看了一下,
scanf("%c",ch[i]);此处拙见认为少了一个&;
此外,您看输入改为如下:
gets(ch);
for (i=0;;i++)
{
if (ch[i]=='\n')
{
z=i;
break;
}
}
可不可以。
另您的switch在使用时,每一个case后都没有break;
本人不才,不太理解是不是您有意为之。
望您对您的程序提供更清晰的说明。
追问
依然不能执行啊。直接就是停止工作。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式