-4

私はこのコードを持っています: Link in the comments, could put here sum 関数を作ろうとしています。

関数プロトタイプ:

int calc(char vetor[]){

私はこのようなことをしています:

int result = calc(out);

私の計算関数では、配列からキャッチされた int を返します。これは私の機能です:

    for(i=0;i<strlen(vetor);i++){
   if(vetor[i] == '+'){
        aux = i-1;
        //reads what is behind +
        while((vetor[aux] >= '0') && (vetor[aux] <= '9')){
            auxSum1 += atoi(&vetor[aux]);
            aux--;
        }
        //Aux = i+1 to read the next +
        aux = i+1;

        while((vetor[aux] >= '0') && (vetor[aux] <= '9')){
            //reads what is in front of +

            auxSoma2 += atoi(&vetor[aux]); 
          aux++;
        }

        //return result sum
        resSoma = auxSoma2 + auxSoma1;

    }
return resSoma+resSub;

私はこれを - と + に持っています。最後に、すべての操作の結果を返します。- 存在しない場合、合計 +0。

このように、セルを処理する出力配列があります。

1   2   3   4
1   1+2 3   4

セルからすべての値を処理します。

結果に計算を返した後、結果を配列にしようとします。

int result = calcular(out);
sprintf(out, "%d", result);

しかし、この例のようにすべてのものを印刷すると、次のようになります。

0   0   0   0   
0   3   0   0   

私は何を間違っていますか?文字列がある場合(たとえばテスト)は0と表示されます。

なにが問題ですか?ありがとう

4

1 に答える 1

2

ここ:

if(vetor[i] == '+')

+記号が見つからない場合、関数は何もしません。そのため、出力でその 3 を取得しているだけです。の 1 と 21+2を合計しますが、他のすべての数字には符号がないため、何もしません+

最初に数字を探しstrtol()、次の文字へのポインターを取得するために使用する必要があります。次に、そうでない場合NULLはプラス記号を探し、見つかった場合は次の番号を取得して追加します。そうでない場合は、最初に見つけた数字を返します。

それ以外は、関数の一部しか投稿していないため、残りが何をしているのかわかりません。最後に中かっこがありません。また、resSomaまたはを定義する場所がわからないため、最終ステートメントがresSub何を行っているかを判断することは不可能です。return

于 2013-06-25T22:47:13.133 に答える