Как вывести структуру на экран c
Перейти к содержимому

Как вывести структуру на экран c

  • автор:

Вывод элементов структуры

Author24 — интернет-сервис помощи студентам

Вывод элементов структуры
Приветствую. Есть структура: typedef struct PASSENGER< int name; int status; int.

Вывод элементов структуры на экран
Три вечера уже с этим сижу, не получается. Задана структура struct DAY

Вывод на экран элементов структуры
помогите пожалуйста с програмкой.Прохожу практику по книге где нужно записать данные в структуру.

Ввод/вывод данных элементов структуры через функцию
Разработать программу учета покупок ювелирного магазина. Данные о покупках хранить в виде массива.

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Вывод требуемых элементов из структуры
Есть две структуры, у которых поле author одинаковое, а все остальные поля разные. Необходимо.

Ввод и вывод элементов структуры
Не получается ввести и вывести на экран элементы структуры после второго. #include <stdio.h>.

Вывод структуры с исключением строк, элементов
Здравствуйте! Пишу консольную программу на подобие медицинского интерфейса. Прилагаю рабочую часть.

Вывод элементов структуры через cout
Здравствуйте! Подскажите, почему в моём простом примере при попытке вывести элементы структуры.

Помещение структуры в вектор, удаление структуры, изменение элементов структуры
Здравствуйте. Помогите разобраться с тем, как: 1 — находить элементы в векторе зная уникальный.

Вывод структуры, строка как элемент структуры
Описать структуру с именем TRAIN, содержащую следующие поля: □ название пункта назначения;.

Или воспользуйтесь поиском по форуму:

Как вывести структуру на экран c

Сообщений: 15

надо только вывести структуру

#include "stdafx.h" #include #include #include #include #include #include "locale.h" #define QUEUE struct queue QUEUE < char name[100]; int plsh; int etzh; float gdsr; int stm; QUEUE *next; >; extern void insert(QUEUE **q, QUEUE **new_node); extern char* take_out(QUEUE **q, int *error); void insert(QUEUE **q, QUEUE **new_node) < QUEUE *current = *q; QUEUE *previous = 0; while ( current) < previous = current; current = current ->next; > (*new_node) = ( QUEUE * ) malloc( sizeof( QUEUE) ); if (previous ) < (*new_node) ->next = previous -> next; previous -> next = (*new_node); > else < *q = *new_node; (*q) ->next = 0; > > char* take_out(QUEUE**q, int *error ) < char text[100]; memchr(text,0,100); QUEUE *old_header = *q; if (*q) < if((*q)->next) < while(old_header->next->next) old_header=old_header->next; // value = old_header->next->; memcpy(text,old_header->next->name,100); free( old_header->next ); old_header->next=0; > else < // value = old_header ->info; memcpy(text,old_header->name,100); *q = (*q) -> next; free( old_header ); > *error = 0; > else *error = 1; return text; > void main() < int error; QUEUE *q1, *q2=0; float temp; insert(&q1, &q2); printf("Naimenovanie: "); scanf("%s",q2->name); printf("Ploshad': "); scanf("%d",&q2->plsh); printf("Etazhnost': "); scanf("%d",&q2->etzh); printf("God sooruzhenia: "); scanf("%f",&temp); q2->gdsr=temp; printf("Stoimost' mln.rub.: "); scanf("%d",&q2->stm); insert(&q1, &q2); printf("\nNaimenovanie: "); scanf("%s",q2->name); printf("Ploshad': "); scanf("%d",&q2->plsh); printf("Etazhnost': "); scanf("%d",&q2->etzh); printf("God sooruzhenia: "); scanf("%f",&temp); q2->gdsr=temp; printf("Stoimost' mln.rub.: "); scanf("%d",&q2->stm); insert(&q1, &q2); printf("\nNaimenovanie: "); scanf("%s",q2->name); printf("Ploshad': "); scanf("%d",&q2->plsh); printf("Etazhnost': "); scanf("%d",&q2->etzh); printf("God sooruzhenia: "); scanf("%f",&temp); q2->gdsr=temp; printf("Stoimost' mln.rub.: "); scanf("%d",&q2->stm); printf("\nremove( &q2 ) = %s", take_out(&q1, &error)); //printf("\nremove( &q2 ) = %s", take_out(&q1, &error)); // printf("\nremove( &q2 ) = %s", take_out(&q1, &error)); getch(); >

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

для просмотра содержимого очереди: void VYVOD (node **no, node **ko) // Вывод содержимого очереди. // *no - указатель на начало очереди, // *ko - указатель на конец очереди. < node *r; coutcout

Вывод элементов структуры на экран

Author24 — интернет-сервис помощи студентам

Нужно её дважды вывести на экран, один раз через имя структуры, второй - через указатели. Помогите плиз.

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Вывод на экран элементов структуры
помогите пожалуйста с програмкой.Прохожу практику по книге где нужно записать данные в структуру.

