ورود

نسخه کامل مشاهده نسخه کامل : چه جوري اين مشكل رو توي c++ برطرف كنم؟؟



mahsa1469
03-06-2009, 12:30
سلام دوستان يه برنامه نوشتم اصلا ارور نداره ولي چند تا اشتباه ازم مي گيره پيغام خطا اينه



size of the type is unknown or zero


يكي از خط هايي هم كه اين خطا رو داره اينه



(int pass_search(int N,char user_n[],userpass[100]

ممنون مي شم اگه بگيد كجاشو بايد تغيير بدم تا درست شه:11::11:

sin2x=2sinxcosx
03-06-2009, 13:20
شما userpass‌رو از چه نوعي تعريف کردين ؟ مشخص نيست که .
يه چيزي هم که هست اينه که اندازه آرايه تون معلوم نيست . فقط در صورتي مي تونين يه آرايه بدون سايز تعريف کنين که در موقع تعريف مقداردهي اوليه صورت بگيره .

mahsa1469
03-06-2009, 13:30
شما userpass‌رو از چه نوعي تعريف کردين ؟ مشخص نيست که .
يه چيزي هم که هست اينه که اندازه آرايه تون معلوم نيست . فقط در صورتي مي تونين يه آرايه بدون سايز تعريف کنين که در موقع تعريف مقداردهي اوليه صورت بگيره .
از نوع كاراكترchar تعريفش كردم
اين شروع يه تابع است به ما گفتن وقتي مي خواين تابع رو تعريف كنيد اگه يه بعدي بود تغيير مقدار نديم واگه دو بعدي بود به يكيشون مقدار بدين!!!

mahsa1469
03-06-2009, 13:35
براي اين خط هم همين پيغام رو مي ده


for(i=0;user_n[j]!='\0'&&userpass[i][j]!='\0';++j

DaneshD
03-06-2009, 13:43
از هیچ نوعی تعریفش نکردی. sin2x کاملا درست میگه. header تابع با متغیر معمولی فرق داره. به صورت زیر نوشتم وکامپایل کردم error نداد.


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

نظور شما از تابع دوبعدی احتمالا آرایه دوبعدی هست. آرایه ای که سایز نداشته باشه pointer هست. برای توابع معمولا از pointer استفاده میکنند چون pass کردن آرایه بزرگ هم کارایی خوبی نداره و هم میتونه باعث "Stack overflow" بشه. آرایه دوبعدی هم که گفتن به یکیش مقدار بدبد میشه آرایه ای از pointer ها.

mahsa1469
03-06-2009, 13:48
از هیچ نوعی تعریفش نکردی. sin2x کاملا درست میگه. header تابع با متغیر معمولی فرق داره. به صورت زیر نوشتم وکامپایل کردم error نداد.


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

نظور شما از تابع دوبعدی احتمالا آرایه دوبعدی هست. آرایه ای که سایز نداشته باشه pointer هست. برای توابع معمولا از pointer استفاده میکنند چون pass کردن آرایه بزرگ هم کارایی خوبی نداره و هم میتونه باعث "Stack overflow" بشه. آرایه دوبعدی هم که گفتن به یکیش مقدار بدبد میشه آرایه ای از pointer ها.
منظورتون رو از pass نمي فهمم من يه تابع فرعي به اين نام تعريف كردم و userpass هم يك رشته هستش
يعني من اگه مثل شما بنويسم باز خاصيت رشته بودن رو داره؟؟
پس ايراد دومين مثالي كه نوشتم چيه همين خارو براش مي ده

sin2x=2sinxcosx
03-06-2009, 14:33
منظورتون رو از pass نمي فهمم من يه تابع فرعي به اين نام تعريف كردم و userpass هم يك رشته هستش
يعني من اگه مثل شما بنويسم باز خاصيت رشته بودن رو داره؟؟
پس ايراد دومين مثالي كه نوشتم چيه همين خارو براش مي ده

منظورشون از pass ، پاس کردنه . يعني انتقال يا قرار دادن آرگومان ها در پارامتر هاي تابع و اين فقط يه تشابه اسمي بين تابع شما و کلمه ايشونه . راست مي گن . مي تونين براي رشته اي که قراره به تابع پاس بشه از نوع * char بگيرين و براي اينکه مطمئن بشين تو تابع فراخوانده شده تغيير نمي کنه مي تونين يه const هم بغلش بذارين .

mahsa1469
03-06-2009, 14:34
حق با شما بود مشكل رو حل كردم فقط موند يه چيز ديگه حالا توي همون خط ارور زير رو مي ده


Error mahsa.cpp 36:)expected

اون خط رو اينجوري عوض كردم

(int pass_search(int N,char user_n[],userpass[100][66
اينو چي كارش كنم؟؟

sin2x=2sinxcosx
03-06-2009, 14:38
تو کدوم خط ؟ ببخشيد ميشه کدهاتون رو داخل تگهاي html قرار بدين بهتر خونده بشه ؟ الان فکر کنم شما

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

mahsa1469
03-06-2009, 14:43
آره همونيه كه شما مي گيد

DaneshD
03-06-2009, 14:44
منظورتون رو از pass نمي فهمم من يه تابع فرعي به اين نام تعريف كردم و userpass هم يك رشته هستش
يعني من اگه مثل شما بنويسم باز خاصيت رشته بودن رو داره؟؟
پس ايراد دومين مثالي كه نوشتم چيه همين خارو براش مي ده

بله userpass در اینجا رشته است. شما هم میخواستین رشته تعریف کنید اما یک char برای هردو متغیرها نوشتید. این کار رو میشه تو بدنه برنامه کرد اما نه در header تابع.

sin2x=2sinxcosx
03-06-2009, 14:53
بهترين کار اين بود که برنامتون رو به طور کامل اين جا قرار ميدادين .
مثلا اين آرايه کاراکتري دو بعدي قراره چيکار بکنه ؟ چرا دو بعدي ؟

mahsa1469
03-06-2009, 15:11
چه جوري مي تونم برنامم رو توي كد html قرار بدم؟

mahsa1469
03-06-2009, 15:13
چه جوري مي تونم برنامم تو html كد وارد كنم؟

mahsa1469
03-06-2009, 15:15
چه جوري ميتونم برنامم تو html كد قرار بدم ؟

sin2x=2sinxcosx
03-06-2009, 15:17
کدهاتون رو قبل از قرار دادن در سايت تو NotePad کپي کنين . حالا اول کدهاتون کلمه html رو داخل دو تا [] قرار بدين و بعد آخر کدهاتون هم [html/] قرار بدين و بعد همشو کپي کنين تو سايت .

sin2x=2sinxcosx
03-06-2009, 15:20
براي مثال اين فايلو ببينين :


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

mahsa1469
03-06-2009, 15:28
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

mahsa1469
03-06-2009, 15:51
اولين بارمه كه برنامه رو به صورت تابع نوشتم خوب بلد نيستم به احتمال زياد توي همين اشكال گرفته
اين برنامه N يوزر و پس رو مي گيره بعد يه يوزر مي خواد اگه درست بود ژسورد رو مي خواد در غير اين صورت پيغام خطا مي ده اكه پسورد اشتباه بود دوباره پيغام خطا مي ده و اگه سه بار يا بيشتر پس اشتباه وارد شد مي گه كه قبلا سعي شده وارد پسورد شن

فاطـمه
03-06-2009, 16:32
اشتباهاتون اکثرا از روی بی دقتی بوده
مثلا در خط

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
شما نوع متغیر userpass رو تعیین نکردین
وقتی قبل از userpass کلمه char رو اضافه می کنید یه عالمه خطای دیگه هم پیدا میشه

فاطـمه
03-06-2009, 16:39
خب حالا خطا های جدید
توی خط

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

برنامه متغیر user_n رو نمیشناسه
من دس تو جریان برنامه شما نیستم
ولی اگر این متغیر رو توی قسمت های دیگه تعریف کردین و اینجا می خواین ازش استفاده کنید مسلما نمی شناسش واسه رفع این مشکل یا باید متغیر رو به صورت آرگمان ورودی به تابع پاس بدین یا از اشاره گر ها استفاده کنید و یا اینکه متغیر رو سراسری تعریف کنی( یعنی خارج از تابع main و بقیه تابع ها اون بالا تعریفش کنی)

بعد از اون توی خط

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خطا دارین که حدس می زنم اشکال تایپی دارین و باید به جای red بنویسین read

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

فاطـمه
03-06-2009, 16:43
خطای بعدی توی خط

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
هست که بازم خطای تایپی دارین
user_search هست اسم تابع شما

خطای بعدی از یه دستور break گرفته شده
که بازم تایپ اون اشتباس شما نوشتین braek
خطا های برنامتون همینا بود تا اینجا بر طرف کنید
شاید بعدش بازم خطا پیدا بشه و یا حتی خطا های منطقی
به همون ترتیبی که نوشتم خطا ها رو رفع کنید تا مشکلی پیش نیاد:20:

sin2x=2sinxcosx
03-06-2009, 17:02
خطاهاتون اکثرا منطقي هستن تا دستوري .
مثلا تو تابع read_user_pass شما فقط دارين کاراکتر [66][100] رو برميگردونين که به احتمال زياد حاوي يه garbage هست . در حالي که قصد شما فکر کنم برگرداندن کل آرايه هست .

DaneshD
03-06-2009, 17:06
کد شمارو باز نویسی کردم البته فقط برای ایده گرفتن شما. کلی اشتباه syntax داشتید مثل if k=0 که باید به صورت if k==0 نوشته میشد. منطق برنامتون هم اشتباه بود. مثلا pass_search دنبال username هم میگشت. به هر حال اصلاحش کردم و درست هم کار میکنه البته با استفاده از struct و pointer ها. کامنت هم گذاشتم که متوجه تغییرات بشید.



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

mahsa1469
03-06-2009, 17:14
از راهنمايي خيلي مفيدتون خييييييييييلي ممنونم
من برنامه همون طور كه گفتين تغييرش دادم شد:

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

مشكل حل شد اما پس از اجراي برنامه توي يك قسمتش گير مي كنه چه جوري برطرفش كنم؟

sin2x=2sinxcosx
03-06-2009, 17:17
کدوم برنامه گير مي کنه ؟ من همين الان برنامه DaneshD رو تست کردم اصلا مشکلي نداره .

mahsa1469
03-06-2009, 17:17
خطاهاتون اکثرا منطقي هستن تا دستوري .
مثلا تو تابع read_user_pass شما فقط دارين کاراکتر [66][100] رو برميگردونين که به احتمال زياد حاوي يه garbage هست . در حالي که قصد شما فکر کنم برگرداندن کل آرايه هست .
چه جوري بنويسم كه درست شه؟؟

mahsa1469
03-06-2009, 17:25
کدوم برنامه گير مي کنه ؟ من همين الان برنامه DaneshD رو تست کردم اصلا مشکلي نداره .
برنامه ي خودم پس از اينكه مشكل برطرف شد
برنامه ي DaneshD رو هم نمي تونم اجرا كنم خطا مي ده؟؟

mahsa1469
03-06-2009, 17:28
مشكل اينجا است كه ما دستورات constو فرم نوشتن
using namespace std;رو تا حالا نداشتيم و نمي تونيم تو برنامه هايي كه مي نويسيم استفاده كنيم اصلا نمي فهمم اون برنامه اي كه دوست عزيزمون لطف كردن رو چه جوري آغاز كردن!

sin2x=2sinxcosx
03-06-2009, 17:30
شما مي تونين از روش دوستمون DaneshD‌ استفاده کنين که يه ساختمان تعريف کردن و username و password رو تو اون گذاشتن و بعد يه struct‌ برگردوندن .

sin2x=2sinxcosx
03-06-2009, 17:34
مشكل اينجا است كه ما دستورات constو فرم نوشتن
using namespace std;رو تا حالا نداشتيم و نمي تونيم تو برنامه هايي كه مي نويسيم استفاده كنيم اصلا نمي فهمم اون برنامه اي كه دوست عزيزمون لطف كردن رو چه جوري آغاز كردن!

شما براي iostream يه h. بذارين و using namespace std رو هم حذف کنين .
ايشون سعي کردن تا حد ممکن برنامه رو استاندارد بنويسن . شما اگه نمي خواين از const استفاده کنين مي تونين اون اعلان هاي const رو حذف کنين و هر جا تو برنامه uname_len و pname_len ديدين بجاش 33 بذارين .

mahsa1469
03-06-2009, 17:34
شما مي تونين از روش دوستمون DaneshD‌ استفاده کنين که يه ساختمان تعريف کردن و username و password رو تو اون گذاشتن و بعد يه struct‌ برگردوندن .
مشكل هم همينجاست ما نمي تونيم از اين شيوه اسفاده كنيم راستش رو بخوايد اولين باره اسم تعريف ساختمان رو شنيدم!!

فاطـمه
03-06-2009, 17:36
بچه ها با یه تغییرات کوچولو تو کدشون فک کنم بشه بدون pointer و struct و اینام نوشتا

mahsa1469
03-06-2009, 17:53
بچه ها با یه تغییرات کوچولو تو کدشون فک کنم بشه بدون pointer و struct و اینام نوشتا
بايد بشه و گرنه استادمون اين تمرين رو بهمون نمي داد :41:اگه مي تونيد كمكم كنيد

mahsa1469
22-06-2009, 14:13
سلام دوستان من این برنامه رو به این ترتیب تغیرش دادم اجرا می شه ولی نتیجه ی مطلوب رو نمی ده>

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