PDA

View Full Version : سوال: سوال



علی چمران
چهارشنبه 06 فروردین 1399, 09:48 صبح
سلام چرا این برنامه اجرا نمیشه خط 6 ارور no match oprator میده
<include <iostream>#
;using namespace std
()int main
;{enum Answer{NO=0,FALSE=0,YES=1,TRUE=1,OK=1
;Answer answer
;cin>>answer
";if (answer==true) cout << "you said OK

the king
چهارشنبه 06 فروردین 1399, 11:18 صبح
سلام چرا این برنامه اجرا نمیشه خط 6 ارور no match oprator میده
<include <iostream>#
;using namespace std
()int main
;{enum Answer{NO=0,FALSE=0,YES=1,TRUE=1,OK=1
;Answer answer
;cin>>answer
";if (answer==true) cout << "you said OK

اگه در هنگام درج کد برنامه نویسی در پست ها از تگ هایی که مخصوص قرار دادن کد (مثلا ++C) در ویرایشگر وجود دارد استفاده کنید به خوانایی آن کمک زیادی می کنید.
enum ای که به نام Answer تعریف می کنید برای std::cin ناشناخته است، به همین جهت cin نمیدونه چطور باید عملگر << را برای انتقال مقدار به Answer بکار ببرد.
برای رفع این مشکل فرضا می توانید یک متغیر int را واسطه کنید :

#include <iostream>
using namespace std;
int main() {
enum Answer {NO=0,FALSE=0,YES=1,TRUE=1,OK=1};
Answer answer;
int n;
cin >> n;
answer = (Answer)n;
if (answer==true)
cout << "you said OK";
return 0;
}


یا برای انتقال مقدار از cin به Answer قبلا عملگر << رو تعریف کنید تا cin بدونه که چطور باید مقدار به Answer انتقال بده :

#include <iostream>
using namespace std;
enum Answer {NO=0,FALSE=0,YES=1,TRUE=1,OK=1};
istream& operator >>(istream &input, Answer &a)
{
int n;
input >> n;
a = (Answer)n;
return input;
}
int main() {
Answer answer;
cin >> answer;
if (answer==true)
cout << "you said OK";
return 0;
}

sd702004
چهارشنبه 06 فروردین 1399, 11:45 صبح
enum این اوپراتور رو نداره و این ارور بهمین خاطره. در حالت کلی از تعریف operator میشه استفاده کرد (مثل کاری که دوست مون انجام دادن) اما اگر قراره از کاربر مقادیر متنی نظیر NO و YES گرفته بشه روش بهتر استفاده از map هستش. مثال:
#include <iostream>
#include <map>
#include <string>
using namespace std;

int main(){
map<string, bool> answer_list = { {"NO",false}, {"FALSE",false}, {"TRUE",true}, {"YES", true} };
string answer;
cin >> answer;
if (answer_list.at(answer)) cout << "you said OK";
}
البته در این کد چنان چه جوابی که از کاربر دریافت میشه غیر از اون چهار موردی باشه که تعیین کردیم باعث میشه که اجرای برنامه با ارور روبرو بشه و بنابراین در صورت نیاز میشه این کار رو انجام داد:
#include <iostream>
#include <map>
#include <string>
using namespace std;

int main(){
map<string, bool> answer_list = { {"NO",false}, {"FALSE",false}, {"TRUE",true}, {"YES", true} };
string answer;
cin >> answer;
try{
if (answer_list.at(answer)) cout << "you said OK";
} catch (out_of_range){
cout << "invalid answer";
return 1;
}
}
حتی میتونین جواب دریافتی از کاربر رو ابتدا به حروف بزرگ تبدیل کنید تا کوچک و بزرگ بودن حروف عملکرد متفاوتی نداشته باشه