Search code examples
cbreak

Break and Continue (C)


"Simon Says" is a memory game where "Simon" outputs a sequence of 10 characters (R, G, B, Y) and the user must repeat the sequence. Create a for loop that compares the two strings starting from index 0. For each match, add one point to userScore. Upon a mismatch, exit the loop using a break statement.

Ex: The following patterns yield a userScore of 4:

simonPattern: R, R, G, B, R, Y, Y, B, G, Y

userPattern: R, R, G, B, B, R, Y, B, G, Y

#include <stdio.h>
#include <string.h>

int main(void) {
   char simonPattern[50] = "";
   char userPattern[50] = "";
   int userScore = 0;
   int i = 0;

   userScore = 0;
   strcpy(simonPattern, "RRGBRYYBGY");
   strcpy(userPattern, "RRGBBRYBGY");

   while (userPattern[i] = simonPattern[i]) {
      userScore = userScore + 1;
      ++i;
      if (userPattern[i] != simonPattern[i]) {
         break;
      }
   }

   printf("userScore: %d\n", userScore);

   return 0;
}

I tried running the code, but I got this

https://i.sstatic.net/QPfwB.png

Does anyone know what's causing the extra 1?

Thanks.


Solution

  • Change the condition in your while loop to use == not =. Right now you are making an assignment and not comparing the two meaning the first chars will always be the same and give a score of 1. You can then remove the if statement from inside the loop.

    The assignment asks you to use a for loop and not a while. If you just move I into the for loop and fill out the rest, along with moving the increment to after the != check it would work.