垃圾值越来越分配 [英] Garbage values are getting assigned

查看:94
本文介绍了垃圾值越来越分配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这基本上需要一个前pression作为输入,并从左至右计算它。没有precedence。我打破了东西时,我编辑我的变量的名称。它不为简单的前pression点¯xEEN工作。
例如输入:
X + 3-4 * X
1
63
3
33
1000

 #包括LT&;&stdio.h中GT;
#包括LT&;&MATH.H GT;INT结果为0;
字符运算;//这个函数计算的操作,并返回一个整数
INT计算(INT R,诠释的x,焦运)
{
    开关(OP)
    {
        案例'+':回归R + X;
            打破;
        案例' - ':回归R-X;
            打破;
        案例'/':回归R / X;
            打破;
        案例'*':回归R * X;
            打破;
        案例'^':回报(INT)POW((双)R,X);
            打破;    }
}//这个函数打破了前pression为标记,并在结果变量计算结果
虚空solveEx pression(字符前pression [],诠释N,INT X)
{
    INT I;
    炭温度[10];
    INT POS = 0;
    INT检查= 0;
    // INT结果为0;
    对于(i = 0; I< = N;我++)
    {
        //存储第一个数字
        如果((检查== 0)及及(前pression [1] - GT ='0')及及(前pression [1] - ='9'))
        {
            POS = 0;
            临时[POS] =前pression [I]
            温度[POS + 1] ='\\ 0';
            POS ++;
            检查= 1;
        }
        //商店第二个数字
        否则如果((检查== 1)及及(前pression [1] - GT ='0')及及(前pression [1] - ='9'))
        {
            临时[POS] =前pression [I]
            温度[POS + 1] ='\\ 0';
            POS ++;        }
        //检查字符
        其他
        {
            //如果存在,店内温度炭[]为int运
            如果(POS大于0)
            {
                //如果它是第一个数字
                如果(OP =='\\ 0')
                    结果=与atoi(临时);
                //如果它是在中心数
                否则结果=计算(结果,与atoi(TEMP),OP);
            }            //复位值
            POS = 0;
            检查= 0;            //检查信
            如果(如pression [I] =='X')
            {
                如果(OP =='\\ 0')
                      结果= X;
                其他
                结果=计算(结果,X,OP);
            }            //检查操作员
            否则,如果((如pression [I] =='+')
                    ||(如pression [我] ==' - ')
                    ||(例如pression由[i] =='*')
                    ||(如pression [I] =='/')
                    ||(如pression [I] =='^'))            {
                OP =前pression [I]
            }
        }
    }}
INT主要(无效)
{
    INT瓦利= 0;
    焦恩pression [80];
    INT arr_value [100];
    INT X;    //扫描前pression
    scanf函数(%[^ \\ n]的,前pression);    //填充值数组,直到输入值= 1000
    而(1)
    {
    scanf函数(%d个,&安培; arr_value [瓦利]);
    如果(arr_value [瓦利] == 1000)
        打破;
    其他
        瓦利++;
    }
    瓦利= 0;
    //计算每个值
    而(arr_value [瓦利]!= 1000)
    {
        //设置全局的x值
        X = arr_value [瓦利]
        //解决前pression
        //打印结果
        solveEx pression(如pression,80,X);
        的printf(\\ n结果%d个\\ N,结果);
        // NEXT值
        瓦利++;
        结果= 0;    }
    的printf(\\ n);
}


解决方案

这两个全局变量运算和结果需要进行重置,而每次循环。

 而(arr_value [瓦利]!= 1000)
{
    //设置全局的x值
    X = arr_value [瓦利]
    //解决前pression
    //打印结果
    solveEx pression(如pression,80,X);
    的printf(\\ n结果%d个\\ N,结果);
    // NEXT值
    瓦利++;
    结果= 0;
    OP ='\\ 0'; //添加此行重置全局变量
}

This basically takes an expression as input and evaluates it from left to right. No precedence. I broke something when I edited the names of my variables. It does not een work for the simple expression x. Example input: x+3-4*x 1 63 3 33 1000

#include<stdio.h>
#include<math.h>

int result=0;
char op;



//This function computes the operations and returns an integer
int compute(int r, int x, char op)
{
    switch (op)
    {   
        case '+':return r+x;
            break;  
        case '-':return r-x;
            break;
        case '/':return r/x;
            break;
        case '*':return r*x;
            break;
        case '^':return (int) pow((double) r,x);
            break;

    }
}

//This function breaks the expression into tokens and computes result in result variable
void solveExpression(char expression[],int n, int x)
{
    int i;
    char temp[10];
    int pos=0;
    int check = 0;
    //int result=0;
    for(i=0;i<=n;i++)
    {
        //store first number
        if((check==0)&&(expression[i]>='0')&&(expression[i]<='9'))
        {
            pos=0;
            temp[pos]=expression[i];
            temp[pos+1] = '\0';
            pos++;
            check = 1;
        }
        //store second number 
        else if ((check==1)&&(expression[i]>='0')&&(expression[i]<='9'))
        {
            temp[pos]=expression[i];
            temp[pos+1] = '\0';
            pos++;

        }
        //check character
        else
        {
            //if exists, store char temp[] as int op            
            if(pos>0) 
            {
                //if it is first number
                if (op=='\0') 
                    result =atoi(temp);
                //if it is number in the centre
                else result=compute(result, atoi(temp), op);
            }

            //reset values
            pos=0; 
            check = 0;

            //Check for letter
            if (expression[i]=='x')
            {   
                if (op=='\0') 
                      result=x;
                else 
                result = compute(result,x,op);
            }

            //Check for operator            
            else if ((expression[i]=='+')
                    ||(expression[i]=='-')
                    ||(expression[i]=='*')
                    ||(expression[i]=='/')
                    ||(expression[i]=='^'))         

            {
                op=expression[i];
            }
        }
    }

}


int main(void)
{
    int vali=0;
    char expression[80] ;
    int arr_value[100]; 
    int x;

    //Scan Expression
    scanf("%[^\n]s", expression);

    //Fill array of values until input value=1000
    while(1)
    {
    scanf("%d", &arr_value[vali]);
    if(arr_value[vali]==1000)
        break;  
    else    
        vali++;   
    }


    vali=0;
    //Compute for each value
    while(arr_value[vali]!=1000)
    {   
        //Set global x value
        x=arr_value[vali];
        //Solve expression 
        //Print result
        solveExpression(expression,80,x) ;  
        printf("\n result %d\n", result);       
        //Next Value        
        vali++; 
        result=0;

    }   
    printf("\n");
}   

解决方案

Both global variables op and result need to be reset for each iteration of while loop.

while(arr_value[vali]!=1000)
{   
    //Set global x value
    x=arr_value[vali];
    //Solve expression 
    //Print result
    solveExpression(expression,80,x) ;  
    printf("\n result %d\n", result);       
    //Next Value        
    vali++; 
    result=0;
    op='\0'; // add this line to reset global variable
}   

这篇关于垃圾值越来越分配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