but at the end it loops like 2 or 4 times, displaying all the printf messages,
There are several ways to avoid that, one will be to add after scanf this:
while((check=getchar()) != EOF && check != '\n');
Any way a minimal code will look like this:
#include <stdio.h>
#include <stdlib.h>
int main(void){
char a;
int check,ok=0;
do {
printf("Give an A: ");
if ((scanf("%c",&a)) == 1){
while((check=getchar()) != EOF && check != '\n');
if ((a == 'a') || (a == 'A')){
printf("True\n");
ok=0;
} else {
printf("False\n");
ok = 1;
}
}else{
printf("Error");
exit(1);
}
}while (ok == 1);
return 0;
}
But the way how you approach this , a fix will probably look like this:
#include <stdio.h>
#include <stdlib.h>
int main(void){
char userresponse;
int check,ok=0;
char x;
do {
printf("are you human: ");
if ((scanf("%c",&userresponse)) == 1){
while((check=getchar()) != EOF && check != '\n');
if ((userresponse == 'y') || (userresponse == 'Y')){
printf("welcome\n");
break;
} else {
printf("please leave\n\n");
printf("type z to repeat");
if(scanf("%c",&x) == 1){
while((check=getchar()) != EOF && check != '\n');
if(x=='z' || x == 'Z'){
ok = 1;
}else{
printf("\n");
printf("Wrong Input\nGoodBye\n");
break;
}
}else{
break;
}
}
}else{
printf("Error");
exit(1);
}
}while (ok == 1);
return 0;
}
What I'm trying here to explain is that there is no reason to stick with a condition in that while like x=='z', just use another variable like in the above examples.
Just give it a try.
EDIT:
If you need to start form your code, than here is a quick fix:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char userresponse;
char x;
do {
printf("are you human");
if(scanf(" %c", &userresponse) ==1){
if (userresponse == 'y' || userresponse == 'Y') {
printf("welcome\n");
}
printf("type z to repeat\n");
if(scanf(" %c", &x) != 1){
printf("Error");
exit(1);
}
}else{
printf("Error");
exit(1);
}
} while (x == 'z' || x == 'Z');
return 0;
}
As you probably see, I try to avoid your problems.
1) I check scanf for errors
2) i put a space in front of %c to avoid '\n'.
3) I check for y and Y and for z and Z.