Próbuję utworzyć funkcję, która po przekazaniu tablicy sprawdza ją w stosunku do tablicy prawidłowych znaków i zwraca true, jeśli są one ważne lub fałszywe, jeśli tylko jeden z nich nie jest.

Jednak moje drugie twierdzenie zawodzi, mimo że jest nieważny obecny znak.

void test (void)
{   
   char testArr1[MAXGRIDHW][MAXGRIDHW] = {{"..."},
                                          {"..."},
                                          {"..."}};

   char testArr2[MAXGRIDHW][MAXGRIDHW] = {{"..z"},
                                          {"..."},
                                          {"..."}};

   assert(noInvalidLetters(testArr1) == true);
   assert(noInvalidLetters(testArr2) == false);

}

bool noInvalidLetters (char b[][MAXGRIDHW])
{
   int i, j;
   bool valid;
   const char validChars[MAXVALIDCHARS] = {'k', 'K', 'r', 'R', 'g', 'G', 'y',
                                           'Y', 'b', 'B', 'm', 'M', 'c', 'C',
                                           'w', 'W', '.'};

   for (i = 0; i < MAXGRIDHW; i++) {
      for (j = 0; j < MAXGRIDHW; j++) {
         if (strchr(validChars, b[i][j])){
            valid = true;
         } else {
            valid = false;
         }
      }
   }
   return valid;
}
0
Davospike 21 listopad 2020, 21:24

1 odpowiedź

Najlepsza odpowiedź

Jeśli znajdziesz prawidłowy znak, valid nie powinien być ustawiony z powrotem do true. Następnie nieprawidłowy znak, a następnie prawidłowy charakter byłby "ważny". W rzeczywistości nie musisz mieć logicznego. Możesz wrócić wcześnie:

bool noInvalidLetters (char b[][MAXGRIDHW])
{
   int i, j;
   const char validChars[MAXVALIDCHARS] = {'k', 'K', 'r', 'R', 'g', 'G', 'y',
                                           'Y', 'b', 'B', 'm', 'M', 'c', 'C',
                                           'w', 'W', '.'};

   for (i = 0; i < MAXGRIDHW; i++) {
      for (j = 0; j < MAXGRIDHW; j++) {
         if (!strchr(validChars, b[i][j])){
            // invalid char so just say it's invalid
            return false;
         }
      }
   }
   // found no invalid chars so must be all valid
   return true;
}
1
Aplet123 21 listopad 2020, 18:27