c - 如何在c中验证字符串和双精度
问题描述
我是一个月前开始的新编程。我正在为我的学校作业编写代码,但我无法在我编写的以下代码中验证性别和薪水。有人可以帮我解决这个问题。
以下是我的问题。Q3。一家公司决定在新年给所有员工发奖金。决定向所有男性员工发放 5% 的奖金,向女性员工发放 10% 的奖金。此外,如果员工的工资低于卢比。10,000,然后员工获得额外 2% 的工资奖金。编写一个 C 程序,输入员工的工资和性别,并计算必须给员工的奖金。
以下是我的代码。
int main()
{
char gender[6];
double salary;
double bonusSalary;
printf("enter your gender here:");
scanf("%s", &gender);
printf("enter your salary here:");
scanf("%lf", &salary);
if( gender == 'male' && salary<10000 )
{
bonusSalary=salary*(7.0/100.0);
}
else if( gender == 'male' )
{
bonusSalary=salary*(5.0/100.0);
}
else if( gender == 'female' && salary<10000 )
{
bonusSalary=salary*(10.0/100.0);
}
else if( gender == 'female' )
{
bonusSalary=salary*(12.0/100.0);
}
printf("bonus amount you will receive is:%f", bonusSalary);
return 0;
}
我编写的代码读取性别和薪水,但无论您键入什么,奖金都显示为零,它不会读取 if 和 else if 语句。
解决方案
C 使用字符串是一个数组char
(字节从 0 到 255,每个对应一个ASCII字符)。要比较两个字符串,您可以strcmp()
在<string.h>
库中使用。C 字符串以零结尾:这意味着在 N 字符之后有一个 0:
+-------+-----+-----+-----+-----+-----+-----+-----+
| index | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
+-------+-----+-----+-----+-----+-----+-----+-----+
| char | 'f' | 'e' | 'm' | 'a' | 'l' | 'e' | NUL |
+-------+-----+-----+-----+-----+-----+-----+-----+
请注意:最后的长度是 7 个字符,如果你考虑最后一个“ NUL
”,而不是 6 个!
顺便说一句,您使用的是错误的 if-else 逻辑。我建议像这样重写你的代码:
#include <stdio.h>
#include <string.h>
int main(){
char gender[7]; //zero-terminated C-string
double salary, bonusSalary;
printf("enter your gender here:");
scanf("%s", gender);
printf("enter your salary here:");
scanf("%lf", &salary);
if ( strcmp(gender,"male")==0 ) {
bonusSalary = salary<10000
? salary*(7.0/100.0);
: salary*(5.0/100.0);
} else if ( strcmp(gender,"female")==0 ) {
bonusSalary = salary<10000
? salary*(10.0/100.0);
: salary*(12.0/100.0);
}
printf("bonus amount you will receive is:%lf", bonusSalary);
return 0;
}
PS:初学者在使用指针、数组、C 字符串等方面遇到困难是很常见的。我知道这会很无聊,但仔细阅读像dummies或Tutorialspoint这样的参考资料确实会有所帮助。在我看来,它们很容易理解,是开始学习的好地方。
推荐阅读
- android - 我想用 EditText 设计一个 OTP 屏幕
- jekyll - Jekyll `site.posts` 在将自定义域与 Github 页面合并后显示为空
- python - Django Queryset 查找日期之间的数据
- android - 如何从活动类操作的活动中运行位置请求权限扩展了 ActivityGroup
- java - java 8中的单元测试黄瓜步骤
- html - html - 使用查询字符串进行缓存破坏会导致始终下载资源
- javascript - 在 Chrome 中打开指向文件的链接
- android-things - 如何在 Android Things 上显示 NavigationBar?
- c - 错误检查 y 或没有答案 (C)
- angular - 需要 Ionic 3 表单组的帮助,无法读取未定义的属性获取