PDA

نسخه کامل مشاهده نسخه کامل : مشکل این برنامه چیست؟



egoldfars
10-12-2007, 13:44
سلام این برنامه یه دفتر تلفن هست که نوشتم چند تا سوال دارم اگه ممکنه جواب بیدید............
این برنامه یه نام و تلفن و ایمیل میگیره و درون یه فایل ذخیره ممکنه..........
سوال اول؟
من میخوام درون تابع insert تا زمانی که flag=y هست این کار ادامه داشته باشه یعنی با فشار کارکتر y دوباره ورودی جدیدی بگیره و در غیر این صورت به menu برنامه برگردد ولی کارکتر قبول نمیکنه و مجبور شدم از نوع int استفاده کنمflag=1 و مقایسه عددی انجام بدم به چه دلیل قبول نمیکنه ...................

سوال دوم؟
داخل یک تابع مگه نمیشه یه تابع دیگر رو صدا زد لطفا به قسمت تابع menu یه نگاهی کنید چون تابع show رو صدا نمیزنه
راستی تابع show درست نوشتم.

ممنون میشم راهنمایی کنید..........

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

sherlockholmz
10-12-2007, 17:18
سلام این برنامه یه دفتر تلفن هست که نوشتم چند تا سوال دارم اگه ممکنه جواب بیدید............
این برنامه یه نام و تلفن و ایمیل میگیره و درون یه فایل ذخیره ممکنه..........
سوال اول؟
من میخوام درون تابع insert تا زمانی که flag=y هست این کار ادامه داشته باشه یعنی با فشار کارکتر y دوباره ورودی جدیدی بگیره و در غیر این صورت به menu برنامه برگردد ولی کارکتر قبول نمیکنه و مجبور شدم از نوع int استفاده کنمflag=1 و مقایسه عددی انجام بدم به چه دلیل قبول نمیکنه ...................

سوال دوم؟
داخل یک تابع مگه نمیشه یه تابع دیگر رو صدا زد لطفا به قسمت تابع menu یه نگاهی کنید چون تابع show رو صدا نمیزنه
راستی تابع show درست نوشتم.

ممنون میشم راهنمایی کنید..........

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

سلام،
خدمتتان عرض كنم وقتي شما flag را يك int تعريف كرده ايد،چطور توقع داريد كه برنامه بدبخت از شما flag را بصورت كاراكتر قبول كند؟:31:

اگر مي خواهيد با كاراكتر تست كنيد شرط حلقه را به صورت زير تغيير دهيد:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

و يا مثلا" تعريف كنيد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و سپس در حلقه بنويسيد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

در مورد سوال دوم،شما بايد تابع صدا زننده را بعد از تابع صدا شونده بنويسيد. به عبارت ديگر بايد جاي تابعmenu و show را عوض كنيد مسئله حل است.
موفق باشيد.

egoldfars
11-12-2007, 01:38
ممنون از توجه شما آقای sherlockholmz
ابنم کد اصلاح شده فقط یه ایراد داره اگر ممکنه یه راهنمایی کنید من محتوای فایل رو نمیتونم روی display نمایش بدم فقط اولین ورودی رو و اونم چند بار (داخل loop گیر میکنه تابع show ) آخه چه طوری میشه فهمید دیگه داخل فایل هیچ رکوردی نیست و به آخر رسیدیم .راستی برای جستجو داخل فایل به چه صورتی عمل کنیم...................
بازم ممنون

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

sherlockholmz
12-12-2007, 09:22
ممنون از توجه شما آقای sherlockholmz
ابنم کد اصلاح شده فقط یه ایراد داره اگر ممکنه یه راهنمایی کنید من محتوای فایل رو نمیتونم روی display نمایش بدم فقط اولین ورودی رو و اونم چند بار (داخل loop گیر میکنه تابع show ) آخه چه طوری میشه فهمید دیگه داخل فایل هیچ رکوردی نیست و به آخر رسیدیم .راستی برای جستجو داخل فایل به چه صورتی عمل کنیم...................
بازم ممنون


سلام،
براي اين كار لازم است برنامه شما در اديتور c نوشته،اجراو در صورت لزوم خط به خط بررسي شودكه در حال حاضر با تعذر فراوان فرصت چنين كاري را ندارم.ولي با نگاهي اجمالي به برنامه چند نكته به چشم آمد كه فكر مي كنم راه گشا باشد:
1-اين خط تعريف تابعfread اشتباه است،در واقع قسمت قرمز اضافي است.

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید


2-شما ساختاري بنام cust_st ساخته ايد كه متشكل از يك بردار كاراكتري و يك بردار عددي است .تا اينجا درست، ولي متغير custdata را كه از اين نوع ساختار تعريف كرده ايد يك متغير است و تنها يك نام و يك شماره تلفن را مي تواند ذخيره كند. به عبارت ديگر نامها و شماره تلفنهائي كه متواليا" وارد ميكنيد در custdata روي قبلي نوشته مي شود و ركورد قبلي از دست مي رود.شما بايد متغير custdata را از نوع بردارويا اشاره گر تعريف كنيد تا بتوانيد ركوردهاي زيادي را در آن ذخيره نمائيد.
3-همانطور كه ميدانيد متغيرهاي محلي در همان بلوكي كه تعريف مي شوندمعتبرند و به محض خروج از بلوك رها مي گردند.شمامتغير custdata را بصورت محلي در تابع insert تعريف كرده ايد و آن را پر مي كنيد .با خروج از تابع هيچ تضميني براي با قيماندن محتواي آن نيست .اين در حاليست كه شما به همين محتوا در تابع show احتياج داريد.جهت اطمينان و جلوگيري از خطا (موكدا") بهتر است متغير custdata بصورت global تعريف شود.
4-يك توصيه:c يك زبان ساختار يافته است .استفاده از دستورgoto اين صفت را زير سوال مي برد. بزرگان برنامه نويس با c(نه من) توصيه موكد دارند كه از دستور اسپاگتي goto استفاده نكنيم.ميتوان از حلقه هاي مختلفي كه در c وجود داردبا شرطهاي متفاوت استفاده كرد.در واقع سعي كنيد كه فرض كنيد دستوري بنام goto وجود ندارد.اين دو حسن دارد:اولا" برنامه شما ساختار يافته ،منظم و بدون اغتشاش ميشود و ثانيا" در صورت استفاده از اخلاف c (مانند ++c و vc ) كه شي گرا بوده و چنين دستور ساختار شكني را ندارند با مشكل مواجه نخواهيد شد.با عرض معذرت مجدد كه نتوانستم برنامه اتان را كامل كنم اميدوارم اين نكات در تصحيح برنامه ياريتان نمايد.
موفق باشيد.

egoldfars
13-12-2007, 08:38
بازم ممنون از راهنمایی شما ..........
به محض اصلاحات دوباره کدهارو میگذارم

egoldfars
14-12-2007, 22:04
سلام
تغیرات داده شد فقط منوی جستجوی بر اساس شماره تلفن مشکل داره اگر ممکنه راهنمایی کنید .
بزودی گزینه حذف یه رکورد و ویرایش و مرتب کردن نامها به برنامه افزوده میشود لطفا دوستانهم کمک وراهنمایی هم کنند.........................
منتظرم...

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید