首页 > 解决方案 > 如何在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

解决方案


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 字符串等方面遇到困难是很常见的。我知道这会很无聊,但仔细阅读像dummiesTutorialspoint这样的参考资料确实会有所帮助。在我看来,它们很容易理解,是开始学习的好地方。


推荐阅读