2015-05-02 235 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語句

return z;