Пробельм в облицовке о типах структур в c

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

  1. void print_order(Order the_order) означает print_order , что ожидает копию (значение) типа Order , который является структурой с 4 элементами (указатель, int, структура с 3 входами и двойной). Обычно вы передаете структуру по адресу, чтобы избежать копирования больших структур.
  2. Вы одновременно инициализируете и присваиваете значения orderA , которые сбивают с толку. Порядок инициализации (of orderA ) должен соответствовать порядку структуры:
 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() .

Ваш код отформатирован нетрадиционно (т. Е. плохо), что затрудняет его чтение: