用c-free写的一个简易计算器

程序是一个简易的计算器
在运行一次后想按#号结束,但是会进入无限循环。问问各位怎么解决


#include"math.h"
#include"stdio.h"
main()
{
    float fnum1,fnum2;
    char chOP='0';
    while(chOP!='#')
    {
        printf("请输入计算式。");
        scanf("%f%c%f",&fnum1,&chOP,&fnum2);
        if(fabs(fnum1)<1e-6)
        break;
        switch(chOP)
        {
            case'+':printf("%f%c%f=%f\n",fnum1,chOP,fnum2,fnum1+fnum2);
                break;
            case'-':printf("%f%c%f=%f\n",fnum1,chOP,fnum2,fnum1-fnum2);
                break;
            case'*':printf("%f%c%f=%f\n",fnum1,chOP,fnum2,fnum1*fnum2);
                break;
            case'/':if(fabs(fnum2)>1e-6)
                printf("%f%c%f=%f\n",fnum1,chOP,fnum2,fnum1/fnum2);
            else
                printf("除数不能为0");break;
            default:printf("未知运算符。");break;
        }
    }
}

  • 这篇文章:C语言基础_一个错误的程序引出的知识点 也许有你想要的答案,你可以看看
  • 除此之外, 这篇博客: 【动态内存】C语言动态内存管理及使用总结篇【初学者保姆级福利】中的 使用free释放动态内存中的一部分 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 释放了,但没完全释放

    //4.使用free释放动态内存中的一部分
    int main()
    {
    	int* p = malloc(10 * sizeof(int));
    	if (p == NULL)
    	{
    		return 1;
    	}
    	int i = 0;
    	for (i = 0; i < 5; i++)
    	{
    		*p++ = i;//我的p不见了
    	}
    	free(p);//err
    	p = NULL;
    	return 0;
    }
    

    *在这个代码中,由p指针指向的动态内存开辟后,我们的p在后续操作中改变了它自己的值,这意味这什么?
    这代表没东西再可以找到这块空间了,我们到时候free§只是free()掉了p后面的一些空间,那么p前面的空间呢?不管了?
    所以如果p这个位置改变了,找不到了是一件很可怕的事情。

    那么,我们如何避免呢?
    如果在后续我们要操作p,我们一开始就要用另一个的指针变量来记录我一开始p的位置,最后free()这个记录起始位置的指针变量,这样就可以避免“free()了,但没完全free()的问题”