2015-12-01 44 views
0

我需要編寫一個程序,它以表單[num1 num2; num 3 num4 etc],它與指針傳遞給一個創建的表(另一個函數對行和列進行計數並創建適當的數組),然後將其轉換爲數組。我不知道爲什麼,將char轉換爲int的部分會產生瘋狂的數字。即對於輸入[1 3],它返回1作爲第一個位置和超過20000第二個。將char []轉換爲數組的函數沒有返回正確的值

void string_to_table(int **matrix,char text[]) 
{ 
    printf("start"); 
    int len=strlen(text); 
    int out=0; 
    int column=0; 
    int row=0; 
    int pos=1; 
    int j=1; 
    while(j<(len-1)) 
    { 
     if(text[j]=='-') 
      pos=-1; 
     else if(text[j]>='0'&&text[j]<='9') 
     { 
      out=out+pos*(text[j]-48); 
     } 
     else if(text[j]==' ') 
     { 
      matrix[column][row]=out; 
      out=0; 
      pos=1; 
      ++row; 
     } 
     else if(text[j]==';') 
     { 
      matrix[column][row]=out; 
      out=0; 
      pos=1; 
      ++column; 
      row=0; 
     } 
     else if(text[j]=='}') 
      break; 
     ++j; 
    } 
} 

*編輯打印我用

void print_da_matrix(int **matrix, int i, int j) 
{ 
    int k=0,l=0; 
    printf("["); 
    while(k<i) 
    { 
     while(l<j) 
     { 
      printf("%i",matrix[k][l]); 
      printf(" "); 
      ++l; 
     } 
     if(k<(i-1)) 
      printf(";"); 
     l=0; 

      ++k; 
    } 
    printf("]"); 
} 

其中i和j列和行數。

+0

爲什麼你認爲第二個元素超過20000?你打印出數組的內容了嗎?如果是這樣,請顯示那些代碼行。 –

回答

0
out=out+pos*(text[j]-48); 

應該

out = out*10 + pos*(text[j]-'0'); 

你也需要做一些事情的空間不遵循一個數字,像後的一個「;」

+0

儘管如此,第二個數字還是瘋了。它給出了一些randow大數字 – user3426015

+0

第二個數字之後是否有空格?您的代碼忽略']' – stark

+0

否。當它到達位置len-1,即']'結束時 – user3426015