Q:

C Loops Breaking Clause

this might be a stupid question but i'm having trouble wrapping my head around how this works. 
//Q8
//Variables
char String[100];
char Yes[] = "Y";
char No[] = "N";
//Coding
do {
    printf("Would you like an ice cream?  Y / N\n");
    scanf("%s", String);
} while(strcmp(String,Yes) && strcmp(String,No));

Now only one of these return 0, why does the loop break anyway even though it is an AND? 

A:

This
while(strcmp(String,Yes) && strcmp(String,No));

can be more clearly written as:
while(strcmp(String,Yes) ! = 0 && strcmp(String,No) ! = 0);

It is always better to write it that way, because strcmp does not return a boolean, it returns negative, 0 or positive depending if first string comparess less, equal or greater (as strings are compared) than the 2nd string. 
It works without that ! = 0 part, because in C zero is false and non-zero is true, so from syntactic point of view there is no difference, the condition is "while String is not Yes and String is not No".