#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
char ch={0};//单个字符
int numarr[30];//存放最终计算的数字的数组
int num_i=0;
int fn=0;//存放最终的结果
char tnsarr[30];//存放数字字符的临时字符串数组
int tnsa_i=0;//上面数组的下标
char jsarr[30];//存放+-字符的临时字符串数组
int jsa_i=0;//上面数组的下标
int tcnarr[30];//存放乘除数字的临时整型数组
int tcna_i=0;//上面数组的下标
char csarr[30];//存放*/字符的临时字符串数组
int csa_i=0;//上面数组的下标
int isj=0;//是否执行过乘除操作的标志。如果是则值为1,否则为0
int tfn=0;//所有乘除的积或商
/*函数声明*/
void Count(void);//主要函数,用于获取用户输入和判断用户输入以调用其他函数执行操作
void setJstr(void);//处理用户输入的'+'和'-'
void setCstr(void);//处理用户输入的'*'和'/'
void setKstr(void);//处理用户输入的'('和')'
void setNumberstr(char ch);//处理数字
void iniTsarr(void);//初始化临时数字字符串数组
void countC();//计算所有乘除的和
void inic();//初始化乘除操作
void finish(void);//最后调用该函数,将计算结果赋给fn变量
void iniAll(void);//初始化所有变量。让程序可以重复运行
int main(void)
{
system("cls");
printf("********************C语言简易计算器********************\n");
printf("| e 结束运行 |\n");
printf("| +(加) |\n");
printf("| -(减) |\n");
printf("| *(乘) |\n");
printf("| /(除) |\n");
printf("*******************************************************\n");
while(1)
{
printf(" ");
Count();
if('\0'!=tnsarr[0]||'\0'!=jsarr[0])//如果发现这两个字符数组有一个为空,则认为用户什么都没有输入
{
printf("= %d\n",fn);
}
//初始化所有变量
iniAll();
}
return 0;
}
void Count()
{
while(1)//如果用户输入回车则停止获取
{
ch=getch();
if('*'==ch||'/'==ch){
//处理*/
setCstr();
}
if('+'==ch||'-'==ch)
//处理+-
setJstr();
if(ch>=48&&ch<=57)
//处理数字
setNumberstr(ch);
if('e'==ch)//退出程序
exit(0);
//计算机结果(跳出循环获取键盘)
if('='==ch||'\r'==ch)
{
numarr[num_i]=atoi(tnsarr);//将临时字符串中的数字转换成整型数字赋给主数组
++num_i;
break;
}
}
finish();//最终计算
return ;
}
//处理加减
void setJstr()
{
/*处理+-,将+-存入字符数组*/
printf("%c",ch);
if(0==isj)//isj只能生效一次。一次过后又回到0的状态。因为下面的代码
{
numarr[num_i]=atoi(tnsarr);//将临时字符串中的数字转换成整型数字赋给主数组
++num_i;
}
isj=0;
iniTsarr();//清空临时数组
jsarr[jsa_i]=ch;
++jsa_i;
return;
}
//处理乘除
void setCstr()
{
printf("%c",ch);
tcnarr[tcna_i]=atoi(tnsarr);//将*号前的数字赋给临时整型数组
++tcna_i;
iniTsarr();//初始化tnsarr数组
csarr[csa_i]=ch;//将*或/符号赋给临时字符数组
++csa_i;
countC();
return;
}
void countC()
{
while(1)
{
ch=getch();
if(ch>=48&&ch<=57)
setNumberstr(ch);
if('*'==ch||'/'==ch)
{
setCstr();
return;
}
if('='==ch||'\r'==ch||'+'==ch||'-'==ch)
{
tcnarr[tcna_i]=atoi(tnsarr);//将*号前的数字赋给临时整型数组
++tcna_i;
int i;
tfn=tcnarr[0];
for(i=0;i<tcna_i;++i)
{
if('*'==csarr[i])
{
tfn*=tcnarr[i+1];
}
if('/'==csarr[i])
tfn/=tcnarr[i+1];
}
isj=1;
break;
}
}
numarr[num_i]=tfn;
++num_i;
inic();//初始化乘除操作
return;
}
/*处理数字*/
void setNumberstr(char c)
{
printf("%c",ch);
tnsarr[tnsa_i]=c;
++tnsa_i;
return;
}
//初始化临时数字字符串数组
void iniTsarr()
{
tnsa_i=0;
memset(tnsarr,'\0',30*sizeof(char));
return;
}
//计算结果
void finish()
{
int i=0;
fn=numarr[0];
for(i=0;i<num_i;++i)
{
if('+'==jsarr[i])
{
fn+=numarr[i+1];
}
if('-'==jsarr[i])
{
fn-=numarr[i+1];
}
}
return;
}
void iniAll(void)
{
memset(numarr,0,sizeof(int)*30);//存放最终计算的数字的数组
num_i=0;//(Number index)
fn=0;//存放最终的结果
memset(tnsarr,'\0',sizeof(char)*30);//存放数字字符的临时字符串数组
tnsa_i=0;//上面数组的下标
memset(jsarr,'\0',sizeof(char)*30);//存放+-字符的临时字符串数组
jsa_i=0;//上面数组的下标
memset(csarr,'\0',sizeof(char)*30);//存放*/字符的临时字符串数组
csa_i=0;//上面数组的下标
isj=0;
return;
}
//初始化乘除操作
void inic()
{
memset(tcnarr,0,sizeof(int)*30);//存放乘除数字的临时整型数组
tcna_i=0;//上面数组的下标
memset(csarr,0,sizeof(char)*30);//存放*/字符的临时字符串数组
csa_i=0;//上面数组的下标
tfn=0;
return;
}
c语言制作简单的计算器
猜你喜欢
转载自blog.csdn.net/weixin_44417475/article/details/100052774
今日推荐
周排行