wedtorque Ответов: 2

Вопрос о структуре в программировании на языке Си


#include <stdio.h>
#include <stdlib.h>
struct test
{
    int id;
    char name[20];
};
int main()
{

struct test t1;

   t1.id=1;
   fflush(stdin);
   fgets(t1.name,20,stdin);

print(&t1.name);
print1(t1.id,&(t1.name));

}
void print(struct test *name)
{
    puts(name);
}

void print1(struct test id,struct test *name)
{

    printf("\n%d\n",id);
    puts(name);
}


Что я уже пробовал:

первая функция puts in print работает отлично, но почему она не работает во второй функции print1?

Kornfeld Eliyahu Peter

Вы проверили это с помощью отладчика?

2 Ответов

Рейтинг:
1

OriginalGriff

Просто: это не struct test то, что вы передаете методу, - это строка.
Ваш functionm ожидает указатель на структуру:

void print1(struct test id,struct test *name)
{
    printf("\n%d\n",id);
    puts(name);
}
но вы проходите это:
print1(t1.id,&(t1.name));

Что это символ *:
struct test
{
    int id;
    char name[20];
};

И вы также передаете целое число в качестве первого значения!
Я не уверен, что вы пытаетесь сделать здесь - я думаю, что вы хотите перечитывать свои заметки курса и пытаться снова!


wedtorque

почему работает первая функция ?
относительно того, что я хочу сделать
давайте рассмотрим структуру с 5 членами .я хочу отправить первый член в качестве значения и 2-й член по ссылке на функцию .как бы я это сделал ?

OriginalGriff

void MyFunction(int id, char** pstrName)
{
...
}
...
Myfunction в консоли(Т1.ИД &ампер;(Т1.название));

Или просто передайте указатель на всю структуру целиком:
void MyFunction(struct test* data)
{
...
}
...
MyFunction(& t1);

wedtorque

спасибо :) это решает мой вопрос

Рейтинг:
0

Patrice T

как уже сказал OriginalGriff, параметры *name это не структуры, это *char.

Вы должны вернуться к основам C/C++ :
Язык программирования Си - Википедия, свободная энциклопедия[^]
https://hassanolity.files.wordpress.com/2013/11/the_c_programming_language_2.pdf[^]
http://www.ime.usp.br/~ПФ/Керниган-Ритчи/с-Программирование-электронные книги.формат PDF[^]

Используйте отладчик, чтобы увидеть, что делает ваш код.
Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]