c语言实现一个计算器

本文介绍了使用C语言实现一个计算器所遇到的核心算法问题,包括如何处理输入的回车字符、正负号判断以及符号优先级。通过将输入验证、计算和输出等功能模块化,简化了主函数。文章详细探讨了输入验证函数、计算和输出环节的实现,以及处理数字字符串转换和符号优先级判断的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

流程图(函数有点多)
在这里插入图片描述
核心算法:
在这里插入图片描述

先上代码为敬,之后详细拆分每个函数

#include <stdio.h>
#include <stdlib.h>

void calculator_run();   //管理运行,输入,计算相关
int input_and_legal(char []);  //输入并验证字符合法
int legal(char);    //验证字符合法
void compute_and_output(char []);   //相关处理,输出结果
double str_to_double(char [],int *);    //字符串转浮点型
int priority(char,char);       //优先级验证
int sign_to_num(char);       //符号转数字,协助优先级验证
int compute_and_legal(double *,double *,char *,char *);   //计算并验证等式有效
int bracket_and_legal(char [],int *);    //验证括号

int main()
{
   
	char judge;
	printf("输入s开始,输入e退出\n");
	scanf(" %c",&judge);

	if(judge=='s') calculator_run();
	else if(judge!='e') printf("输入错误\n");

	return 0;
}

void calculator_run()
{
   
	char text[1000],judge=1;      //text储存输入文本
	do{
   
		if(input_and_legal(text))      //如果输入合法
		{
   
			compute_and_output(text);      //计算并输出
		}
		
		printf("输入c清除,输入e退出\n");
		scanf(" %c",&judge);
	}while(judge!='e');
}

int input_and_legal(char text[1000])
{
   
	printf("请输入不超过999个字符\n");
	int i=0,ret=1;
	do{
   
		scanf(" %c",&text[i]);
		if(!legal(text[i]))       //如果字符非法
		{
   
			printf("输入%c有误!\n",text[i]);
			ret=0;
		}
	}while(i<999 && text[i++]!='=');
	text[i]='\0';
	return ret;
}

int legal(char ch)
{
   
	if(ch>'9' || ch<'0')
	{
   
		if(ch=='+' || ch=='-' || ch=='*' || ch=='/' || ch=='(' || ch==')' || ch=='.' || ch=='=')
		{
   
			return 1;
		}
		else return 0;
	}
	return 1;
}

void compute_and_output(char text[1000])
{
   
	double number[500];     //储存数字
	char sign[500];      //储存符号
	int n_i=0,s_i=0,t_i=0;     //n_i为number索引,s_i为sign索引,t_i为text索引

	while(text[t_i]!='\0')
	{
   
		if((text[t_i]<='9') && (text[t_i]>='0'))
			number[n_i++]=str_to_double(text,&t_i);    //储存相关数字

		if((text[t_i]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值