0

配列に新しいchar値を与えることに問題があります。nが12の場合でも、なぜ記号「<」が表示されるのかわかりません。この場合、プログラムは式int char* tab = "93+"を1つの値に変更する必要があります12

    char* tab = "93+";
    int b = sizeof (tab);
    char* tmp = new char[b] ;
    tmp [b-1] = '\0';


if(isdigit(tab[i]) && isdigit(tab[i+1]) ){
               int n;             
               if(tab[i+2]=='+' || tab[i+2]=='-' || tab[i+2]=='*'){

                  switch(tab[i+2]){
                    case '+':   
                    n = (tab[i]-'0') + (tab[i+1]-'0');

                    break;

                    case '-':
                    n = (tab[i]-'0') - (tab[i+1]-'0');
                    break;

                    case '*':
                    n = (tab[i]-'0') * (tab[i+1]-'0');
                    break;
                  }
                  tmp[i] = n+'0'; // I should have 12 but I get <
               }

               else if (tab[i+2]!='+' || tab[i+2]!='-' || tab[i+2]!='*'){
                     goto LAB;
               }
}
4

2 に答える 2

1

問題は次の行にあります。

tmp[i] = n+'0'; // I should have 12 but I get <

nは12ですが、「12」は文字ではないため、12 + '0'!='12'です。tmp [i]に、ASCII値が「0」(「<」)よりも12大きい文字を入れています。
tmpをintとして宣言(および処理)する方が、目的に適していると思います。

また、これsizeof (tab)はと同じでsizeof (char *)あり、ではないことに注意してください。したがって、 (32ビットマシンでは)sizeof ("93+")常に取得する可能性があります。b==4

于 2012-04-17T18:18:39.010 に答える
0

あなたは確かに'<'を取得する必要があります。理由は次のとおりtmpです。はcharの配列です。nを12と計算しました。これは正しいです。次に、48である「0」を追加しました。48+ 12 = 60。したがって、60をtmp[i]に格納します。ASCII60は'<'です。

int tmp'0'を追加せずに、を使用すると、tmp[i]で12を取得できます。

于 2012-04-17T18:21:47.000 に答える