【问题标题】:Why does my code shows blank space after running? [duplicate]为什么我的代码运行后显示空白? [复制]
【发布时间】:2019-12-29 20:21:55
【问题描述】:

我是 C 的初学者并开始自学。 我这里的代码基本上是试图计算一个工人的每周工资 我必须输入否。每周来自用户的小时数。 这是我正在解决的问题

在这个挑战中,你将创建一个 C 程序来计算你 周薪。

程序应要求用户结束在 一周通过键盘

程序应在输出中显示总工资、税金和 净工资。

应做出以下假设:

  • 基本工资率 = 12.00 美元/小时
  • 加班(超过 40 小时)= 时间半
  • 税率:

    • 前 300 美元的 15%
    • 接下来 150 美元的 20%
    • 其余的 25%

当我运行代码时,它要求我输入否。进入后只显示空白的小时数 我知道它很长很简单,但我仍然面临问题

帮助非常感谢


#include <stdio.h>

int main(void)
{
    float hrs=0;
    float grossPay,taxes,netPay;
    float bpr=12.00;
    printf("The number of hours worked in a week: ");
    scanf("%f\n",&hrs);
    if (hrs<=40)
        grossPay=(hrs*bpr);
        printf("Gross Pay:%f\n",grossPay);
        if (grossPay<=300)
            taxes=0.15*grossPay;
            netPay=grossPay-taxes;
            printf("Total taxes:%f\n",taxes);
            printf("Net Pay:%f\n",netPay);
        if (grossPay>300 && grossPay<=450)
            taxes=0.15*300+0.20*(grossPay-300);
            netPay=grossPay-taxes;
            printf("Total taxes:%f\n",taxes);
            printf("Net Pay:%f\n",netPay);
        if (grossPay>450)
            taxes=0.15*300+0.20*150+0.25*(grossPay-450);
            netPay=grossPay-taxes;
            printf("Total taxes:%f\n",taxes);
            printf("Net Pay:%f\n",netPay);
    if (hrs>40)
        grossPay=40*bpr+18.00*(hrs-40);
        printf("Gross Pay:%f\n",grossPay);
        if (grossPay<=300)
            taxes=0.15*grossPay;
            netPay=grossPay-taxes;
            printf("Total taxes:%f\n",taxes);
            printf("Net Pay:%f\n",netPay);
        if (grossPay>300 && grossPay<=450)
            taxes=0.15*300+0.20*(grossPay-300);
            netPay=grossPay-taxes;
            printf("Total taxes:%f\n",taxes);
            printf("Net Pay:%f\n",netPay);
        if (grossPay>450)
            taxes=0.15*300+0.20*150+0.25*(grossPay-450);
            netPay=grossPay-taxes;
            printf("Total taxes:%f\n",taxes);
            printf("Net Pay:%f\n",netPay);


   return 0;
}

我为相同的代码做了一个替代代码。哪个更有效?:

#include <stdio.h>

#define PAYRATE 12.00
#define TAXRATE_300 .15
#define TAXRATE_150 .20
#define TAXRATE_REST .25
#define OVERTIME 40

int main()
{

   int hrs = 0;
   double grossPay = 0.0;
   double taxes = 0.0;
   double netPay = 0.0;

   printf("The number of hrs worked this week: ");

   scanf("%d", &hrs);


   if (hrs <= 40)
       grossPay = hrs * PAYRATE;
   else
   {
     grossPay = 40 * PAYRATE;
     double overTimePay = (hrs - 40) * (PAYRATE * 1.5);
     grossPay += overTimePay;
   }


   if (grossPay <= 300)
   {
       taxes = grossPay * TAXRATE_300;
   }
   else if(grossPay > 300 && grossPay <= 450)
   {
       taxes = 300 * TAXRATE_300;
       taxes += (grossPay - 300) * TAXRATE_150;
   }
   else if (grossPay > 450)
   {
       taxes = 300 * TAXRATE_300;
       taxes += 150 * TAXRATE_150;
       taxes += (grossPay - 450) * TAXRATE_REST;
   }


   netPay = grossPay - taxes;


   printf("Your gross pay this week is: %.2f\n", grossPay);
   printf("Your taxes this week is: %.2f\n", taxes);
   printf("Your net pay this week is: %.2f\n", netPay);

   return 0;
}

【问题讨论】:

  • 这能回答你的问题吗? using scanf("%d ") with a space after the %d
  • 这不是 Python。 if 语句周围需要花括号({})。
  • 我还建议稍微重构一下您的代码;也许只是计算grossPay 等。 if 语句中的变量,那么函数末尾只有 3 个 printf 调用。
  • 你的格式也很糟糕。您应该在大多数运算符(+-/* [但在取消引用指针时]、%op= 等效项)之前和之后放置空格。
  • 我还要在逗号后面加空格。

标签: c


【解决方案1】:

这是因为您在对scanf 的调用结束时有\n——这要求它读取空格,直到空白块结束(即非空白字符)。只需删除\n

另外请注意,您的 if 语句代码周围缺少大括号({})。

【讨论】:

    【解决方案2】:

    问题出在这一行:

    scanf("%f\n",&hrs);
    

    相反,它应该是:

    scanf("%f",&hrs);
    

    修复了代码,还添加了缺少的花括号:

    #include <stdio.h>
    
    int main(void)
    {
        float hrs=0;
        float grossPay,taxes,netPay;
        float bpr=12.00;
        printf("The number of hours worked in a week: ");
        scanf("%f",&hrs);
        if (hrs<=40) {
            grossPay=(hrs*bpr);
            printf("Gross Pay:%f\n",grossPay);
            if (grossPay<=300) {
                taxes=0.15*grossPay;
                netPay=grossPay-taxes;
                printf("Total taxes:%f\n",taxes);
                printf("Net Pay:%f\n",netPay);
            }
            if (grossPay>300 && grossPay<=450) {
                taxes=0.15*300+0.20*(grossPay-300);
                netPay=grossPay-taxes;
                printf("Total taxes:%f\n",taxes);
                printf("Net Pay:%f\n",netPay);
            }
            if (grossPay>450) {
                taxes=0.15*300+0.20*150+0.25*(grossPay-450);
                netPay=grossPay-taxes;
                printf("Total taxes:%f\n",taxes);
                printf("Net Pay:%f\n",netPay);
            }
        }
        if (hrs>40) {
            grossPay=40*bpr+18.00*(hrs-40);
            printf("Gross Pay:%f\n",grossPay);
            if (grossPay<=300) {
                taxes=0.15*grossPay;
                netPay=grossPay-taxes;
                printf("Total taxes:%f\n",taxes);
                printf("Net Pay:%f\n",netPay);
            }
            if (grossPay>300 && grossPay<=450) {
                taxes=0.15*300+0.20*(grossPay-300);
                netPay=grossPay-taxes;
                printf("Total taxes:%f\n",taxes);
                printf("Net Pay:%f\n",netPay);
            }
            if (grossPay>450) {
                taxes=0.15*300+0.20*150+0.25*(grossPay-450);
                netPay=grossPay-taxes;
                printf("Total taxes:%f\n",taxes);
                printf("Net Pay:%f\n",netPay);
            }
       }
    
       return 0;
    }
    

    【讨论】:

    • 这不是完全固定的代码。
    • 对不起,我现在习惯使用 python,所以实际上我错过了大括号的问题。