2017-07-16 48 views
-1

基本上這是一個數獨題,我們得到通過控制檯鴻溝的argv參數與陣列寫

每argv的參數包括9位運行程序(一個點可以代替缺失的數字)被寫入二維陣列是這樣的:

./sudoku "9...7...." "2...9..53" ".6..124.." "84...1.9." "5.....8.." ".31..4..." "..37..68." 
".9..5.741" "47......." 

和數組值必須是:

array[0][0] = 9, array[0][1] = 0, ..., array[8][0] = 4, ... 

主要片段:

int  main(int argc, char **argv) 
{ 
    int s_f[9][9]; 
    int i; 
    int j; 

i = 1; 
j = 0; 
if (argc != 10) 
    write(1, "Error\n", 6); 
else 
{ 

,並有去,我試圖使用代碼:

while (i < 10) 
    { 
     j = 0; 
     while(j < 9) 
     { 
      s_f[i - 1][j] = write(1, &(argv[i][j]), 1); 
      j++; 
     } 
     write(1, "\n", 1); 
     i++; 
    } 
    write(1, "\n", 1); 
} 

如果有零,而不是在爭論一個數字,它應該由零來代替。

有關如何讀取Argv參數並將其置於int的任何想法,因此找到解決方案將更容易?

P.S.唯一允許的功能是寫入,malloc免費

P.P.S. Atoi是允許的。

+0

如[此](https://wandbox.org/permlink/zgoAoEbEwLeC63oy)? – BLUEPIXY

回答

-1

所以該解決方案是

int  main(int argc, char **argv) 
{ 
    int s_f[9][9]; 
    int i; 
    int j; 

i = 1; 
j = 0; 
if (argc != 10) 
    write(1, "Error\n", 6); 
else 
{ 
    while (i < 10) 
    { 
     j = 0; 
     while(j < 9) 
     { 
      if (ft_strcmp(&argv[i][j], ".") == 0) 
       s_f[i - 1][j] = 0; 
      else 
       s_f[i - 1][j] = argv[i][j] - '0'; 
      j++; 
     } 
     i++; 
    } 
} 

i = 0; 
j = 0; 
while (i < 9) 
{ 
    while (j < 9) 
    { 
     if (s_f[i][j] == -2) 
      s_f[i][j] = 0; 
     j++; 
    } 
    i++; 
    j = 0; 
} 

i = 0; 
j = 0; 
while (i < 9) 
{ 
    while (j < 9) 
    { 
     if (j != 8) 
      printf("%d ", s_f[i][j]); 
     else 
      printf("%d", s_f[i][j]); 
     j++; 
    } 
    i++; 
    j = 0; 
    printf("\n"); 
} 
return (0); 
}