Организовать вывод структуры на экран
Доброго время суток. Подскажите, пожалуйста, знающие люди, как в Си организовать вывод структуры на.

Чтение структуры из файла и вывод на экран
Подскажите, пожалуйста, как считать подобную структуру из файла? 1. Вопрос, состоящий из.

Вывод элементов структуры
Приветствую. Есть структура: typedef struct PASSENGER< int name; int status; int.

1907 / 1326 / 966
Регистрация: 12.02.2013
Сообщений: 2,172

ЦитатаСообщение от o6o Посмотреть сообщение

один раз через имя структуры, второй - через указатели

Собственно до конца не понял

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
#include struct DAY { char* name; int num; }; struct DAY day_tab[] = {{"vosvresenye",0}, {"ponedelnik",1}, {"vtornik",2}, {"sreda",3}, {"chetverg",4}, {"pyatnitsa",5}, {"subbota",6}}; int main() { size_t size = sizeof(day_tab) / sizeof(*day_tab); // Через индексы size_t i; for (i = 0; i  size; ++i) { printf("%s %d\n", day_tab[i].name, day_tab[i].num); } printf("\n\n"); // Через указатели struct DAY* cursor = day_tab; for (i = 0; i  size; ++i, ++cursor) { printf("%s %d\n", cursor->name, cursor->num); } printf("\n"); return 0; }

Регистрация: 26.02.2013
Сообщений: 34

Огромное спасибо, кучу времени на это убил, так и не разобрался как делать, голова уже от этого раскалывается.

Добавлено через 18 минут
Самое обидное, что я всё правильно делал, программа не работала, т.к. у темя void main() стояла в самом начале, а не после описания структуры, я про это даже не подумал. А в чём разница, где её ставить?

Как можно передать структуру в printf, а к переменным её обращаться из шаблона?

Если "о структуре мы ничего не знаем", только указатель на void вместо структуры, то и вывести мы ничего не можем.
Даже имея шаблон это не сделать корректно в общем случае.
Тем более printf это не умеет.

Но printf умеет так:

S1 s1 = (S1); printf("A: %d, B: %d", s1);

Т.е. тут не указатель void, а полностью определенная структура. Это работает, потому что компилятор кладет на стек в качестве параметров printf всё содержимое структуры. Поля в шаблоне нужно указывать в порядке следования полей структуры, пропускать и добавлять поля нельзя.

printf умеет так

res2001, не умеет же, на самом деле, и стандарт прямо говорит, что это UB:
C99 7.19.6.1:2:

If there are insufficient arguments for the format, the behavior is undefined.

C99 7.19.6.1:9:

If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined.

То что приведённый код работает -- это просто удачное совпадение того, как в данном случае используемое соглашение о вызовах передало эту структуру и того, как оно передаёт обычные параметры через многоточие.

Решения вопроса 3

GavriKos

Сделать свою реализацию printf/tostring/<>> у структуры.
Ответ написан 15 мая 2023
Комментировать
Нравится 1 Комментировать
Разработчик на С++, экс-олимпиадник.

Во встроенный printf вы это не добавите никак. Придется писать собственную обертку и там парсить строку формата.
Так, чтобы это работало со всеми структурами, у которых есть член int a - нужны шаблоны, да. Гуглите variadic template, но это мрак и ужас. В любом случае это будет весьма громоздкий и непонятный код.

Но раз уж у вас C++, то вы вместо printf используйте cout. Переопределите operator

Да, тут не получится в каждом конкретном месте вызова менять формат вывода, он будет одинаков везде - но так ли вам это нужно, чтобы городить костыли с printf?

Ответ написан 15 мая 2023
Комментировать
Нравится 1 Комментировать
you don't choose c++. It chooses you
Если вы хотите выводить элементы структуры, то пусть самурая - переопределить
operator примерно так:

std::ostream operator

Шаблон вам здесь не пригодится, поскольку только ваша структура содержит поля a и b.
Любой другой класс/структура содержит другие поля, а соответственно, данная шаблонная функция вызовет ошибку компиляции для них из-за отсутствия соответствующих полей.

Шаблоны полезны там, где есть общий интерфейс, например, можно написать шаблонную функцию, которая проходится по контейнеру и выводит его значения (поскольку многие STL контейнеры итерируемы и этот функционал имеет единый интерфейс)

Ответ написан 15 мая 2023
Комментировать
Нравится Комментировать
Ответы на вопрос 1

mayton2019

mayton2019 @mayton2019
Bigdata Engineer

Данная задача решается мета-программированием. Это предполагает 2 фазы компилляции. Поскольку
речь идет о языке С. У нас нет рефлексии и нет шаблонов. То я вижу только такой выход.

Вобщем 2 фазы. В первой фазе - объявить структуру TS1 в каком-то обобщенном формате.
Например в JSON.

И сгенерировать из этой структуры код для декларации ее в языке C и для форматной
печати через printf.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *