Jesp 发表于 2020-3-17 09:20

c语言for循环,薪资计算

本帖最后由 Jesp 于 2020-3-18 12:00 编辑

                                                            新手学习c语言,自制一个小工具——薪资计算器

定义了存储器(int sanm;//用户输入的数字,用作用户输入了数字几,然后当作有几个月的提成)
还有一个月固定的收入(double yiyue;//一月)
提成(double ticheng;)

上次调试前double的都是float,结尾保留数字用了%0.2f。
现在就是我需要输入几个月的提成,然后for循环那边老出错,比如我输入要统计6个月的提成,他就只显示几个月,然后直接跳出循环了。后来我加上了一个判断的,但还是不行


                                                                                                                                                               



#include<stdio.h>
#include<stdlib.h>

int main(void) {
      int sanm;      //用户输入的数字
      double yiyue;//一月
      double ticheng;
      ticheng = 0;

      //开始计算

      printf("\n\n\t\t\t\t\t您的月薪是:"
      );
      scanf_s("\n\n%lf", &yiyue
      );
      printf("\n\t\t\t\t\t你要统计几个月的薪资(按月统计)"
      );
      scanf_s("\n\n%d", &sanm
      );

      printf("\n\t\t\t\t\t您的这"
      );
      printf("%d", sanm
      );
      printf("个月提成分别是:"
      );
      for (int i = 1; sanm >= i; i++) {
                double p;
                scanf_s("\n\t\t\t\t\t%lf\n", &p);
                ticheng = ticheng + p;
                if (i = sanm)
                {
                        break;
                }
      }


      printf("\n\n\n\n\t\t\t\t\t您这"
      );
      printf("%d", sanm
      );
      printf("个月的薪资是:%.2g$", yiyue * sanm + ticheng
      );


      printf("\n\n\t\t\t\t\t您的年薪是:%.2g$(不算提成)", yiyue * 12
      );


      printf("\a\n\n\t\t\t\t\t您"
      );
      printf("%d", sanm
      );
      printf("个月总计:%.2g$\n\n\n\n\n", yiyue * sanm + ticheng
      );

      //计算结束!!!!

      return 0;

}



                                                                               经过模仿大佬的步伐后:

#include<stdio.h>
#include<stdlib.h>

int main(void) {
    int sanm;      //用户输入的数字
    float yiyue;//一月
    float ticheng;
    ticheng = 0.0;

    //开始计算

    printf("\n\n\t\t\t\t\t您的月薪是:");
    scanf_s("%f", &yiyue);
    printf("\n\t\t\t\t\t你要统计几个月的薪资(按月统计)");
    scanf_s("%d", &sanm);

    printf("\n\t\t\t\t\t您的这");
    printf("%d", sanm);
    printf("个月提成分别是:");

    for (int i = 1; i <= sanm; i++)
    {
      float p;
      printf("\n\t\t\t\t\t请输入第%d个月的提成:", i);
      scanf_s("%f", &p);
      printf("\n\t\t\t\t\t你输入了第%d个月的提成:%.2f\n", i, p);
      printf("\t\t\t\t\t");
      ticheng = ticheng + p;

    }

    printf("\n\t\t\t\t\t您这");
    printf("%d", sanm);
    printf("个月的薪资是:%.2f$", yiyue * sanm + ticheng);


    printf("\n\t\t\t\t\t您的年薪是:%.2f$(不算提成)", yiyue * 12);


    printf("\a\n\t\t\t\t\t您");
    printf("%d", sanm);
    printf("个月总计:%.2f$\n\n\n", yiyue * sanm + ticheng);

    //计算结束!!!!
    system("Pause");
    return 0;

}

luanshils 发表于 2020-3-17 09:39

本帖最后由 luanshils 于 2020-3-17 09:58 编辑

我记得等于是双等吧?
你这:if (i = sanm)
是不是有问题。。。

单个等号是复制,双个等号是判断

乌巢禅师 发表于 2020-3-17 09:42

scanf是格式输入,你别加那么多换行

乌巢禅师 发表于 2020-3-17 09:57

#include<stdio.h>
#include<stdlib.h>

int main(void) {
        int sanm;      //用户输入的数字
        double yiyue;//一月
        double ticheng;
        ticheng = 0.0;

        //开始计算

        printf("\n\n\t\t\t\t\t您的月薪是:");
        scanf_s("%lf", &yiyue);
        printf("\n\t\t\t\t\t你要统计几个月的薪资(按月统计)");
        scanf_s("%d", &sanm);

        printf("\n\t\t\t\t\t您的这");
        printf("%d", sanm);
        printf("个月提成分别是:");

        for (int i = 1; i<=sanm; i++)
        {
                double p;
                printf("\n\t\t\t\t\t请输入第%d个月的提成:",i);
                scanf_s("%lf", &p);
                printf("\n\t\t\t\t\t你输入了第%d个月的提成:%lf\n",i,p);
                printf("\t\t\t\t\t");
                ticheng = ticheng + p;

        }

        printf("\n\t\t\t\t\t您这");
        printf("%d", sanm);
        printf("个月的薪资是:%.2g$", yiyue * sanm + ticheng);


        printf("\n\t\t\t\t\t您的年薪是:%.2g$(不算提成)", yiyue * 12);


        printf("\a\n\t\t\t\t\t您");
        printf("%d", sanm);
        printf("个月总计:%.2g$\n", yiyue * sanm + ticheng);

        //计算结束!!!!
        system("Pause");
        return 0;

}

挑灯看花 发表于 2020-3-17 10:01

这问题用EXCEL更好吧{:301_1001:}

cjhk 发表于 2020-3-17 10:17

涉及到小数求值尽量用int和除法实现
另外 if (i == sanm)
                {
                        break;
                }
你再试一下   尽量不要用double类型的   浮点型永远是近似等于而且会出现小数位丢弃问题

scy_修文 发表于 2020-3-17 10:22

这也能水一贴?

曦阳520 发表于 2020-3-17 10:33

for循环条件错了应该是for (int i = 1; sanm <= i; i++)

然并卵zh 发表于 2020-3-17 11:06

。。。还需要好好看看书,for循环条件、if判断条件都错了

Jesp 发表于 2020-3-18 11:53

乌巢禅师 发表于 2020-3-17 09:57
#include
#include



非常感谢,学习了{:301_997:}
页: [1] 2
查看完整版本: c语言for循环,薪资计算