C语言如何验证字符串与double类型?员工奖金计算代码运行错误求助
C语言奖金计算代码问题修正
以下是你的代码存在的问题及修正方案:
- 字符串比较逻辑错误:C语言中不能直接用
==比较两个字符串的内容,gender == 'male'写法实际是在比较字符数组首地址和字符常量地址,判断结果永远为假,因此所有分支都不会执行,未初始化的bonusSalary会输出随机值(你遇到的输出0属于随机情况)。需要引入<string.h>头文件,使用strcmp()函数对比字符串,两个字符串相等时strcmp()返回值为0。 - 字符串语法错误:表示字符串需要使用双引号
"",单引号''仅能表示单个字符,'male'属于非法写法,应改为"male"、"female"。 - 输入语法错误:字符数组名本身就是首地址,使用
scanf输入字符串不需要加取地址符&,应改为scanf("%s", gender);。 - 奖金比例逻辑错误:女员工薪资低于10000卢比时,是10%基础奖金+2%额外奖励合计12%,原代码将低于和高于10000的比例写反。
- 缺少必要头文件:代码使用
printf、scanf函数,需要引入<stdio.h>头文件。
修正后的完整代码:
#include <stdio.h> #include <string.h> int main() { char gender[6]; double salary; double bonusSalary = 0.0; // 初始化避免未赋值警告 printf("enter your gender here:"); scanf("%s", gender); printf("enter your salary here:"); scanf("%lf", &salary); if(strcmp(gender, "male") == 0 && salary < 10000) { bonusSalary = salary * (7.0 / 100.0); } else if(strcmp(gender, "male") == 0) { bonusSalary = salary * (5.0 / 100.0); } else if(strcmp(gender, "female") == 0 && salary < 10000) { bonusSalary = salary * (12.0 / 100.0); } else if(strcmp(gender, "female") == 0) { bonusSalary = salary * (10.0 / 100.0); } printf("bonus amount you will receive is:%lf", bonusSalary); return 0; }
内容的提问来源于stack exchange,提问作者Nick Gz
相关产品推荐
相关产品推荐

