Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Структури проблем !!!
http://mcu-bg.com/mcu_site/viewtopic.php?f=16&t=18462
Страница 1 от 1

Автор:  RM [ Сря Юли 20, 2022 8:45 pm ]
Заглавие:  Структури проблем !!!

Здравейте
Имам няколко въпроса относно код на С.
Код:

typedef enum {
                      X1=0,
                      X2,
                      X3,
                     ...
                     } Xtype
typedef struct {
                     ....;
                     ....;
                     Xtype Ytype;
                     ...;
                     }Y_record;

func1(){
          Y_record rec;
          ...
          rec.Ytype=X2;

      };

func2(FILE *pfile,Y_record *rec){

fprintf( pfile, "...%02d", ... , ... ,rec->Ytype);

};



Ползвам Борланд. Показал съм само това което не работи според очакванията. Явно имам празноти в главата :( . Имам спомени че съм ползвал същата подредба и в друг компилатор и не съм имал проблем ...
Така съм конструирал програмата че е невъзможно да променям нищо, без да почна от начало...
Зареждам данни към модул. Данните ми вървят в пакети, като пакета който изпращам е структура от данни. подредбата на данните е една и съща, само
данните могат да бъдат различни, без да нарушават пакета.
Всичко ми работи ОК, с изключение на това че при писането във фаила - Y_type ми изкарва нещо съвсем друго ... вместо 01
и за да е по гадно излизат повече знаци - цели 6 знака вместо 2.
Да добавя, че компилатора не ми дава нищо ... поне един варнинг да изреве.

Автор:  MYXATA [ Сря Юли 20, 2022 9:15 pm ]
Заглавие:  Re: Структури проблем !!!

Що не туриш едно...., ( int)rec->Ytype);

Автор:  iss [ Сря Юли 20, 2022 9:23 pm ]
Заглавие:  Re: Структури проблем !!!

... а може би това, което си показал, не е съвсем сорса?

Във ф-цията func1() променливата Y_record rec е локална и каквито и промени да правиш си остават само там във функцията. От къде взимаш pointer-a за да го предадеш на func2?
Друго нещо е fprintf - спецификаторът "%d" очаква да подадеш int, така че е добра практика поне да го cast-ваш.

Автор:  RM [ Сря Юли 20, 2022 9:32 pm ]
Заглавие:  Re: Структури проблем !!!

MYXATA написа:
Що не туриш едно...., ( int)rec->Ytype);

8O 8O 8O Всичко заспа ...
Нормално ли е да питам ЗАЩО???
нали enum си дефинира int.
Всичко друго в структурата си е дефинирано, само enum нямаше причина да го указвам като int.
какво ли не опитвах.
Огромни благодарности.

iss написа:
... а може би това, което си показал, не е съвсем сорса?

Във ф-цията func1() променливата Y_record rec е локална и каквито и промени да правиш си остават само там във функцията. От къде взимаш pointer-a за да го предадеш на func2?
Друго нещо е fprintf - спецификаторът "%d" очаква да подадеш int, така че е добра практика поне да го cast-ваш.

втората функция само записва структурата във файла понта предавам като параметър в скобите на функцията.


// Y_record rec е локална и каквито и промени да правиш си остават само там във функцията.

При мен промяната се записва в структурата , и изчезва само предефинирания rec.
дефинирам си нов rec във втората функция и си изваждам вече промененото значение. Ползвам едно и също rec ... защото се забърквам много

Автор:  MYXATA [ Чет Юли 21, 2022 1:57 am ]
Заглавие:  Re: Структури проблем !!!

Защото С езика е много добър ако му казваш какво точно да прави :)
В твоят случай, не му е ясно как да ти конверира енума, така че казвайки му - тази променлива е интерпретирай като инт, след това fprintf-a знае как да ти принтне стойността.
И между впрочем противно на заглавието на темата, това не е проблем със структурите, борланд и т.н.
Трабва си четене.

Автор:  t_i_t_o [ Чет Юли 21, 2022 7:42 am ]
Заглавие:  Re: Структури проблем !!!

Проблема ти е че си мислиш че е енума е инт, а той е толкова голям колкото реши компилатора, така че да побере максималната му стойност.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/