Проблемы с проверкой программы. Пожалуйста помоги! - PullRequest
1 голос
/ 19 мая 2009

// Ребята, у меня проблемы с кодом, и я рвал на себе волосы, пытаясь решить эту проблему. Проблема в том, что я пытаюсь проверить свой код, чтобы он не рассчитывал отрицательные числа. Если кто-то может помочь сгладить эту программу, я был бы очень признателен. Пожалуйста.

// Целью программы калькулятора налогов будет использование программирования на С для расчета налога с продаж для каждого магазина Kudler Fine Food (DelMar, Encinitas и La Jolla) // Стандартная обработка ввода / вывода

#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      
}

Ответы [ 2 ]

2 голосов
/ 19 мая 2009

В этой строке есть ошибка:

scanf (" $ % f", & fsaPurchaseAmount); // пользователь вводит переменную сумму

должно быть:

scanf ("% f", & fsaPurchaseAmount); // пользователь вводит переменную сумму

1 голос
/ 19 мая 2009

Вот несколько замечаний по поводу кода в представленном виде:

  • Не используйте с плавающей запятой деньги. Это только вызовет горе позже. В идеале, посоветоваться с бухгалтером. А пока делайте арифметику в центах и ​​масштабируйте в долларах и обратно для отображения.

  • Расчеты, такие как налог с продаж , могут быть правильно выполнены с умножением с плавающей запятой, но убедитесь, что вы соблюдаете принятую практику округления до целых центов. Опять же, обратитесь за советом к бухгалтеру.

  • fflush() не делает то, что вы думаете, он делает. Для файлового дескриптора, открытого для записи (такого как stdout), это гарантирует, что весь вывод по этому дескриптору завершен. Он используется после печати приглашения и до вызова чего-то вроде scanf() для чтения ввода. Пример: printf("What is your favorite color? "); fflush(stdout); fgets(color, sizeof(color), stdin);

  • Всегда проверяйте возвращаемое значение scanf(). Возвращает количество успешно выполненных конверсий. Если он не соответствует количеству спецификаторов формата, тогда только те, которые успешно выполнили операции, имели значения, записанные в именованные переменные.

  • Остерегайтесь буквенных символов, кроме пробелов, появляющихся в строке формата scanf(). Они должны точно соответствовать входному тексту, иначе преобразование не удастся. Таким образом, формат, подобный "$%f", сопоставляется только с вводом, который включает буквальный знак доллара. Это, вероятно, не то, что ожидает ваш пользователь. Формат "%f" проще для пользователя. Если вы хотите разрешить дополнительный знак доллара, то scanf() может быть не лучшим выбором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...