#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;
и это будет эквивалентно.