PDA

View Full Version : سوال: مشكل در ارسال اشاره گر رشته اي به تابع



samaram
جمعه 20 دی 1387, 15:44 عصر
من برنامه اي رو مي نويسم كه يه مي خواد دو تا آرايه ، يكي اشاره گر رشته اي و يكي معمولي رو توسط تابعي از ورودي بخونه. اينم كدهايي كه نوشتم:


# include <stdio.h>
# include <conio.h>
# include <string.h>
void read(int tell[],char *name);
void main(){
clrscr();
int tell[5]; // farz mikonim mikhahim etelaate 5 nafar ra negah darim.
char *name[5];
read(tell,*name);
for(int i=0;i<5;i++)
printf("%s",*(name+i));
getch();
}
//-------------------
void read(int tell[],char *name)
{
for(int i=0;i<5;i++)
{
printf("please enter name: ");
scanf("%s",name+i);
printf("please enter tell number: ");
scanf("%d",&tell[i]);
}
}


حالا مشكلم اينه كه بجاي چاپ مقادير و شماره تلفن ها ، borlan c ... copy right... و از اينجور چيزا چاپ مي كنه! ميشه بگيد كجاي استفاده ام از اشاره گر ها اشتباه بوده؟

Saeed_m_Farid
جمعه 20 دی 1387, 16:58 عصر
حالا مشكلم اينه كه بجاي چاپ مقادير و شماره تلفن ها ، borlan c ... copy right... و از اينجور چيزا چاپ مي كنه! ميشه بگيد كجاي استفاده ام از اشاره گر ها اشتباه بوده؟تو تاپيك قبلي كه زده بودين توضيح دادم : تابع read به ورودي شما به چشم متغير محلي نگا ميكنه و هر كاري كه شما انجام دادين بي اثر ميشه و مقادير قبلي باقي ميمونن، و بالطبع اينجا هم مقادير تصادفي هستن كه تو آرايه شما از شانستون borland .... بوده
راه حلش پاس دادن متغير بصورت ارجاعي يعني با & هست كه اونم واسه آرايه ها نميتونين استفاده كنين و واسه آرايه تون بايد يه struct يا typedef تعريف كنين. ضمنا مورد شما تو تاپيك قبلي رو ميشه با دادن خروجي * int و ورودي * char حل كرد كه اگه دقت ميكردين كدش رو واستون گذاشته بودم! ==> http://www.barnamenevis.org/forum/showpost.php?p=662053&postcount=11
همونجا اگه ميپرسيدين جواب ميدادم...

با تشكر.

samaram
جمعه 20 دی 1387, 17:16 عصر
تو تاپيك قبلي كه زده بودين توضيح دادم : تابع read به ورودي شما به چشم متغير محلي نگا ميكنه و هر كاري كه شما انجام دادين بي اثر ميشه و مقادير قبلي باقي ميمونن، و بالطبع اينجا هم مقادير تصادفي هستن كه تو آرايه شما از شانستون borland .... بوده
راه حلش پاس دادن متغير بصورت ارجاعي يعني با & هست كه اونم واسه آرايه ها نميتونين استفاده كنين و واسه آرايه تون بايد يه struct يا typedef تعريف كنين. ضمنا مورد شما تو تاپيك قبلي رو ميشه با دادن خروجي * int و ورودي * char حل كرد كه اگه دقت ميكردين كدش رو واستون گذاشته بودم! ==> http://www.barnamenevis.org/forum/showpost.php?p=662053&postcount=11
همونجا اگه ميپرسيدين جواب ميدادم...

با تشكر.
دوست عزيز از راهنماييتون واقعا ممنونم. اما من اين تاپيك رو قبل از جواب شما توي اون تاپيك زدم. يعني راهنماييتونو اونجا نديدم. و اين سوال رو هم براي اين توي يه تاپيك جدا مطرح كردم كه موضوع فرق داشت . ببينيد اين برنامه ها كه دارم روشون كار مي كنم پروژه ي دانشجوييم هستند. 35 تا بوده كه از ديروز پدرم دراومد! تا نوشتم و حالا سر سه تاش موندم و دو تاشو اونجا مطرح كردم و يكيشم اينجا.كه البته يكيشو كه اون دوستمون اونجا برام نوشتن رو كامل كردم و تموم شد. اما سوالي كه اونجا در مورد جمع دو عدد بيست رقمي مطرح كردم مال مبحثيه كه توي سرفصل تدريس كلاس قبل از اشاره گره و من نبايد اونجا از اشاره گر استفاده كنم. اگه ميشه كمي واضح تر راهنماييم كنيد. بايد تا دو ساعت ديگه برا استادم ميلش كنم.

Saeed_m_Farid
جمعه 20 دی 1387, 19:07 عصر
ببينيد اين برنامه ها كه دارم روشون كار مي كنم پروژه ي دانشجوييم هستند.
بايد تا دو ساعت ديگه برا استادم ميلش كنم. طبق اساسنامه سايت صحبتهايي مثل اين قدغن، ممنوع و خلاف است لطفا ادامه ندهيد...

اگه ميشه كمي واضح تر راهنماييم كنيدمنظورتون از كمي واضحتر حتما كد چيزايي كه گفتم ديگه :

//---------------------------------------------------------------------------
#define MAX_ENTRY 100
#define MAX_NAME_LEGTH 32

typedef struct tagSTDINFO{
int tel [ MAX_ENTRY ];
char name[ MAX_NAME_LEGTH ][ MAX_ENTRY ];
}STDINFO, *PSTDINFO;


void read(STDINFO &stdi, int cnt)
{
for(int i=0;i<cnt;i++)
{
printf("please enter name[%d]: ", i);
scanf("%s", stdi.name+i);
printf("please enter tel number[%d]: ", i);
scanf("%d", stdi.tel+i);
}
}

int main()
{
STDINFO st = {0};
read(st, 5);
printf("================================================== ===========\n");
for(int i=0; i<5; i++)
printf("STD[%2d] : Name:%16s , tel:%d \n", i, st.name[i], st.tel[i]);
getch();
return 0;
}
//---------------------------------------------------------------------------
ضمنا
1- define# يه چيزي مثل ثابت تعريف كردنه ولي واسه كامپايلر اينكار رو ميكنه...
2- typedef هم نوع تعريف ميكنه؛ مثلا :


typedef MyType int[32];

obscure
جمعه 20 دی 1387, 19:36 عصر
دوست عزیز samaram ,تو این برنامه که آقای saeed_m_farid واست نوشته دیگه همه چیش ردیفه فقط یه چیزی اونم اینکه شماره تلفن هاش 5 رقمی بیشتر نمی شه چون از نوع اینتجر هست...اگه دوست داشتی و حال کردی متغیر tel رو هم مثل name از نوع char و دو بعدی تعریف کن که یه خورده واقعی شه....
در ضمن ایشون درست می گن که این لحن صحبت درست نیست...چرا شما روز آخر پروژه به عنوان آخرین راه حل یاده سایت می افتید؟؟