我正在尝试运行一个程序,当用户输入M
,F
或N
时,会检查用户的一个输入字符。它将检查并比较char字符。但是当我运行该程序时。它不起作用。我和朋友们一起尝试了许多方法,我们无法弄清楚这一点。该程序无法使用户输入有效数据。请帮忙。
typedef struct {
char onePatient.gender;
}PATIENT_T
PATIENT_T onePatient;
是已经在顶部声明的typedef
,对不起。
这是程序功能:
void checkGender(char pointerGender)
{
char gender;
char buffer[32];
char word_M = ('M'); /* Male */
char word_F = ('F'); /* Female */
char word_N = ('N'); /* None */
printf("\nEnter Gender: ");
fgets(buffer,sizeof(buffer),stdin);
//strcpy(&gender,buffer);
sscanf(buffer,"%c",&gender);
while((strcasecmp(&gender,&word_M) != 0)||(strcasecmp(&gender,&word_M) != 0)||(strcasecmp(&gender,&word_N) != 0))
{
printf("\nError: Invalidate Grade");
printf("\n(Please enter wheather M [for Male], F [for Female] or N [for None])");
printf("\nEnter gender: ");
fgets(buffer,sizeof(buffer),stdin);
//strcpy(&gender,buffer);
sscanf(buffer,"%c",&gender);
}
}
这是主要功能:
int main()
{
char pointerGender;
PATIENT_T onePatient;
checkGender(pointerGender);
strcpy(&onePatient.gender,&pointerGender);
printf("\n%s",&onePatient.gender);
}
终端秀:
192:iHeal Hospital iFluke$ gcc -o checkFormat_Fluke checkFormat_Fluke.c
192:iHeal Hospital iFluke$ ./checkFormat_Fluke
Enter Name: fluke
Enter Gender: M
Error: Invalidate Grade
(Please enter wheather M [for Male], F [for Female] or N [for None])
Enter gender: F
Error: Invalidate Grade
(Please enter wheather M [for Male], F [for Female] or N [for None])
Enter gender: N
Error: Invalidate Grade
(Please enter wheather M [for Male], F [for Female] or N [for None])
Enter gender:
答案 0 :(得分:0)
由于您的输入只是一个char,为什么要声明buffer [32]?
使用类似
的内容char input;
scanf("%c" &input);
答案 1 :(得分:0)
您无法使用strcasecmp
来比较字符。它并非完全错误,但单个字符不是正确终止的字符串。
如果您必须以这种方式进行比较,请使用strncasecmp
:
if(strncasecmp(&gender,&word_M, 1) == 0)
这将限制它比较一个角色。
此外,您的重试循环不会检查' F'但是检查' M'两次。
答案 2 :(得分:0)
请检查以下代码。我认为,它解决了你的目的,减去了复杂性。
注意:
EOF
是通过按 CTRL + D
此代码不区分大小写[M
,m
表示同样的事情。“
代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char userInput;
printf("Enter the Gender ( M [for Male], F [for Female] or N [for None] )\n");
while ( scanf (" %c", &userInput) != EOF )
{
switch (userInput)
{
case 'M':
case 'm':
printf("Male\n");
break;
case 'F':
case 'f':
printf("Female\n");
break;
case 'N':
case 'n':
printf("None\n");
break;
default:
printf("Wrong value !!!\n");
}
}
return 0;
}