0

我在为数组提供新的 char 值时遇到问题。我不知道为什么即使 n 是 12 也会得到符号“<”?在这种情况下,我的程序应该将表达式更改int char* tab = "93+"为一个值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 + '0' != '12',因为 '12' 不是字符。您将 tmp[i] 的 char 值比 '0' 大 12,即 '<'。
我相信将 tmp 声明(和处理)为 int 会更好地满足您的目的。

另请注意,sizeof (tab)它与 相同sizeof (char *),而不是sizeof ("93+"),因此您很可能总是得到b==4(在 32 位机器中)。

于 2012-04-17T18:18:39.010 回答
0

你确实应该得到'<'。原因如下:tmp是一个字符数组。您计算出 n 为 12。这是正确的。然后您添加了“0”,即 48。48 + 12 = 60。因此您将 60 存储在 tmp[i] 中。ASCII 60 是“<”。

您可以使用int tmp,而不添加“0”,然后您将在 tmp[i] 中得到 12。

于 2012-04-17T18:21:47.000 回答