PDA

View Full Version : توضيح در مورد struct



بانوی ایران
چهارشنبه 23 دی 1388, 23:09 عصر
سلام خدمت دوستان و اساتید گرامی
من استفاده ازstructرو خیلی بلد نیستم اگر میشه راهنمایی کنید
اول این کد



struct {

int number;

char name[NAME_LEN+1];

int on_hand;
} part1,part2;


اگر بخوام به جای part1,part2یه ارایه از partبزارم چجوری مقادیرشو بگیرم از کاربر یعنی وقتی میخوام بگم part.numberرو کاربر وارد کنه وهمینطور part.nameو.. چجوری اینا رو انتصاب بدم
چون توی اون کدی که من نوشتم part1,part2 به این صورت تعریف میشن




part1 = {528, "Disk drive", 10},


part2 = {914, "Printer cable", 5};


حالا من میخوام به جای اینکه اینجور تعریف بشه خود کاربر بتونه تعریف کنه که بعد به صورت یه ارایه بنویسم
ارادت:چشمک:

mabbaszadegan
پنج شنبه 24 دی 1388, 08:59 صبح
فرقی نداره که ، اینطوری بنویس :

struct {
int
number;

char
*name;

int
on_hand;

} part1[10];
char *name1="";
int n,m;
for(int i=0;i<10;i++) {
cin>>name1;
part1[i].name=name1;

cin>>n;
part1[i].number=n;

cin>>m;
part1[i].on_hand=m;

}

بانوی ایران
پنج شنبه 24 دی 1388, 09:18 صبح
سلام
ممنون
من این کد رو نوشتم که امتحانش کنم ولی


