2015-05-02 3 views
-5

Функции:Функция всегда возвращает 0

int num(char a[]) //将字符串型的数字转化成int 
{ 
    int z, x, y; 
    z = 0; 
    int m = sizeof(a); 

    if(m == 1) 
     z = a[0] - 48; 

    if(m == 2) 
    { 
     x = a[0] - 48; 
     y = a[1] - 48; 
     z = x * 10 + y; 
    } 

    if(m == 3) 
    { 
     x = a[0] - 48; 
     y = a[1] - 48; 
     z = a[2] - 48; 
     z = x * 100 + y * 10 + z; 
    } 

например: char a[3]={2,15};, но num(a) = 0.
Я не знаю почему.

+1

Я не могу обнаружить 'return' заявление вообще?? Также 'int m = sizeof (a);' вероятно, не делает того, что вы думаете, что он делает. –

+2

Нет возврата Нет значения, кроме значения по умолчанию int = 0 – MacKentoch

ответ

3

Параметр функции, объявленной как char a[], настроен на тип char *. Размер указателя не зависит от количества элементов, переданных массивом в качестве аргумента.

Действительная функция может выглядеть следующим образом

#include <cstring> 

//... 

int num(const char a[])//将字符串型的数字转化成int 
{ 
    int z,x,y; 

    size_t n = std::strlen(a); 

    z = 0; 

    if(n == 1) 
     z = a[0] - '0'; 

    if (n == 2) 
    { 
     x = a[0] - '0'; 
     y = a[1] - '0'; 
     z = x * 10 + y; 
    } 

    if (n == 3) 
    { 
     x = a[0] - '0'; 
     y = a[1] - '0'; 
     z = a[2] - '0'; 
     z = x * 100 + y * 10 + z; 
    } 
    //... 

Если вам нужно просто сформировать ряд из массива символов можно использовать стандартную функцию C atoi. Или вы могли бы написать цикл

z = 0; 

for (size_t i = 0; i < 3 && a[i]; i++) z = 10 * z + a[i] - '0'; 

Примите во внимание, что, если это все, что функция должна делать то должна включать оператор возврата

return z; 
Смежные вопросы