تفاوت Read و ReadLine در سیشارپ
تفاوت Read و ReadLine در سیشارپ این است که Read فقط یک کاراکتر را می خواند، ReadLine کل یک خط را تا فشردن Enter دریافت می کند
13 مهر 1405
لینک کوتاه
تفاوت Read و ReadLine در سی شارپ چیست؟
اگر بهتازگی یادگیری زبان برنامهنویسی #C را شروع کرده باشید، احتمالاً با متدهای ()Console.Read و ()Console.ReadLine مواجه شدهاید.هر دو متد برای دریافت اطلاعات از ورودی استاندارد، معمولاً صفحهکلید، استفاده میشوند؛ اما نحوه عملکرد، نوع مقدار بازگشتی و کاربرد آنها با یکدیگر تفاوت دارد.
شناخت تفاوت Read و ReadLine در سی شارپ یکی از مفاهیم پایهای و مهم برای برنامهنویسی کنسولی است.
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
Console.Read در سی شارپ چیست؟
متد ()Console.Read برای خواندن یک کاراکتر از جریان ورودی استاندارد استفاده میشود.نکته مهم این است که مقدار بازگشتی آن از نوع int است، نه char.
ساختار کلی آن به شکل زیر است:
int value = ()Console.Read;
برای مثال:Console.Write("یک کاراکتر وارد کنید: ");
int value = ()Console.Read;
Console.WriteLine(value);
اگر کاربر حرف A را وارد کند، مقدار عددی مربوط به آن کاراکتر دریافت میشود.
دلیل این موضوع این است که ()Console.Read مقدار کد کاراکتر خواندهشده را به صورت int برمیگرداند.
طبق مستندات رسمی مایکروسافت، ()Console.Read کاراکتر بعدی موجود در جریان ورودی استاندارد را میخواند و در صورت پایان ورودی، مقدار -1 را برمیگرداند.
همچنین این متد تا زمانی که ورودی دریافت شود، میتواند منتظر بماند.
تبدیل خروجی Read به char در سی شارپ
اگر بخواهیم کاراکتر خواندهشده را به صورت char داشته باشیم، میتوانیم مقدار بازگشتی را تبدیل کنیم:int value = ()Console.Read;
char character = (char)value;
Console.WriteLine(character);
در این حالت اگر کاربر A را وارد کند، متغیر character حاوی کاراکتر A خواهد بود.
Console.ReadLine در سی شارپ چیست؟
متد ()Console.ReadLine برای خواندن یک خط کامل از ورودی استفاده میشود.این متد برخلاف ()Read، یک رشته (string) برمیگرداند.
مثال:
Console.Write("نام خود را وارد کنید: ");
string name = ()Console.ReadLine;
Console.WriteLine("سلام " + name);
اگر کاربر عبارت زیر را وارد کند:
Ali Ahmadi
کل عبارت در متغیر name قرار میگیرد.مستندات رسمی NET. نیز ()ReadLine را متدی معرفی میکند که خط بعدی کاراکترها را از جریان ورودی استاندارد میخواند.
هنگامی که ورودی از صفحهکلید باشد، این متد تا فشردن کلید Enter منتظر میماند.
تفاوت Read و ReadLine در سی شارپ
مهمترین تفاوت این دو متد در مقدار و نوع دادهای است که دریافت میکنند.| ویژگی | ()Console.Read | ()Console.ReadLine |
| مقدار خواندهشده | یک کاراکتر | یک خط کامل |
| نوع خروجی | int | string |
| پایان دریافت ورودی | پس از خواندن کاراکتر | با پایان خط |
| کاربرد معمول | پردازش کاراکترها | دریافت متن و ورودی کاربر |
| نیاز به تبدیل برای متن | معمولاً بله | خیر |
برای مثال:
int value = ()Console.Read;
در اینجا مقدار بازگشتی int است.اما:
string text = ()Console.ReadLine;
در اینجا مقدار بازگشتی string است.بنابراین نباید تصور کنیم ()Console.Read برای دریافت عدد و ()Console.ReadLine برای دریافت رشته ساخته شده است.
این تصور اشتباه یکی از رایجترین اشتباهات در ابتدای یادگیری #C است.
آیا Console.Read برای خواندن عدد استفاده میشود؟
به صورت مستقیم، خیر.فرض کنید کاربر عدد 25 را وارد کند:
25
اگر بنویسیم:
int number = ()Console.Read;
برنامه عدد 25 را به عنوان یک مقدار عددی کامل دریافت نمیکند.()Read فقط کاراکتر بعدی جریان ورودی را میخواند.
اگر هدف دریافت یک عدد کامل است، روش رایج استفاده از ()ReadLine و سپس تبدیل رشته به عدد است:
int number = int.Parse(()Console.ReadLine);
Console.WriteLine(number);
در این مثال، ()ReadLine مقدار 25 را به صورت رشته دریافت میکند و ()int.Parse آن را به عدد صحیح تبدیل میکند.
دریافت عدد با TryParse
اگر احتمال میدهید کاربر ورودی نامعتبر وارد کند، استفاده از ()int.TryParse انتخاب مطمئنتری است:Console.Write("سن خود را وارد کنید: ");
if (int.TryParse(()Console.ReadLine, out int age))
{
Console.WriteLine($"سن شما {age} است.");
}
else
{
Console.WriteLine("لطفاً یک عدد معتبر وارد کنید.");
}
در این روش، اگر کاربر به جای عدد عبارتی مانند Ali وارد کند، برنامه با خطای تبدیل متوقف نمیشود.
یک مثال ساده برای درک تفاوت Read و ReadLine
فرض کنید کاربر ورودی زیر را وارد میکند:Hello
اگر از ()Read استفاده کنیم:
int value = ()Console.Read;
Console.WriteLine(value);
تنها اولین کاراکتر، یعنی H، خوانده میشود و مقدار عددی آن در متغیر value قرار میگیرد.
اما اگر بنویسیم:
string value = ()Console.ReadLine;
Console.WriteLine(value);
کل عبارت:
Hello
در متغیر value قرار خواهد گرفت.
بنابراین میتوان گفت:
Read برای خواندن کاراکتر از جریان ورودی است، در حالی که ReadLine برای خواندن یک خط کامل از ورودی طراحی شده است.
مشکل ترکیب Read و ReadLine در سی شارپ
یکی از مشکلات رایج برای افراد تازهکار، استفاده پشت سر هم از ()Read و ()ReadLine است.برای مثال:
int value = ()Console.Read;
string text = ()Console.ReadLine;
فرض کنید کاربر وارد کند:
ABC
()Read اولین کاراکتر یعنی A را دریافت میکند.
سایر کاراکترها و پایان خط همچنان در جریان ورودی باقی میمانند.
در نتیجه، ()ReadLine لزوماً آن چیزی را که برنامهنویس انتظار دارد دریافت نمیکند؛ بلکه باقیمانده خط را میخواند.
به همین دلیل اگر به صورت مشخص به خواندن کاراکتر نیاز ندارید، استفاده از ()ReadLine برای دریافت ورودی کاربر معمولاً سادهتر و قابل پیشبینیتر است.
مثال ترکیبی Read و ReadLine
اگر واقعاً بخواهیم ابتدا یک کاراکتر و سپس یک خط کامل دریافت کنیم، میتوانیم باقیمانده خط را مدیریت کنیم:Console.Write("یک حرف وارد کنید: ");
char letter = (char)()Console.Read;
()Console.ReadLine;
Console.Write("نام خود را وارد کنید: ");
string name = ()Console.ReadLine;
Console.WriteLine($"حرف: {letter}");
Console.WriteLine($"نام: {name}");
در این مثال، ()Read یک کاراکتر را میخواند و ()ReadLine بعدی برای مصرف باقیمانده همان خط استفاده شده است.
تفاوت Read، ReadLine و ReadKey
در #C متد دیگری به نام ()Console.ReadKey نیز وجود دارد که ممکن است با این دو اشتباه شود.به طور خلاصه:
()Console.Read
↓
خواندن یک کاراکتر از جریان ورودی
()Console.ReadLine
↓
خواندن یک خط کامل از جریان ورودی
Console.ReadKey()
↓
دریافت یک کلید فشردهشده از صفحهکلید
برای مثال:
Console.WriteLine("یک کلید فشار دهید...");
Console.ReadKey();
در این حالت معمولاً لازم نیست کاربر Enter را فشار دهد.
چه زمانی از ReadLine استفاده کنیم؟
در بیشتر برنامههای کنسولی، ()ReadLine انتخاب مناسبتری برای دریافت اطلاعات از کاربر است.مثلاً برای دریافت:
- نام
- نام خانوادگی
- ایمیل
- شماره تلفن
- جمله
- آدرس
- عدد به صورت متنی
- اطلاعات چندکلمهای
مثال:
Console.Write("نام: ");
string name = ()Console.ReadLine;
Console.Write("نام خانوادگی: ");
string family = ()Console.ReadLine;
Console.WriteLine($"{name} {family}");
چه زمانی از Read استفاده کنیم؟
()Console.Read زمانی کاربرد دارد که بخواهید ورودی را کاراکتر به کاراکتر پردازش کنید.برای مثال:
Console.Write("یک کاراکتر وارد کنید: ");
char c = (char)()Console.Read;
if (c == 'A')
{
Console.WriteLine("حرف A وارد شد.");
}
با این حال، مستندات رسمی مایکروسافت نیز اشاره میکنند که در بسیاری از سناریوها ()ReadLine یا ترکیب KeyAvailable و ()ReadKey میتواند گزینه مناسبتری نسبت به ()Read باشد.
نکته مهم درباره مقدار null در ReadLine
در نسخههای جدید NET. ، امضای ()ReadLine میتواند مقدار null را نیز برگرداند؛ برای مثال زمانی که دیگر خطی برای خواندن از ورودی وجود نداشته باشد.در برنامههای معمولی که کاربر مستقیماً از صفحهکلید ورودی میدهد، معمولاً با این موضوع مواجه نمیشوید، اما هنگام کار با ورودی Redirect شده یا فایلها دانستن آن اهمیت دارد.
جمعبندی
تفاوت Read و ReadLine در سی شارپ را میتوان در یک جمله خلاصه کرد:()Console.Read یک کاراکتر بعدی از جریان ورودی را میخواند و آن را به صورت int برمیگرداند، در حالی که ()Console.ReadLine یک خط کامل را میخواند و آن را به صورت string برمیگرداند.
اگر قصد دریافت متن از کاربر را دارید، معمولاً از:
string input = ()Console.ReadLine;
استفاده میکنید.اگر قصد دریافت یک کاراکتر از جریان ورودی را دارید:
char input = (char)()Console.Read;
و اگر هدف دریافت یک عدد است، میتوانید از ()ReadLine همراه با تبدیل مناسب استفاده کنید:int number = int.Parse(()Console.ReadLine);
یا برای کنترل ورودی نامعتبر:int.TryParse(()Console.ReadLine, out int number);
بنابراین مهمترین نکته این است که Read به معنی «خواندن عدد» و ReadLine به معنی «خواندن رشته» نیست.تفاوت اصلی آنها به مقدار ورودی و نحوه خواندن از جریان استاندارد مربوط میشود.
سوالات متداول
آیا ReadLine در #C فقط برای رشته استفاده میشود؟
()ReadLine مقدار ورودی را به شکل string برمیگرداند.اگر به عدد نیاز داشته باشید، باید آن رشته را با روشهایی مانند ()int.Parse یا ()int.TryParse به نوع عددی تبدیل کنید.
آیا Console.Read عدد را میخواند؟
خیر. ()Console.Read یک کاراکتر را از جریان ورودی میخواند و مقدار بازگشتی آن int است.بنابراین نباید از آن به عنوان روش مستقیم دریافت یک عدد چندرقمی استفاده کرد.
برای گرفتن ورودی کاربر در #C کدام بهتر است؟
برای اکثر برنامههای کنسولی که نیاز به دریافت یک خط متن دارند، ()Console.ReadLine انتخاب سادهتری است.()Console.Read بیشتر برای سناریوهایی مناسب است که نیاز به خواندن کاراکترها از جریان ورودی دارید.




کاربران ما
شما هم نظرتون با ما دریاره “تفاوت Read و ReadLine در سیشارپ” اشتراک بزارید
برای ارسال نظر لطفا ورود یا ثبت نام کنید