7,指针用法,计算器代码

author author     2022-08-18     646

关键词:

#define _STDC_WANT_LIB_EXT1_ 1
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>
#define BUF_LEN 256

int main(void)
{
    char buf[BUF_LEN];
    //char number_string[30];
    char op = 0; //操作符
    size_t index = 0;
    size_t to =0;
    size_t buf_length = 0;
    //unsigned int number_length = 0;
    double result = 0.0;
    double number =0.0;
    char *endptr = NULL; 
    printf("To use this calculator, enter any expression with"
                                          " or without spaces.");
    printf("
An expression may include the operators");
    printf(" +, -, *, /, %%, or ^(raise to a power).");
    printf("
Use = at the beginning of a line to operate on ");
    printf("
the result of the previous calculation.");
    printf("
Enter quit to stop the calculator.

");

    //1.读入用户输入的字符串,是quit,就退出
    char *ptr =NULL;
    while(true)
    {
        ptr = fgets(buf,BUF_LEN,stdin);
        if(ptr == false)//测试
        {
            printf("Error reading input.
");
            return 1;
        }

        if(strcmp(buf,"quit
")==0) break;
        buf_length = strnlen_s(buf,BUF_LEN);
        buf[--buf_length] = ;
        //2.从输入字符串中删除空格
        for(to = 0,index = 0;index<=buf_length;++index)
        {
            if(*(buf+index)!= )
                *(buf+ to++) = *(buf+index);
        }

        buf_length = strnlen_s(buf,BUF_LEN);
        
        //3.在输入字符串中的开头检查 = 运算符,
        //如果有一个=运算符就把上一个输入字符串的结果作为下一个算数操作的左操作数。查找第一个操作数
        index = 0;
        if(buf[index]===)
            index++;
        else
        {    
        //4.给下一个算数操作的左操作数提取相应的输入字符,把该字符串转换为double类型
            result = strtod(buf+index,&endptr);//转换并存储数字
            printf("%s
",endptr);
            index = endptr-buf; //获取下一个字符的索引
        }
        //5.提取算数运算符,记录它。
        while(index < buf_length)
        {
            op = *(buf+index++);
            //6.给右操作数提取相应的输入字符,把该子字符串转换为double类型
            number = strtod(buf+index,&endptr);
            index = endptr - buf;
            //7.执行运算,把结果存储为下一个左操作数
            switch(op)
            {
                case +:
                    result += number;
                    break;
                case -:
                    result -= number;
                    break;
                case *:
                    result *= number;
                    break;
                case /:
                    if(number == 0) printf("

aDivision by zero error!
");
                    else
                        result /= number;
                    break;
                case %:
                    if((long long)number == 0LL) printf("

aDivision by zero error!
");
                    else
                        result = (double)((long long)result % (long long)number);
                    break;
                case ^:
                    result = pow(result,number);
                    break;
                default:
                    printf("

aIllegal operation!
");
                    break;
            }
        }
        

        

        //8.如果不是字符串的末尾,就返回第6步,如果在字符串的末尾,就返回第一步
        printf("= %f
",result);
    }
    return 0;
}

 

7.1练习,指针部分用法,算个平均数

#define_STDC_WANT_LIB_EXT1_1#include<stdio.h>#include<ctype.h>#include<stdlib.h>#defineCAP_INCR5intmain(void){double*values=NULL;intcapacity=0;double*temp=NULL;doublesum=0.0;intcount 查看详情

c++类和对象(类的介绍用法等及this指针)详细解读(代码片段)

C++类和对象(类的介绍、用法等及this指针)详细解读类和对象的基本概念类的定义对象封装类的作用域如何计算类对象的大小内存对齐this指针this指针的引出this指针的特性类和对象的基本概念类(class)是... 查看详情

c++类和对象(类的介绍用法等及this指针)详细解读(代码片段)

C++类和对象(类的介绍、用法等及this指针)详细解读类和对象的基本概念类的定义对象封装类的作用域如何计算类对象的大小内存对齐this指针this指针的引出this指针的特性类和对象的基本概念类(class)是... 查看详情

c指针原理(27)-编译基本原理-语法树及其实现7(代码片段)

下面完成一个简单的计算器通过语法树进行计算,首先定义一个语法树的结构,然后编写flex文件,解析数字或符号,对于?符号返回本身,对于数字,返回NUMBER,并对yylval的d进行赋值,yylval指向一个联合类型,接着,在语法分析... 查看详情

c语言指针进阶(下)(代码片段)

提示:本篇深度剖析数组和指针的知识点,并且列举多种例子来说明sizeof和strlen的用法接下来一起来学习吧👻👻文章目录前言九、数组和指针1.透彻理解整型数组图解:2.透彻理解字符数组(区分sizeof和strlen)重点:区分size... 查看详情

指针函数与函数指针的用法与区别(代码片段)

一、区别1、指针函数:指的就是返回值是指针的函数,本质就是个函数。2、函数指针:指的是指向函数的指针变量,本质就是个指针。二、用法1、指针函数:int*func(inta,intb);普通函数就是intfunc(inta,intb);,返回... 查看详情

指针的高阶用法——指向指针的指针(代码片段)

关于C指向指针的指针,我觉得并没有什么值得深究的,主要知识点以外部博客的形式列出。但是这里讲一些自己的一些想法。C指向指针的指针,其实就是多级指针的意思。将一个指针当成变量,进行二次转码,将其又转成指针... 查看详情

那些老师没讲的东西——关于指针与数组的一点小用法(代码片段)

指针与数组的一点小用法2021/6/16发现:今天在学习的过程中遇到了指针后面直接加数组(数组)p[]的情况,感到有点奇怪,是在开辟堆区内存的时候才可以这样子做吗?(我当时在学习堆区的相关知识)于是便开始了简... 查看详情

重头戏初识c++之指针(代码片段)

初识C++之指针(七)7指针7.1指针的基本概念7.2指针变量的定义和使用7.3指针所占内存空间7.4空指针和野指针7.5const修饰指针7.6指针和数组7.7指针和函数7.8指针、数组、函数7指针7.1指针的基本概念指针的作用:可... 查看详情

c语言数组(指针数组用法|自我结束能力)(代码片段)

文章目录一、指针数组用法(自我结束能力)二、完整代码示例一、指针数组用法(自我结束能力)在上一篇博客【C语言】数组(指针数组用法|命令行参数处理)中的主函数中的char**env参数,这是个指针数组,其传入参数后,退化为二级指... 查看详情

go语言|03数组指针切片用法(代码片段)

...章目录Go语言数组声明数组访问数组元素多维数组Go语言指针如何使用指针指针数组指向指针的指针指针作为函数参数Go语言切片(Slice)定义切片切片初始化len()和cap()函数切片截取append()和copy()函数Go语言数组Go语言提供了数组类型... 查看详情

python回调函数用法实例(代码片段)

...实例 回调函数  “回调函数就是一个通过函数指针调用的函数。  如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。”回调函数就是一... 查看详情

c语言const关键字用法(常量指针-const在*左边-修饰数据类型-内存不变|指针常量-const在*右边-修饰变量-指针不变)(代码片段)

文章目录一、const普通用法二、常量指针(指向常量的指针|被指向的内存不能被修改)三、指针常量(指针不能被修改)三、指向常量的指针常量四、const在*左右的意义一、const普通用法const关键字在C和C++中的表现不同,本篇博客... 查看详情

指针中容易混淆的概念以及常见笔试题(代码片段)

C语言指针文章目录C语言指针1.字符串指针2.指针数组3.数组指针4.数组参数,指针参数5.函数指针-指向函数的指针6.函数指针数组7.库函数qsort的用法:qsort(void*p,intnum1,intnum2,int(*cmp)(counstvoid*e1,counstvoid*e2))8.指针和数组练习题1.字符串指... 查看详情

交换两个变量的值(指针用法)(代码片段)

大意:用函数实现变量的值的交换,用到指针!思路:该函数要实现变量的值的交换,形参需为两变量的地址。1)若不是地址,形参是两个变量,那么传进去的是两个单纯的数值,数值在函数内部做了交换,即函数内的两个局... 查看详情

2022/7/17每日一题(构造+数学+贪心+指针)(代码片段)

D.PermutationRestoration题意:数组a(由1~n组成)通过计算格式i/a[i]转化为数组b,现在给定数组b,要求还原出数组a,输出其中一种可能即可。思路:1.i/a[i]=b[i]可通过数学思维转化为a[i]*b[i]=<i<a[i]*(b[i]+1)... 查看详情

c语言结构体指针用法异常问题(代码片段)

#include<stdio.h>typedefstructstudent intsno; floatscore;stu;intmain() floata=0.3; stuli=1,98.2; stu*p=&li; float*q=&a; printf("%d\\n",p->sno); printf( 查看详情

csharplinqparallel并行计算的用法(代码片段)

查看详情