我目前正试图将一个等式转换为更简单的形式,并发现我的代码在循环结束时过度写入了值
我发现了类似的讨论,但并不完全是我想要的。大多数文章都使用其他语言,所以我无法得到答案
如有任何答案,我们将不胜感激
以下是我的代码
int index=0;
int结果=0;
char-tresult[100];
char*方程[100]={NULL,};
char*temp=strtok(输入“);
对于(int i=1;i<;x;i=i+2)
{
char*temp_符号=方程[i];
如果(*临时符号=='*'))
{
结果=atoi(方程式[i-1])*atoi(方程式[i+1]);
sprintf(tresult,“d”,result);
方程[i-1]=tresult;
sprintf(方程式[i],“d”,0);
sprintf(方程式[i+1],“d”,0);
}
}
对于(int j=0;j<;x;j++)
{
printf(“%s”,等式[j]);
}
预期投入
5*3+1*2
目标产量
150+200
我将通过添加额外代码将0删除,使其成为
15+2
但目前,我的输出看起来像
200+200
当我打印出循环中的值时,所有值都正确显示。造成这种问题的原因可能是什么
如果我们画出指针,可能更容易理解
假设输入
最初等于”;5*3+1*2“
,然后在循环之后,方程
将如下所示:
+-------------+ |方程[0]|------------------------\ +-------------+ | |方程[1]|-->|输入[2]|……|124;+------------+-----+ +-------------+>-->tresult[0]|| |方程[2]|-->|输入[4]|……|124;+------------+-----+ +-------------+ | |方程[3]|------------------------/ +-------------+ |方程[4]|-->|输入[10]|| +-------------+ |方程[5]|-->|输入[12]|| +-------------+
如上所述;图纸;方程[0]
和方程[3]
都将指向单个数组的第一个字符tresult
而tresult
将始终包含最后一次使用sprintf写入其中的内容(tresult,“d”,result)
。在您的示例中,哪个将是“;2“