пытаясь отформатировать мой printf, чтобы выровнять знаки доллара и центы - c источник - PullRequest
0 голосов
/ 13 февраля 2019

хочу, чтобы результат выглядел примерно так:

# of people Served:       8
Bill Amount:       $ 399.60
Surcharge Amount:   $ 80.00
Final Bill Amount: $ 479.60

не очень хорошо показывает здесь, я имею в виду выстроены в нули

#include <stdio.h>
#include <conio.h>

 int main()
{
    int numberPeople;
    float surchargeAmount, totalBill, finalBill;

    printf("please enter number of people: ");
    scanf(" %d", &numberPeople);
    if (numberPeople <= 5.0)
    {
        surchargeAmount = 0;
    }
    else if (numberPeople <= 10.0)
    {
        surchargeAmount = 80.0;
    }
    else if (numberPeople <= 20.0)
    {
        surchargeAmount = 150.0;
    }
    else if (numberPeople > 20.0)
    {
        surchargeAmount = 200.0;
    }
    totalBill = numberPeople * 49.95;
    finalBill = (numberPeople * 49.95) + surchargeAmount;
    printf("# of people served:%d \n"
        "Bill Amount:%.2f \n"
        "Surcharge Amount:%.2f \n"
        "Final Bill Amount:%.2f \n", numberPeople, totalBill, 
surchargeAmount, finalBill);
    getch();
    return 0;

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Попробуйте следующим образом:

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

#define CURRENCY "$"

struct Bill {
    char* item;
    double amount;
};

enum {
    BUF_SIZE = 16
};

int main(void)
{
    char buf[BUF_SIZE];
    struct Bill bill[] = {
        {"First:", 123.45},
        {"Second:", 0.50},
        {"Third:", 123456.78}
    };

    for (size_t i = 0; i < sizeof(bill) / sizeof(struct Bill); i++) {
        snprintf(buf, sizeof(buf), CURRENCY " %.2f", bill[i].amount);
        printf("%-10s %16s\n", bill[i].item, buf);
    }

    return EXIT_SUCCESS;
}

Таким образом, вы можете получить:

First:             $ 123.45
Second:              $ 0.50
Third:          $ 123456.78
0 голосов
/ 13 февраля 2019

Вам необходимо выровнять свое выходное сообщение, используя соответствующие field width в спецификаторах формата printf .

Например:

printf( "# of people served: %d \n"
        "Bill Amount:        %8.2f \n"
        "Surcharge Amount:   %8.2f \n"
        "Final Bill Amount:  %8.2f \n",
        numberPeople, totalBill, 
        surchargeAmount, finalBill);

Вывод:

# of people served: 3 
Bill Amount:          149.85 
Surcharge Amount:       0.00 
Final Bill Amount:    149.85 

Вот живой пример: https://ideone.com/Iko1BY

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