Неправильное использование функции

#c #function

#c #функция

Вопрос:

Я пытаюсь получить тот же результат, выполнив тест непосредственно в программе (тест 1) и вызвав функцию, которая выполняет то же самое (тест 2).

Предполагается, что тест проверяет, есть ли 2 одинаковых числа в строке или столбце сетки судоку.

Тест 1 выполняется в программе и работает так, как ожидалось.

Для теста 2 я хочу вместо этого вызвать функцию. Программа запускается, но неправильная сетка остается необнаруженной.

Допустимая сетка справедливо считается допустимой и печатается.

Я неправильно использую функцию?

 

int check(char s[10][10]);

main()

{  
  char s[10][10]; /*solution for current tile*/  
  int rw; /*number deciding if solution check is right or wrong*/  
  int i, j, k, l;


  /*proper grid building*/  
  printf("Enter a proper 4x4 sudoku grid.nType . for empty square.nType return for new line.n");
  
  for(i=1; i<=4;   i)  
    for(j=1; j<=5;   j)  
      {  
    scanf("%c", amp;s[i][j]);  
    if(s[i][j] == '.' || j == 5 amp;amp; s[i][j] == 'n' || j < 5 amp;amp; s[i][j] != 'n' amp;amp; s[i][j] >= 49 amp;amp; s[i][j] <= 52)  
      ;  
    else
      {  
        printf("Instructions not followed.n");  
        exit(0);  
      }  
      }

                 
  /*Test 1*/    
  for(i=1; i<=4;   i)  
    for(j=1; j<=4;   j)  
      for(k=1; k<=4;   k)  
    {  
      if(k != j amp;amp; s[i][k] == s[i][j] amp;amp; s[i][k] != '.' || k != i amp;amp; s[k][j] == s[i][j] amp;amp; s[k][j] != '.')  
        {  
          printf("Improper grid.n");  
          exit(0);  
        }  
        }  

  /*Test 2*/  
   if((rw = check (s)) < 1)  
    {  
      printf("Improper grid.n");  
      exit(0);  
    }  

  printf("n");
  for(i=1; i<=4;   i)
    for(j=1; j<=5;   j)
      printf("%c", s[i][j]);

}  



int check(char a[10][10])  

{  
  int i, j, k, l;  
  int r; /*checks result/*  

    /*check doubles on lines and columns*/  
  for(i=1; i<=4;   i)  
    for(j=1; j<=4;   j)  
      for(k=1; k<=4;   k)  
    {  
      if(k != j amp;amp; a[i][k] == a[i][j] amp;amp; a[i][k] != '.' || k != i amp;amp; a[k][j] == a[i][j] amp;amp; a[k][j] != '.')  
        r = 0;  
      else  
        r = 1;  
        }  
  return r;  

}

  

Комментарии:

1. Пожалуйста, сделайте правильный отступ в вашем коде

2. Я сделал все возможное. Самая первая программа, извините. В следующий раз будет лучше.

Ответ №1:

Ваш первый код немедленно выдает ошибку, когда обнаруживает проблему. Ваша функция продолжается и устанавливается r в ноль или единицу, проходя через все это, и возвращается только последнее значение.

Если вы хотите идентичную функциональность, замените r = 0; на return 0; и на return r; , return 1; и это будет эквивалентно.