首页 > 解决方案 > 在结构数组中,为什么 strcmp 函数不适用于字符串?

问题描述

我希望用户为男性输入“M”或为女性输入“F”,并且必须将单个字符替换为男性或女性,但这里的 strcmp 函数每次显示“请输入正确的性别值!! ”。

#include<stdio.h>
#include<string.h>

struct student{
    char name[50];
    int Roll_No;
    char Gender[10];
};

int main()
{
    int size;
    printf("Enter the size for number of students you want to store:");
    scanf("%d",&size);
    struct student s[size];
    int i;
    for(i=0;i<size;i++)
    {
        printf("Enter the name of student s[%d]:",i);
        fflush(stdin);
        fgets(s[i].name,50,stdin);
        printf("Enter the Roll Number of student s[%d]:",i);
        scanf("%d",&s[i].Roll_No);
        gen:printf("Enter your Gender(M-Male F-Female) for student s[%d]:",i);
        fflush(stdin);
        fgets(s[i].Gender,10,stdin);
    
        if(strcmp(s[i].Gender,"M")==0)
        {
            strcpy(s[i].Gender,"Male");
        }
        if(strcmp(s[i].Gender,"F")==0)
        {
            strcpy(s[i].Gender,"Female");
        }
        else
        {
            printf("Please enter correct value for Gender!!\n");
            goto gen;
        }
    }
    printf("\nInformation entered of Students:\n");
    for(i=0;i<size;i++)
    {
        printf("Name of student s[%d]:%s",i,s[i].name);
        printf("Roll Number of student s[%d]:%d\n",i,s[i].Roll_No);
        printf("Gender of student s[%d]:%s\n",i,s[i].Gender);
        
    }
    return 0;
}

标签: ccomparisonc-stringsfgetsstrcmp

解决方案


该函数可以将输入的字符串附加到您应该删除fgets的换行符。'\n'

例如

    fgets(s[i].Gender,10,stdin);
    s[i].Gender[ strcspn( s[i].Gender, "\n" ) ] = '\0';

    if(strcmp(s[i].Gender,"M")==0)
    {
        strcpy(s[i].Gender,"Male");
    }
    if(strcmp(s[i].Gender,"F")==0)
    {
        strcpy(s[i].Gender,"Female");
    }
    else
    {
        printf("Please enter correct value for Gender!!\n");
        goto gen;
    }

请注意,goto您可以将代码包含在 do-while 语句中,而不是使用语句。

此外,要输入一个字母,使用该功能也没有多大意义,fgets而且当输入的字符串将被覆盖时。

您可以使用 char 类型的对象并使用这样的scanf调用

char gender;

scanf( " %c", &gender );

接着

if ( toupper( ( unsigned char )gender ) == 'M' )
{
    strcpy(s[i].Gender,"Male");
}
//...

推荐阅读