PDA

نسخه کامل مشاهده نسخه کامل : مشکل کوچک یک تازه کار



arman_linkin
14-03-2008, 16:04
سلام دوستان
من تازه چند روزه که دارم C پلاس پلاس یاد می گیرم.
یک برنامه ساده نوشتم برای اینکه نمره قبولی یا ردی 10 دانش آموز را بگیرد به طوری که 1 به معنی قبول شده و 2 به معنی رد شده در امتحان است.تا اینجا مشکلی پیش نیامد.
بعد خواستم کاری کنم که اگه کاربر عددی غیر از یک یا دو را بزند اخطار بدهد و از اون سوال کند که مایل به ادامه هست یا نه . اگر y را زد دوباره ادامه کار را سر بگیرد و اگر n را زد از برنامه خارج شود.
ولی وقتی run می کنمش برنامه توی یک حلقه بی پایان می افتد و بعد از 10 بار وارد کردن 1 یا 2 دوباره شروع به دریافت نمره می کند.
لطفا بگید مشکل از کجاست.
سورس برنامه قبل از اضافه کردن ویژگی تشخیص عدد غیر از 1 و 2 که درست کار میکند:

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سورس بعد از اضافه کردن این ویژگی که درست کار نمی کند:


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

pooyar
14-03-2008, 16:12
while(ch='y');


به نظرم ( یعنی قطعا! ) این شرط رو اشتباه به جای == یک علامت مساوی گذاشتی.

arman_linkin
17-03-2008, 00:17
سلام
ممنون
ولی درست نشد.
من اون دستور انتساب رو به == تغییر دادم ولی مشکل کماکان هست.
به نظرتون ایراد از کجاست؟
کد اصلاح شده:


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

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

pooyar
17-03-2008, 21:46
شرط رو به while ch == 'n' تغییر بده.

sherlockholmz
18-03-2008, 09:19
سلام

برنامه شما چند ايراد كوچك دارد.اولا"محل پرانتزها اشتباه است .ثانيا"محل سوال تكرار نيز صحيح نيست.ثالثا"يادتان باشد هرگاه سوال تكرار داشتيد بايد تمام متغيرها رااينشيالايز كنيد يعني به مقدار اوليه برگردانيد.اينها مهمترين ايراد برنامه شما بود.در ضمن اشكالات كوچك ديگري نيز دارد، مثلا" با وارد كردن عددي اشتباه (بزرگتر از 2)پس از اعلام خطا موقعيت تصحيح وجود نداردو...من با اجازه شما تغييراتي در برنامه اتان دادم وباز نويسي كردم.بررسي آن خالي از فايده نيست


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

موفق باشيد

arman_linkin
19-03-2008, 21:11
سلام
دوست عزیز
ممنون از برنامه تون ولی این برنامه یک کم با مال من فرق دارد.
در واقع برنامه شما تا وقتی ch=='y' است از کاربر عدد می گیرد.
ولی من می خواهم که عمل گرفتن عدد از کاربر که شامل 10 مرحله است فقط یک بار انجام شود و اگر در بین آن کاربر عددی غیر از 1 و 2 وارد کرد پیغام wrong pass بدهد و از او بپرسد آیا مایل به ادامه است یا نه .اگر فرد n را وارد کرد عدد گرفتن را متوقف کرده و متغیر pass و fail را چاپ کند هر چند مجموع آنها 10 نباشد.
و اگر فرد y را وارد کرد یه عدد گرفتن ادامه دهد(تا وقتی i صفر شود)

من فکر می کنم مشکل برنامه من این هست که تا وقتی کاربر عددی غیر از 1 و 2 وارد نکرده برنامه درست کار می کند.وقتی عددی غیر از 1 و 2 وارد کند کامپایلر وارد قسمت else می شود که پیغام ها را چاپ کرده و متغیر ch را می گیرد.
ولی مشکل اینجاست که اگر ch=='n' بشود برنامه در این حالت باید از حلقه for خارج شود ولی این کار انجام نمی شود.در نتیجه برنامه به گرفتن عدد ادامه می دهد!
×××من همین الان تونستم درستش کنم ×××
ولی مشکل این است که اولا یک کم پیچیده شد.
دوما فکر کنم استفاده از دستور break در حلقه برخلاف اصول برنامه نویسی ساخت یافته باشد.
اینم کدش :

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


حالا خواهشم این است که این را یک جوری تغییر بدهید که از break استفاده نکرده باشد.
مرسی