#c #function #types #structure
#c #функция #типы #структура
Вопрос:
в настоящее время я работаю над типами структур в своих примерах, над которыми я работаю, я в настоящее время сделал
#include lt;stdio.hgt; #include lt;string.hgt; typedef struct { int day, month, year; } Date; typedef struct { char customer_name[1000]; //Name of the customer placing the order int order_number; //The order number Date order_date; //The date on which the order was placed double total_price; } Order; /* print_order(the_order) Given an Order object, print the order's details in the same format described in the section above. */ void print_order(Order the_order){ printf("Order %d: Placed by %s on %d/%d/%d (price: $%f)n",the_order.order_number, the_order.customer_name, the_order.order_date.month, the_order.order_date.day, the_order.order_date.year, the_order.total_price); } int main(){ //Create an order with order number 111, placed on November 25, 2021 Order orderA = {111, 11, 25, 2021, "Rebecca Raspberry"}; strcpy(orderA.customer_name, "Rebecca Raspberry"); orderA.order_number = 111; orderA.order_date.year = 2021; orderA.order_date.month = 11; orderA.order_date.day = 25; orderA.total_price = 6.10; //Make a second order, this time with order number 116, placed on November 29, 2021 //This order is created using the { } initializer syntax. Notice the nested initializer //for the date. Order orderB = { "Fiona Framboise", 116, { 29, 11, 2021 }, 17.0 }; print_order(orderA); print_order(orderB); printf("Order %d: Placed by %s on %d/%d/%d (price: $%f)n", orderA.order_number, orderA.customer_name, orderA.order_date.month, orderA.order_date.day, orderA.order_date.year, orderA.total_price); return 0; }
Я хотел знать, что означает print_order(the_order), запрашивает ли он типовое число дней, месяцев и лет? И для OrderB я формирую их так же, как и OrderA, или это неправильно? Результат, который мне нужен, это:
Order 111: Placed by Rebecca Raspberry on 11/25/2021 (price: $6.10) Order 116: Placed by Fiona Framboise on 11/29/2021 (price: $17.00)
Приложил бы репост/справку 🙂
Комментарии:
1. Если вы удалите
printf
изmain
и измените формат с%f
на%.2f
вprint_order
, это, похоже, даст результат, который вы ищете. Хотя я не совсем понимаю, о чем вы на самом деле спрашиваете.print_order
получает копиюOrder
структуры и распечатывает ее.2. Возможно ли, что вы можете мне показать?
Ответ №1:
void print_order(Order the_order)
означаетprint_order
, что ожидает копию (значение) типаOrder
, который является структурой с 4 элементами (указатель, int, структура с 3 входами и двойной). Обычно вы передаете структуру по адресу, чтобы избежать копирования больших структур.- Вы одновременно инициализируете и присваиваете значения
orderA
, которые сбивают с толку. Порядок инициализации (oforderA
) должен соответствовать порядку структуры:
Order orderA = { "Rebecca Raspberry", 111, { 11, 25, 2021 }};
или используйте список обозначений, в этом случае вы можете выбрать заказ:
Order orderA = { .customer_name = "Rebecca Raspberry", .order_number = 111, .order_date = { 11, 25, 2021 }};
Примечание: total_price не инициализируется, но вы присваиваете ему значение 6.10
. orderB
это правильно. @RetiredNinja уже рассказал вам, как исправить строку формата:
void print_order(Order the_order){ printf("Order %d: Placed by %s on %d/%d/%d (price: $%.2f)n",the_order.order_number, the_order.customer_name, the_order.order_date.month, the_order.order_date.day, the_order.order_date.year, the_order.total_price); }
Я не знаю, почему вы печатаете orderA
дважды как с помощью print_order()
, так и printf
с помощью оператора main()
.
Ваш код отформатирован нетрадиционно (т. Е. плохо), что затрудняет его чтение: