به نام خداوند بخشنده و مهربان!

سلام خدمت دوستان عزیز و هموطنان گرامی!

در ادامه محبث آموزش زبان برنامه نویسی c++ به جلسه سوم رسیدیم که اونو براتون قرار دادم! امیدوارم براتون مفید باشه!

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

این جلسه هم قصد دارم باز باهم در این مورد صحبت کنیم .

ایندفعه میخوام در مورد متغیر char صحبت کنم .

مخفف کلمه character هست

اما یک کاراکتر دقیقا چیه ؟

ببینید مثلا حروف الفبا به تنهایی میتونن یه کاراکتر باشن . مثل A,b,C,d

یا حتی اعداد رو هم میشه به عنوان کاراکتر ها معرفی کرد و از حالت عدد صحیح خارجشون کرد .

هرچیزی میتونه یک کاراکتر باشه . شما در زبان های برنامه نویسی میتونید یک نقطه ، یک ویرگول ، یک سیمبول یا حتی یک space رو به صورت کاراکتر در نظر بگیرید . برای تعریف متغیر های char همون قانون همیشگی تعریف متغیرها حاکمه و فرقی نداره .

;  اسم متغیر   نوع متغیر

مثال :

char a ="a";

char number ="1";

char symobl =",";

char space  = " ";

نکته : هرگاه خواستیم نوع داده ای کاراکتر رو مستقیما مقدار دهی کنیم یادمان باشد که حتما بین اون کاراکتر اپستروف ( ‘ ‘ ) بگذارید.

خطای شایع برنامه نویسی :

برای کسانی که تازه برنامه نویسی رو شروع کردند و هنوز خب مفاهیم کاراکتر و عدد صحیح رو متوجه نشدند این رو گوش زد می کنم که

char number ='1';

با

int number=1;

کاملا فرق میکنه . این دو مقوله کاملا جدا از هم هستند .

بیاین باهم یک برنامه بنویسیم تا بهتر این مساله رو درک کنیم :

#include 

using namespace std;

void main(){

  int int_number = 9;

  char char_number = '9';

  int_number = int_number + 1;

  char_number = char_number + 1;

  cout << "your int number after increase is ( " << int_number <<" ) "<< endl;

  cout << "your Char number after increase is ( " << char_number <<" ) "<< endl;

}

سی پلاس پلاس

همون طور که مشاهده میکنید بعد از افزایش متغیر int_number ، سیستم عدد 10 را داره به ما نشون میده اما متغیر char_number داره به ما یه کولن ( : ) رو نشون نمیده . پس حواستون باشه که هیچوقت هیچوقت هیچوقت فکر نکنید که عدد با ‘عدد’ مساویه که الان این موضوع بهتون اثبات شد .

اگه یه کم کنجکاو باشید ممکنه براتون این سوال پیش بیاد حالا چرا بعد از افزایش char_number سیستم به ما کالن رو نشون داد . چرا چیزه دیگه ای مثل کوتیشن رو به ما نشون نداد ؟

در جواب باید بگم که ما در زبان های برنامه نویسی یک بحثی رو داریم به نام کد اسکی ( ASCII code ) (برای مطالعه اسکی اینجا رو ببینید)

اما قضیه این کد اسکی چیه ؟

ببینید دوستان شده شما تا به حال مثلا روی دکمه A کیبوردتون فشار بدید اما عبارت N یا هرچیز غیر معمول دیگه به جای A تو صفحه تون چاپ بشه ؟ یا اینکه مثلا تو کامپیوتر خودتون A رو بزنید A باشه اما تو کامپیوتر دوستتون بلفرض C باشه ( یعنی اینکه دکمه C رو بزنید تا حرف A نمایش داده بشه ) و تو کامپیوتر اون یکی دوستتون مثلا Q باشه

مسلما این طور نیست . شما در هر کجای دنیا بری . پشت هر سیستمی بشینی . فارغ از سیستم عاملی که روی اون سیستم وجود داره وقتی دکمه A رو میزنی دقیقا همون A نمایش داده میشه .

خب چطور این نظم در تمام دنیا برقراره ؟

این به بحث کد اسکی مربوطه . برای یک انسجام و نظم جهانی این جوری گفتند که ما به هر کلید کیبورد و کاراکترهایی که قراره نمایش داده بشه یه عددی رو تعریف کنیم . مثلا بگیم برای حرف A عدد 65 رو بهش نسبت بدیم و برای B 66 رو و ...

حتی بین A , a فرق وجود داره برای a عدد 97 رو در نظر گرفتن.

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

#include 

using namespace std;

void main(){

    char number = 57;

  cout << number << endl;
}
 

سی پلاس پلاس