#include <stdio.h>
#include <conio.h>
typedef struct {
int stdnumber;
int course;
}student[10];
int n,m;
for(i=0;i<10;i++)
{
printf("enter stdnum[%d], the courses\n");
scanf("%d%d, &n, &m);
student.stdnumber=n;
student.course=m;

میخوام شماره دانشجویی و تعداد واحد ها رو از کاربر بگیرم
میخوام خود این متغیر ها رو به صورت یه ارایه ای از مقادیر دریافتی تعریف کنم و همین طور studentرو که این رو بعد انجام میدم کد رو با عجله نوشتم سوالم اینه
قسمت گرفتن مقادیر رو باید به صورت یه تابع بنویسم؟ اخه داریم structرو بیرون تابع mainتعریف میکنیم مشکلی نداره همینجوری دستورای `printf,scanfرو از کاربر بگیریم بدون اینکه توی یه تابع باشه برنامه ای که من نوشتم به همون صورت بالا هست ولی این ÷یغام رو میزنه
11 unterminated string or character constant
و اگر بخوام به صورت یک تابع تعریف کنم ارگومان تابع رو باید studentبزارم یا (stdnumberوcours) و کجا فراخوانی کنم توی mainیا قبل از main؟

mabbaszadegan
پنج شنبه 24 دی 1388, 09:29 صبح
اینو یه نگاه بنداز :


#include <stdio.h>
#include <conio.h>
typedef struct Student {
int stdnumber;
int course;
};
void main() {
Student student[10];
int n,m;
for(int i=0;i<10;i++)
{
printf("enter stdnum[%d], the courses\n");
scanf("%d%d, &n, &m");
student[i].stdnumber=n;
student[i].course=m;

}
}

بانوی ایران
پنج شنبه 24 دی 1388, 09:51 صبح
warningمیده

[Warning] In function `int main()':
کد که از نظر دستوری مشکل نداره؟ چون کام÷ایلر من این warningرو خیلی میده
اگر بخوام یک تابع تعریف کنم که stdnumberوcoursرو از کاربر بگیره و بعد توی mainفراخوانی کنم
ارگومان ها همونstdnumberوcours)هستند؟ و اگر بخوام از pointer استفاده کنم برای تعریف این متغی ها به صورت یک ارایه باید تو همون قسمت structبه صورت int*تعریفشون کنم دیگه؟
حالا سوال بعدم
فرقtypedef struct باstruct چیه؟
و اینکه

mabbaszadegan
پنج شنبه 24 دی 1388, 09:57 صبح
نمیخواد زیاد روی warningها حساس بشید ، چیز مهمی نیست

در مورد typedef هم فقط میدونم یه نوع جدید تعریف میکنه ، زیاد ازش چیزی نمیدونم

به نظرم اگه از کلاس استفاده کنی بهتره ، من خودم زیاد با struct کار نکردم ، واسه همین اطلاعات زیادی ندارم

ببخشید اگه نتونستم کمکی کنم

موفق باشی

بانوی ایران
پنج شنبه 24 دی 1388, 10:07 صبح
نه مفید بود تا یه حدی بعضی مشکلام حل شد
ممنون که وقت گذاشتید

بانوی ایران
جمعه 25 دی 1388, 00:12 صبح
بازم سلام
دوستان من میخوام این کد رو(همون کد بالا هست)
در struct,studentرو به صورت ارایه تعریف کنم
ایا ممکنه ارایه به صورت داینامیک باشه و اگر اره در او قسمتی که تو کد نوشتم بگید چجوری بایدmallocکنم

#include <stdio.h>
#include <conio.h>
typedef struct {
int stdnumber;
int course;
}student;
int main(void)
{
student *student;
student=(*)malloc()//اينجا
int n,m,x;
printf("how many student do you have?");
scanf("%d",&x);
for(int i=0;i<x;i++)
{
printf("enter stdnum[%d], the courses\n", i);
scanf("%d%d%", &n, &m);
student[i].stdnumber=n;
student[i].course=m;
}
return 0;
}

tdkhakpur
جمعه 25 دی 1388, 00:22 صبح
#include <stdio.h>
#include <conio.h>
typedef struct {
int stdnumber;
int course;
}student;

int main(void)
{
student *p_student;
int n,m,x;
printf("how many student do you have?");
scanf("%d",&x);
p_student=(student *)malloc(x*sizeof(student)); // انتقال به اینجا
for(int i=0;i<x;i++)
{
printf("enter stdnum[%d], the courses\n", i);
scanf("%d%d%", &n, &m);
p_student[i].stdnumber=n;
p_student[i].course=m;
}
free( p_student); // اضافه شود

return 0;
}

بانوی ایران
جمعه 25 دی 1388, 00:29 صبح
اي ول چه باحال دست شما درد نكه
ولي اون خط اخر يعني چي
free( p_student);
ويه سوال ديگه
اگر بخوام يه تابع تعريف كنم كه متغير ها رو بگيره و بزاره تو struct ارگومان تابع بايدstudent باشهياstdnumberوcours؟

tdkhakpur
جمعه 25 دی 1388, 00:41 صبح
خط آخر حافظه گرفته شده توسط malloc را به سیستم عامل برگشت میدهد.
و اما در مورد سوال دوم که بصورت زیر میشود


#include <stdio.h>
#include <conio.h>
typedef struct {
int stdnumber;
int course;
}student;

student GetData (int i)
{
student st;
printf("enter stdnum[%d], the courses\n", i);
scanf("%d%d%", &n, &m);
st.stdnumber=n;
st.course=m;
return st;
}
int main(void)
{
student *p_student;
int n,m,x;
printf("how many student do you have?");
scanf("%d",&x);
p_student=(student *)malloc(x*sizeof(student)); // انتقال به اینجا
for(int i=0;i<x;i++)
p_student[i] = GetData (i);

free( p_student); // اضافه شود
return 0;
}

دستی کد شد!

بانوی ایران
جمعه 25 دی 1388, 00:47 صبح
بازم مرسی جالبه کلی حال کردم
من درست فرقtypedefstructوstructنمیدونم ولی با این توضیحات فکر میکنم یه چیزایی فهمیدم typedefمیاد studentرو به صورت یک نوع تعریف میکنه (مثلا مثل int)و میشه ازش استفاده کرد درسته؟اگر یکم توضیح بدید خیلی ممنون میشم

tdkhakpur
جمعه 25 دی 1388, 18:12 عصر
تقریبا همان معنی را میدهد که شما برداشت کرده اید.
موفق باشید.