私は式へのポインタを取得する関数を持っていて、コードはアドレスが大きくなる(式++)ので、関数が2つに分割されたいポインタへのポインタを使用しなければならなかった、私はそれが間違って使用したと思うので、今私のコードは無限ループを持っています。ここで私は分割したい機能は、機能を助けるために続いている:関数を2つの関数に分割したい
char CalculateExpression(char *expression, char *LEFT, char *RIGHT){
int i,depth;
expression++;
if (Is_Digit(expression))
{
i=0;
while(Is_Digit(expression))
{
LEFT[i] = *expression;
i++;
expression++;
}
}
else
{
i=0;
LEFT [i] = *expression;
i++;
expression++;
depth = 1;
while(depth > 0)
{
if (*expression == '(') depth++;
if (*expression == ')') depth--;
LEFT[i] = *expression;
i++;
expression++;
}
}
LEFT[i] = 0;
char OPERATION = *expression;
expression++;
i=0;
while (*(expression+1))
{
RIGHT[i] = *expression;
i++;
expression++;
}
RIGHT[i] = 0;
return OPERATION;}
、ここでは、二つのヘルプ機能の機能である:ここ
bool Is_Digit(char *c)
{
return (*c >= '0' && *c <= '9');
}
bool Is_Num(char *exp)
{
while(*exp)
{
if (!Is_Digit(exp++)) return false;
}
return true;
}
は私がやったことですが、私は内のポインタへのポインタを定義しその方法の主な機能:
bool calculate_modular_expression(unsigned int modulus, char* expression,
unsigned int* expression_result)
{
char** expression_after;
expression_after= &expression;
CalculateExpression(expression,Left_To_Operation,
Right_To_Operation,expression_after);
}
と私は(分割後)その他の機能を変更する方法thatsの、新しい機能がLeft_Operand呼び出されます。
変更後のint Left_Operand(char *LEFT, char *RIGHT,char** expression_after)
{
int i,depth;
if (Is_Digit(expression_after))
{
i=0;
while(Is_Digit(expression_after))
{
LEFT[i] = **expression_after;
i++;
expression_after++;
}
}
else
{
i=0;
LEFT [i] = **expression_after;
i++;
expression_after++;
depth = 1;
while(depth > 0)
{
if (**expression_after == '(') depth++;
if (**expression_after == ')') depth--;
LEFT[i] = **expression_after;
i++;
expression_after++;
}
}
LEFT[i] = 0;
}
char CalculateExpression(char *expression, char *LEFT, char *RIGHT,char** expression_after)
{
int i,depth;
expression++;
Left_Operand(LEFT,RIGHT,expression_after);
expression = *expression_after;
char OPERATION = *expression;
expression++;
i=0;
while (*(expression+1))
{
RIGHT[i] = *expression;
i++;
expression++;
}
RIGHT[i] = 0;
return OPERATION;
}
、最終的にはヘルプ機能:
bool Is_Digit(char **c)
{
return (**c >= '0' && **c <= '9');
}
/*this char returns true if an expression is a number*/
bool Is_Num(char **exp)
{
while(**exp)
{
if (!Is_Digit(exp++)) return false;
}
return true;
}
は私が間違っている可能性が何をしただろうか?あなたのIs_Num
質問には関係ありませんが、なぜ['isdigit'](http://en.cppreference.com/w/c/string/byte/isdigit)を再発明していますか? –
私はコード内のすべてのヘルプ機能を記述する必要があります。私は準備関数を使用することはできません。 –