PDA

View Full Version : مقدار default در دستور switch (برنامه من در هر حال دستور default را اجرا می کند!!)



deopen
سه شنبه 18 تیر 1387, 20:08 عصر
while ((cc=cin.get())!=EOF) {
switch ( cc )
{
case 'A':
case 'a':
a++;
break;
case 'B':
case 'b':
b++;
break;
case 'C':
case 'c':
c++;
break;
default:
cout << "loooooool" << endl;
break;
}
}
این برنامه رو ببنید... این برنامه یک کارکتر رو می خونه بعد اگه با یکی از case ها مطابق بود دستورات آن case اجرا میشه . اگه هیچ مطابقتی با case ها وجود نداشت آنگاه باید دستور default اجرا بشه!در صورتی که در هر حال این دستور اجرا میشه:ناراحت: .من مبتدی هستم لطفا هر جا که لازم هست واسم توضیح بدین .مرسی.

kitten
سه شنبه 18 تیر 1387, 20:16 عصر
سلام
به نظر مي ياد مشكلي نداشته باشه اما بهتره كد را كامل بزاري و تو تگ كد هم بزاري كه بشه بهتر خوندش شايد بتونم كمكت كنم

kitten
سه شنبه 18 تیر 1387, 20:19 عصر
و يه سوال ديگه در برنامه ات قبل از اين تكه كد
ايا cin ديگه اي داشته اي يا نه؟

deopen
سه شنبه 18 تیر 1387, 20:37 عصر
#include<iostream>
using std::cout;
using std::endl;
using std::cin;
#include "H1.H"
void abc::con() {
a=0; b=0; c=0;
cout<<"ENTER THE A or B or C or EOF: ";
int cc;
while ((cc=cin.get())!=EOF) {
switch ( cc )
{
case 'A':
case 'a':
a++;
break;
case 'B':
case 'b':
b++;
break;
case 'C':
case 'c':
c++;
break;
default:
cout << "loooooool" << endl;
break;
}
}
cout<<a<<"\n"<<b<<"\n"<<c<<endl;
}
int main() {
abc lol;
lol.con();
}

اینم کل برنامم فایل هدرش که دیگه لازم نیست؟؟!! در ضمن این برنامه رو فقط واسه اینکه با Switch آشنا بشم نوشتم

kitten
سه شنبه 18 تیر 1387, 20:46 عصر
خوب يه كم كار خودتا سخت كردي چرا لقمه را تو دهنت مي پيچوني
اين را ببين

#include<iostream>
using std::cout;
using std::endl;
using std::cin;
int main() {
cout<<"ENTER THE A or B or C or EOF: "<<endl;
char kitten;
while (kitten != EOf) {
cin>>kitten;
switch(kitten) {
case 'A':
case 'a':
a++;
break;
case 'B':
case 'b':
b++;
break;
case 'C':
case 'c':
c++;
break;
default:
cout << "loooooool" << endl;
break;
}
}
cout<<a<<"\n"<<b<<"\n"<<c<<endl;
return 0;
}
من چكش نكردم اما 90 درصد درسته

deopen
سه شنبه 18 تیر 1387, 20:56 عصر
class abc {
public:
void con();
private:
int a;
int b;
int c;
};

این هدرشه. به متغیرایه a b c گیر میده! نمیشه int باشه؟! مشکل کجاست؟؟

kitten
سه شنبه 18 تیر 1387, 21:13 عصر
درست نمي دونم اما چرا متغير ها را در قسمت پرايويت تعريف كردي تو قسمت پابليك تعريف كن ببين چي ميشه

deopen
سه شنبه 18 تیر 1387, 21:24 عصر
#include<iostream>
using std::cout;
using std::endl;
using std::cin;
#include "H1.H"
void abc::con() {
a=0; b=0; c=0;
cout<<"ENTER THE A or B or C or EOF: ";
char cc;
while (cc!=EOF) {
cin>>cc;
switch ( cc )
{
case 'A':
case 'a':
a++;
break;
case 'B':
case 'b':
b++;
break;
case 'C':
case 'c':
c++;
break;
default:
cout << "loooooool" << endl;
break;
}
cout<<a<<"\n"<<b<<"\n"<<c<<endl;
}
}
int main() {
abc lol;
lol.con();
}