همون جوری که میبینید داره عدد 9 رو به ما نشون نمیده . اما همچین چیزی برای چی رخ میده ؟

دلیلش همون بحث کد اسکی هست . ما در برنامممون این جور تعریف کردیم که

char number = 57;

cout << number <<endl;< code="">

 

این یعنی چی ؟ این یعنی که کاراکتری رو چاپ کن که مقدار کد اسکیش برابر با 57 هست . کامپایلر نگاه میکنه ( البته کامپایلر هیچ وقت نگاه نمیکنه چون چشم نداره ) کدوم کاراکتر در ASCII برابر 57 ه . میبینه که کاراکتر 9 برابر با 57 تعریف شده و میاد اون رو چاپ میکنه .

حالا کد رو به این صورت تغییر بدید .

#include 

using namespace std;

void main(){

    char number = 57;

number = numebr +1;

  cout << number << endl;

}

سی پلاس پلاس

خب حالا همون طور که مشاهده میکنید و قتی ما متغیر char number را یک واحد افزایش می دهیم یعنی وقتی char number برابر با 60 میشود کالن رو به ما نشان می دهد . یعنی کد اسکی کالن برابر با 60 است .

الان فکر کنم دیگه متوجه شده باشید که چرا میگم 1 با ‘1’ برابر نیست . شما وقتی متغیری از نوع int را 1 واحد افزایش می دهید مقدار اون 1 واحد افزایش پیدا میکند . اما وقتی ‘1’ را افزایش می دهید ‘1’ را یک واحد افزایش پیدا نمیکند بلکه کد اسکی مربوط به ‘1’ یک واحد افزایش پیدا میکند .

برای همین بود که در مثال اول int_number برابر 10 شد اما char_numebr برابر با کالن شد .

اما چگونه بفهمیم که کد اسکی مربوط به هر حرف چه رقمی است ؟

 

#include 

using namespace std;

void main(){

  cout << (int)_getch() << endl;

}

 

شما اگه این کد رو وارد کنید با زدن حرف مورد نظرتون میتونید کد اسکیش رو مشاهده کنید .

خب حالا یه توضیحی برای این کد هم بدم .

اول از همه چیز جدیدی که میبینید #include هست.

وظیفه اش اینه که بیاد ورودی و خروجی رو از کنسول دریافت کنه ( به این محیط سیاهی که باز میشه برنامه رو توش میبیبنم میگن کنسول )

یه نکته ای رو هم بگم تو کتاب ها به iosteream , conio.h و...( هرچیزی که با include شروع میشه ) فایل سرآمد یا هدر فایل میگن . پس اگه به این کلمه خوردید وحشت نکنید . منظورش همیناست.

خب به برنامه برمیگردیم :

در تابع اصلی نوشتم

cout << (int)_getch() << endl;

یعنی کاراکتری رو که داری از کیبورد میگیری مقدار عددیشو را چاپ کن که همون کد اسکیش میشه . بعد از اینکار نشانگر رو به خط بعد ببر.

تابع 

 getch()

 وظیفش اینه که بیاد کاراکتر رو از ورودی دریافت کند . برای اینکه ما بتونیم از این تابع استفاده کنیم باید هدر فایل conio.h رو وارد برناممون کنیم تا برای کامپایلر این تابع معرفی بشه . اگه #include رو در برنامتون ننویسید بعد بیاینgetch() رو بنویسید کامپایلر اروری مبنی بر نشناختن یا معرفی نشدن getch() بهتون میده .

سی پلاس پلاس

 

یه نکته دیگه : من همون جور که جلسه اول گفتم از نسخه 2013 ویژوال استادیو استفاده میکنم ممکنه که نحوه نوشتن بعضی توابعش با بقیه IDE ها فرق داشته باشه . مثلا برای همین getch() نوشتم _getch() که اگه این جوری ننویسم از من خطا میگیره .

اما برای دوستانی که از IDE های دیگه استفاده میکنند میگم : اگه دیدید من برای بعضی توابع این کارو انجام میدهم ( الان این سوال هم واستون پیش اومده که تابع چیه -_- فقط در همین حد بگم که یه زیر برنامه است که عمل خاصی رو انجام میده مثل همین getch() که وظیفش گرفتن کاراکتره.) شما اون آندر لاین ( _ ) قبل اسم تابع را بردارید بعد اسم تابع رو بنویسید . دیگه هر جلسه این موضوع رو نمیگم . پس لطفا این قضیه یادتون بشه.

خوب این قسمت از آموزش هم به پایین رسید! این آموزش از وبسایت ILikePHP بود!

امیدوارم مفید بوده باشه!

فعلا

یا علی مدد...!