printf sees that "%y" and thinks that that's a format descriptor, but it just cannot figure out what a "%y" is supposed to be. Also, printf thinks that you have a mismatch between format descriptors and arguments: 4 descriptors to 3 arguments.

What has happened is that you inserted a percent sign into the string where it was supposed to be an actual percent sign, in this case representing the modulo operator. When you do that, you need to tell printf that it must not try to interpret that character, that you really do intend for that character to be there.

The general term I've learned for doing that is called escaping and in the UNIX/C world, that is done with the back-slash ( \ ). A string is defined by the open and close double quotation marks, but what do you do when there needs to be a double quotes insides of the string? Eg:"This string has an "embedded quote"."
would be misinterpreted and so you need to escape the quotes thus:"This string has an \"embedded quote\"."

Now that I have taught you how to fish, I can freely give you a fish and know that you will be fed tomorrow. You need to escape that percent sign thus (again in red):printf("yMatch = %u | xMatch= %u | xMatch\%yMatch= %u", yMatch, xMatch, xMatch%yMatch );