اوه!یه اشتباه کرده بودم... الان همونجور که گفتی 90% درسته تصحیحش کردم اما منجر به حلقه بینهایت میشه و هر چقدر EOF رو که ctrl+z هست می زنم از حلقه خارج نمیشه!

deopen
سه شنبه 18 تیر 1387, 21:27 عصر
راستی public تعریفشون کردم اما هیچ فرقی نکرد.

kitten
سه شنبه 18 تیر 1387, 21:27 عصر
خوب اين قسمت از برنامه را اين طوري تغيير بده ببين چي مي شه
راستي دستم هم درد نكنه
:قهقهه:

default:
cout << "loooooool" << endl;
continue;
يا شايد اگه break را برداري درست بشه
خيلي وقته كار نكردم
برنامه نويسي هم كه خودت مي دوني از ذهن مي پره

deopen
سه شنبه 18 تیر 1387, 21:35 عصر
خیلی خیلی خیلی دستت درد نکنه ببخشید دیر تشکر کردم من خیلی حواسپرتم.
بازم فرقی نکرد چرا اینجوریه؟؟ چرا کار نمیکنه؟!!

kitten
سه شنبه 18 تیر 1387, 21:44 عصر
ببين عزيز
بهتره كه حلقه ات را با do... while بنويسي
اين طوري احتمالا مشكلت حل مي شه
ببين چي مي شه

deopen
سه شنبه 18 تیر 1387, 21:46 عصر
قبول دارم کار نکنی بدجوری از ذهن میپره.من که تازه cpp رو شروع کردم.نمیدونم چیکار کنم؟!!

deopen
سه شنبه 18 تیر 1387, 21:51 عصر
با do..while هم نوشتم فرقی نکرد :ناراحت: . سریع جواب میدیا... خدایی دستت درد نکنه! فک کردم چند روز طول میکشه تا کسی جوابمو بده!

deopen
سه شنبه 18 تیر 1387, 23:48 عصر
#include<iostream>
using std::cout;
using std::endl;
using std::cin;
#include "H1.H"
void abc::con() {
a=0; b=0; c=0;
cout<<"ENTER THE A or B or C or EOF: ";
char cc;
while ((cc=cin.get())!=EOF){
switch ( cc )
{
case 'A':
case 'a':
a++;
break;
case 'B':
case 'b':
b++;
break;
case 'C':
case 'c':
c++;
break;
//*****************************************
//////MY PROBLEM!!!!!!!!!!!!!!!!!!///=====>
case '\n':
case '\t':
case ' ' :
break;
//*****************************************
//<===MY PROBLEM___________________________
default:
cout << "loooooool" << endl;
break;
}
// cout<<"\n"<<a<<" & "<<b<<" & "<<c<<endl; <<===== 2bar ejra mishe
//halqe ba harbar enter zadan ejra mishe,chon cin.get() 1 charecter
//mikhad hata ba'd az zadane a va enter dobar barname ejar mishe yek
//a ro migire va yek /n raaaa .khodamam nafahmidam khodam chi goftam!!!!!
}
cout<<"\n"<<a<<" & "<<b<<" & "<<c<<endl;
}
int main() {
abc lol;
lol.con();
}

درست شد!! مشکل اینجا بود که من نفهمیدم با هر بار اینتر زدن 2 کارکتر خونده میشه یکی که کارکتر a که مطابق یکی از caseها بود یکی کارکتر /n که case واسش در نظر نگرفته بودم!همینطور واسه کارکتر tab یا /t و کارکتر فاسله هیچ case در نظر نگرفته بودم!حلقه اول دستور مربوط به case مثلا a رو اجرا میکرد بعد چون واسه کارکتر سطر جدید یا همون /n هیچ case پیدا نمی کرد دستور default اجرا می شد!
آخیش!!!!!!!!!!!!!