در این مقاله قصد داریم یک ماشین حساب دارای ۴ عمل اصلی با مفاهیمی که تا کنون یاد گرفتهایم بنویسیم و با switch-case در هم آشنا شویم.
#include <iostream>
using namespace std;
int main() {
double a, b;
char op;
while (true) {
cout << "Enter the operator ";
cin >> op;
if (op == 'e' || op == 'q') {
break;
}
cout << "Enter the first number ";
cin >> a;
cout << "Enter the second number ";
cin >> b;
switch (op) {
case '+':
case 'a':
cout << a + b << endl;
break;
case '-':
case 's':
cout << a - b << endl;
break;
case '*':
case 'm':
cout << a * b << endl;
break;
case '/':
case 'd':
cout << a / b << endl;
break;
default:
cout << "Sorry, this operator is not supported" << endl;
break;
}
}
}
Enter the operator +
Enter the first number 10.5
Enter the second number 3.5
14
Enter the operator +
Enter the first number 38.3
Enter the second number 3.7
42
بر اساس مفاهیمی که تا کنون با آنها آشنا شدیم میتوانیم یک برنامه بنویسیم که دو متغیر double
به عنوان اعداد دو طرف عملیات و یک متغیر از نوع char
که خود عملیات (+ – * /) را نشان میدهد را از کاربر دریافت کند.
#include <iostream>
using namespace std;
int main() {
double a, b;
char op;
cout << "Enter the operator ";
cin >> op;
cout << "Enter the first number ";
cin >> a;
cout << "Enter the second number ";
cin >> b;
}
حالا میتوانیم از شرط ها استفاده کنیم تا اگر کاربر به طور مثال عملیات جمع را وارد کرده به او خروجی مناسب را برگردانیم و پرینت کنیم:
if (op == '+') {
cout << a + b << endl;
}
دقت کنید که کارکتر + بین دو ‘ یا single quotation قرار گرفته که نشان میدهد یک کارکتر است. (از ” برای string ها و از ‘ برای کارکترها استفاده میکنیم.)
if (op == '+') {
cout << a + b << endl;
} else if (op == '-') {
cout << a - b << endl;
} else if (op == '*') {
cout << a * b << endl;
} else if (op == '/') {
cout << a / b << endl;
}
پس کد بالا با استفاده از if که قبلا با آن آشنا شده بودیم ۴ عمل اصلی را بررسی و اجرا میکند. اما برای بررسی حالات و مقادیر ممکن برای یک متغیر یک ساختار و syntax مجزا در زبان وجود دارد به نام سوییچ که به شکل زیر نوشته میشود.
switch (op) {
case '+':
cout << a + b << endl;
break;
case '-':
cout << a - b << endl;
break;
case '*':
cout << a * b << endl;
break;
case '/':
cout << a / b << endl;
break;
}
در پرانتز switch
متغیری که میخواهیم حالات یا case
های مختلف آن را بررسی کنیم را قرار میدهیم و درون سوییچ case
های مختلف با مقادیری که میخواهیم قرار میدهیم پس فقط زمانی که قصد بررسی برابر بودن مقادیری با یک متغیر را داریم میتوانیم از سوییچ استفاده کنیم.
آخر هر case
هم با break
بسته میشود تا مشخص کنیم که قصد داشتیم این case تا این خط اجرا شود؛ درواقع اگر این break
قرار داده نشود هر case
که درست باشد تا نزدیک ترین break
اجرا میشود البته میتوان از این مساله استفاده کرد و مثلا برای هر بخش دو case
تعریف کرد.
switch (op) {
case '+':
case 'a':
cout << a + b << endl;
break;
case '-':
case 's':
cout << a - b << endl;
break;
case '*':
case 'm':
cout << a * b << endl;
break;
case '/':
case 'd':
cout << a / b << endl;
break;
}
در این کد اگر کاربر + یا a را برای add وارد کند برنامه عملکرد یکسانی خواهد داشت.
میتوانیم یک حالت default
هم در نظر بگیریم یعنی وقتی که هیچکدام از case
ها اتفاق نیفتاده به نوعی مشابه else
آخری که در شرطها داشتیم.
switch (op) {
case '+':
case 'a':
cout << a + b << endl;
break;
case '-':
case 's':
cout << a - b << endl;
break;
case '*':
case 'm':
cout << a * b << endl;
break;
case '/':
case 'd':
cout << a / b << endl;
break;
default:
cout << "Sorry, this operator is not supported" << endl;
break;
}
در این کد اگر کاربر هیچکدام از عملیاتهای تعریف شده را وارد نکند یک پیغام با این موضوع که عملگر وارد شده پشتیبانی نمیشود دریافت میکند.
#include <iostream>
using namespace std;
int main() {
double a, b;
char op;
cout << "Enter the operator ";
cin >> op;
cout << "Enter the first number ";
cin >> a;
cout << "Enter the second number ";
cin >> b;
switch (op) {
case '+':
case 'a':
cout << a + b << endl;
break;
case '-':
case 's':
cout << a - b << endl;
break;
case '*':
case 'm':
cout << a * b << endl;
break;
case '/':
case 'd':
cout << a / b << endl;
break;
default:
cout << "Sorry, this operator is not supported" << endl;
break;
}
}
Enter the operator a
Enter the first number 2
Enter the second number 3
5
قطعه کد بالا کد نهایی است که به درستی کاری که باید را انجام میدهد اما یک مشکل کوچک دارد و آن این است که پس از انجام یک محاسبه بسته میشود و ما معمولا انتظار نداریم پس از این که یک عملیات با ماشین حسابمان انجام دادیم آن خاموش یا بسته شود پس ما هم در برنامهای که مینویسیم میتوانیم از یک حلقه استفاده کنیم تا کد ما برای همیشه ادامه پیدا کند.
برای انجام این کار ما کد را از بخش قبل از دریافت ورودی از کاربر وارد یک حلقه نامتناهی میکنیم که میتواند به صورت
while (true) {
}
یا
for (;;) {
}
نوشته شود. مورد اول که مشخصا یک حلقه است که تا زمانی که مقدار شرط آن درست و برقرار باشد به اجرا ادامه میدهد که چون این مقدار همواره برابر true
یا درست است این حلقه هیچوقت متوقف نمیشود (انگار نوشته باشیم: while (1 == 1)
)
مورد دوم هم که یک for
بدون شرط و initializer و step است، به نوعی قرار دادیاست و هیچ تفاوتی هم با مورد اول ندارد! هر کدام را که بیشتر میپسندید استفاده کنید.
#include <iostream>
using namespace std;
int main() {
double a, b;
char op;
while (true) {
cout << "Enter the operator ";
cin >> op;
cout << "Enter the first number ";
cin >> a;
cout << "Enter the second number ";
cin >> b;
switch (op) {
case '+':
case 'a':
cout << a + b << endl;
break;
case '-':
case 's':
cout << a - b << endl;
break;
case '*':
case 'm':
cout << a * b << endl;
break;
case '/':
case 'd':
cout << a / b << endl;
break;
default:
cout << "Sorry, this operator is not supported" << endl;
break;
}
}
}
اما احتمالا میتوانید حدس بزنید که این کد یک مشکل کوچک دارد؛ اگر یادتان باشد در مقاله قبل در این مورد صحبت کردیم که حلقهها نامتناهی معمولا خوب نیستند و باید از آنها جلوگیری کنیم که راه سادهای هم دارد. همان break
که در سوییچ از آن استفاده کردیم در حلقهها به کمکان میآید تا هر زمان که خواستیم (فارق از شرط خود حلقه) حلقه را بشکانیم و از آن خارج شویم.
میتوانیم وقتی که از کاربر عملیات را میپرسیم چک کنیم اگر عملیات e (برای exit) بود حلقه را بشکانیم و برنامه را تمام کنیم.
#include <iostream>
using namespace std;
int main() {
double a, b;
char op;
while (true) {
cout << "Enter the operator ";
cin >> op;
if (op == 'e') {
break;
}
cout << "Enter the first number ";
cin >> a;
cout << "Enter the second number ";
cin >> b;
switch (op) {
case '+':
case 'a':
cout << a + b << endl;
break;
case '-':
case 's':
cout << a - b << endl;
break;
case '*':
case 'm':
cout << a * b << endl;
break;
case '/':
case 'd':
cout << a / b << endl;
break;
default:
cout << "Sorry, this operator is not supported" << endl;
break;
}
}
}
این برنامه به خوبی کار میکند و کاربر هر زمان که بخواهد میتواند با وارد کردن e به جای عملیات آن را ببندد
اما شاید دیده باشید که بعضی برنامه ها چند کلید را برای انجام یک کار میپذیرند مثلا شاید ما بخواهیم علاوه بر e با کارکتر q (برای quit) هم برنامهمان بسته شود. پس میتوانیم در شرطی که مینویسیم بیان کنیم که اگر مقدار op
کارکتر e یا q است حلقه را بشکان و برنامه را ببند. “یا” در زبان با
||
نمایش داده میشود.
دقت کنید که نمیتوانید بنویسید اگر op
با ‘q’ یا ‘e’ برابر است
if (op == 'e' || 'q') { ❌
}
چرا که کامپیوتر توانایی درک منظور شما از “یا” در این جمله را ندارد و باید هر بار جداگانه بگویید چه شرطی و مقداری را با چه شرط دیگری را میخواهید “یا” کنید.
پس باید بنویسید:
if (op == 'e' || op == 'q') { ✅
}
برنامه نهایی ما به شکل زیر در میآید.
#include <iostream>
using namespace std;
int main() {
double a, b;
char op;
while (true) {
cout << "Enter the operator ";
cin >> op;
if (op == 'e' || op == 'q') {
break;
}
cout << "Enter the first number ";
cin >> a;
cout << "Enter the second number ";
cin >> b;
switch (op) {
case '+':
case 'a':
cout << a + b << endl;
break;
case '-':
case 's':
cout << a - b << endl;
break;
case '*':
case 'm':
cout << a * b << endl;
break;
case '/':
case 'd':
cout << a / b << endl;
break;
default:
cout << "Sorry, this operator is not supported" << endl;
break;
}
}
}
Enter the operator +
Enter the first number 10.5
Enter the second number 3.5
14
Enter the operator +
Enter the first number 38.3
Enter the second number 3.7
42
Enter the operator q
program ends here
در این مقاله در رابطه با اوپراتور or (یا)، break
و سوییچ در زبان سیپلاسپلاس صحبت کردیم و با آنها یک ماشین حساب دارای ۴ عمل اصلی نوشتیم.
#include <iostream>
using namespace std;
int main() {
double a, b;
char op;
while (true) {
cout << "Enter the operator ";
cin >> op;
if (op == 'e' || op == 'q') {
break;
}
cout << "Enter the first number ";
cin >> a;
cout << "Enter the second number ";
cin >> b;
switch (op) {
case '+':
case 'a':
cout << a + b << endl;
break;
case '-':
case 's':
cout << a - b << endl;
break;
case '*':
case 'm':
cout << a * b << endl;
break;
case '/':
case 'd':
cout << a / b << endl;
break;
default:
cout << "Sorry, this operator is not supported" << endl;
break;
}
}
}
Enter the operator +
Enter the first number 10.5
Enter the second number 3.5
14
Enter the operator +
Enter the first number 38.3
Enter the second number 3.7
42
Enter the operator q