Несколько вещей, я предоставил реализацию с комментариями ...
Включите ctype.h
, чтобы использовать toupper (3) и разрешить ввод как в верхнем, так и в нижнем регистре.Вы можете использовать либо сравнение символов, либо сравнение строк, которое я дал вам обоим, выберите одно.
#include "Gender.h"
#include <stdio.h>
//you should really define these in your Gender.h file...
#define MALE "M"
#define FEMALE "F"
//you should really define these in your Gender.h file...
static const char* GenderAllowed = MALE" for Male and "FEMALE" for Female";
static const char* GenderPrompt = "Enter Student Gender";
//compare as string[1] - keep either this
#include <string.h>
int sexValidc( char* sex ) {
return ( (0==strncmp(sex,MALE,1)) || (0==strncmp(sex,FEMALE,1)) );
}
//compare only first character - or keep this
#include <ctype.h>
int sexValids( char* sex ) {
char sexch = toupper(*sex); //fold first character to upper case
return ( (*MALE==sexch) || (*FEMALE==sexch) );
}
char Gender() {
char sex[69+1]; //since you wanted to use %s, need a buffer, your &char allows stack overflow & wild memory pointer-ing
printf("\n%s (%s):\n",GenderPrompt,GenderAllowed); //DRY - Dont Repeat Yourself...
int done = 0;
while( !done ) {
scanf(" %69s",sex); //avoid stackoverflow :-)
if( !sexValidc( sex ) ) {
//printf("blech, entered: %s\n",sex); //debugging, remove when comfortable
printf("\n FALSE gender .. %s %s:\n",GenderPrompt,GenderAllowed);
}
else { //valid
done = 1;
}
}
printf("\nStudent Sex :%c\n", *sex);
return *sex; //once you enter valid value, return it...
}
int main() {
Gender();
}
Также прочитайте это об автоматическом распределении буферного пространства, разница между% ms и% s scanf