将字符输入带入C程序的问题

时间:2014-11-28 13:35:32

标签: c function scanf eof abort

我正在尝试运行一个程序,当用户输入MFN时,会检查用户的一个输入字符。它将检查并比较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: 

3 个答案:

答案 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)

请检查以下代码。我认为,它解决了你的目的,减去了复杂性。

注意:

  1. EOF是通过按 CTRL + D

  2. 来实现的
  3. 此代码不区分大小写[Mm表示同样的事情。“

  4. 代码:

    #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;
    }