c - 在结构数组中,为什么 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;
}
解决方案
该函数可以将输入的字符串附加到您应该删除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");
}
//...
推荐阅读
- python - 未知错误:由于未知错误导致页面崩溃,会话被删除:无法从 ChromeDriver Selenium 崩溃的选项卡中确定加载状态
- java - BufferedReader & FileReader read() 性能 - 大文本文件
- angular - 如何仅从 fetch 表中为特定 id 扩展 mat-expansion-panel
- wordpress - 如何在我的网站 https://ekasya.com 上修复页脚高度?
- python - 在 python 上查找 Windows 和 Linux 的默认网关地址
- c# - Datatable 从数据库中计算字符串
- java - 我的 spring-boot 应用程序出现以下错误“org.thymeleaf.exceptions.TemplateInputException:”
- spring - 如果我在 Spring Boot 应用程序中未指定任何版本,将下载哪个版本的 gradle?
- string - 如何定义自定义字母顺序以在 go 中比较和排序字符串?
- php - 如何在 woocommerce 中覆盖父 style.css?Function.php文件问题