C语言 程序验证问题

qvtsj1bj  于 2023-03-22  发布在  其他
关注(0)|答案(2)|浏览(145)

我的代码有问题,我一直在努力解决这个问题。问题是我试图验证我的代码,使它不计算负数。
税收计算器程序的目标是使用C编程来计算每个库德勒美食商店(德尔马、Encinitas和拉霍亚)的销售税
标准输入/输出处理

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

//Starting point    
int main ()
{   
//Variables defined
//st = sales tax, tax rated = tr, pa = total purchase amount, sa = purchase amoount
    
    float fstDelmar;
    float ftrDelmar;
    float fpaDelmar;
    float fstEncinitas;
    float ftrEncinitas;
    float fpaEncinitas;
    float fstLajolla;
    float ftrLajolla;
    float fpaLajolla;
    float fsaPurchaseAmount;
    int fStoreselect;
    
//Variable initializations for tax rates and purchase amount 
    ftrDelmar = .0725;
    ftrEncinitas = .075;
    ftrLajolla = .0775;
    fsaPurchaseAmount = 0;

    
//Header & Introduction
    printf("\n***********************************************************************");
    printf("\n*                         Kudler Fine Foods                           *");
    printf("\n*                       Sales Tax Calculator                          *");
    printf("\n*                           Version 3.0                               *");
    printf("\n***********************************************************************\n");
    
    
//Ask user to select store.

    printf ("\n                 STORE LOCATION \n");
    printf ("\n                 1) Del Mar \n");
    printf ("\n                 2) Encinitas \n");
    printf ("\n                 3) La Jolla \n");
    
    printf ("\n Please select the store location (1-3):  \n");
    scanf ("%d", &fStoreselect);    
    
//Validate store selection.
    while (fStoreselect < 1 || fStoreselect > 3) {
        fflush (fStoreselect);
        printf ("INVALID SELECTION! Please select a valid location (1-3): \n"); 
        scanf ("%d", &fStoreselect);
        }
//Ask user to enter in total purchase amount.
  
    printf ("\n What was your purchase amount? "); 
    scanf("$%f", &fsaPurchaseAmount); //user enters variable amount
    
    
//Validation to ensure that user's enter in purchase amounts using correct format.

    while (fsaPurchaseAmount <= 0.0) 
        {
        fflush(fsaPurchaseAmount);                                          
        printf("\n INVALID SELECTION! Please enter a valid purchase amount greater than zero.\n");
        printf("\n The purchase amount is: $ ");
        scanf("%f", &fsaPurchaseAmount);    
        }
    
//Calculation of sales tax in dollars for each of the store locations
    fstDelmar = fsaPurchaseAmount * ftrDelmar;
    fstEncinitas = fsaPurchaseAmount * ftrEncinitas;
    fstLajolla = fsaPurchaseAmount * ftrLajolla; 
    
//Calculation of total sales amount for each of the locations
    
    fpaDelmar = fsaPurchaseAmount + fstDelmar;
    fpaEncinitas = fsaPurchaseAmount + fstEncinitas;
    fpaLajolla = fsaPurchaseAmount + fstLajolla;
    
//Displaying sales amount for purchase for each of the different locations

    switch (fStoreselect) {
    
        case 1: 
    //for Delmar location
        printf("\n       Purchase Amount      Sales Tax     Total Sales Amount ");
        printf("\n       _______________      _________     _________________ ");
        printf("\n            $%.2f              $%.2f            $%.2f",fsaPurchaseAmount, fstDelmar, fpaDelmar);
        break;
    
        case 2:
    //for Encinitas location
        printf("\n       Purchase Amount      Sales Tax     Total Sales Amount ");
        printf("\n       _______________      _________     _________________ ");
            printf("\n            $%.2f              $%.2f            $%.2f",fsaPurchaseAmount, fstEncinitas, fpaEncinitas);
            break;
        
            case 3:
        //for La Jolla location
            printf("\n       Purchase Amount      Sales Tax     Total Sales Amount ");
        printf("\n       _______________      _________     _________________ ");
            printf("\n            $%.2f              $%.2f            $%.2f",fsaPurchaseAmount, fstLajolla, fpaLajolla);   
        break; 
        }
    
    printf("\n Hit the ENTER key to exit program\n");
//Pause the screen and wait for user to hit the ENTER key
    getchar();
    
//EOF      
}
nwnhqdif

nwnhqdif1#

这一行有bug:
scanf(“$%f”,&fsaPurchaseAmount);//用户输入可变金额
它应该是:
scanf(“%f”,&fsaPurchaseAmount);//用户输入可变金额

ergxz8rk

ergxz8rk2#

下面是对代码的一些观察:

  • 不要用浮点数来表示货币。这只会让你以后感到悲伤。理想的情况是,听取会计专业人士的建议。同时,用美分做算术,并在美元之间进行缩放以显示。
  • 像销售税这样的计算 * 可能 * 可以用浮点乘法正确地完成,但请确保您遵守四舍五入到整美分的公认做法。再次,向会计专业人士寻求建议。
  • fflush()并不像你想象的那样。对于一个打开写的文件描述符(比如stdout),它保证该描述符上的所有输出都已经完成。它被用在 * 在 * 打印一个提示符和 * 在 * 调用类似scanf()的东西来读取输入之前。一个例子是:printf("What is your favorite color? "); fflush(stdout); fgets(color, sizeof(color), stdin);
  • 总是检查scanf()的返回值。它返回成功转换的数量。如果它不匹配格式说明符的数量,那么只有那些成功的值被写入命名变量。
  • 注意scanf()字符串中出现的除空格以外的文字字符。这些字符必须与输入文本完全匹配,否则转换失败。因此,像"$%f"这样的格式只能与包含文字美元符号的输入匹配。这可能不是用户所期望的。"%f"对用户来说更容易。如果希望允许可选的美元符号,那么scanf()可能不是最佳选择。

相关问题