C#: المدخلات والمخرجات
1. Console.Write و Console.WriteLine
يُخرج Console.Write النص دون إضافة حرف خط جديد في نهايته، بينما يُضيف Console.WriteLine حرف خط جديد تلقائيًّا.
▶ مثال
Console.Write("Hello");
Console.Write(" ");
Console.WriteLine("World");
Console.WriteLine("Second line");
Hello World
Second line
2. تنسيق العناصر النائبة
استخدم {0} و{1} وما إلى ذلك كعناصر بديلة لإدراج قيم المتغيرات في سلسلة نصية، مع سرد الحجج المقابلة بالترتيب بعد سلسلة التنسيق.
▶ مثال
string name = "Alice";
int age = 25;
Console.WriteLine("Name: {0}, Age: {1}", name, age);
Console.WriteLine("{0} is {1} years old, {0} is a programmer", name, age);
Name: Alice, Age: 25
Alice is 25 years old, Alice is a programmer
3. الاستيفاء في السلاسل
أضف البادئة $ إلى السلسلة، واكتب المتغيرات أو التعبيرات مباشرةً داخل {}. وهذا أسهل في القراءة مقارنة بتنسيق العناصر النائبة.
▶ مثال
string name = "Bob";
int age = 30;
Console.WriteLine($"Name: {name}, Age: {age}");
int x = 10, y = 20;
Console.WriteLine($"Result: {x + y}");
Name: Bob, Age: 30
Result: 30
4. التحكم في المحاذاة
حدد العرض باستخدام فاصلة في العناصر النائبة أو عمليات الاستيفاء: تؤدي القيم الموجبة إلى محاذاة النص إلى اليمين، بينما تؤدي القيم السالبة إلى محاذاة النص إلى اليسار. على سبيل المثال، يتم محاذاة {0,10} إلى اليمين بعرض 10، بينما يتم محاذاة {0,-10} إلى اليسار بعرض 10.
▶ مثال
Console.WriteLine("|{0,10}|", "Right");
Console.WriteLine("|{0,-10}|", "Left");
Console.WriteLine($"|{"InterpR",10}|");
Console.WriteLine($"|{"InterpL",-10}|");
| Right|
|Left |
| InterpR|
|InterpL |
5. التحكم الدقيق
استخدم محددات التنسيق للتحكم في دقة الأرقام: F2 تحتفظ بـ 2 خانات عشرية، وF4 تحتفظ بـ 4 خانات عشرية، وهكذا دواليك.
▶ مثال
double pi = 3.14159265;
Console.WriteLine("{0:F2}", pi);
Console.WriteLine("{0:F4}", pi);
Console.WriteLine($"{pi:F3}");
3.14
3.1416
3.142
6. محددات التنسيق الشائعة
| المُحدد | الاسم | الوصف |
|---|---|---|
C |
العملة | يضيف رمز العملة |
D |
عشري | يملأ العدد الصحيح بالأصفار |
F |
النقطة الثابتة | عدد الخانات العشرية الثابتة |
P |
النسبة المئوية | تُضرب في 100، وتُضاف النسبة المئوية |
X |
سداسي عشري | يحول إلى النظام السداسي العشري |
▶ مثال
int num = 255;
double money = 1234.56;
double ratio = 0.856;
Console.WriteLine($"Currency: {money:C}");
Console.WriteLine($"Decimal: {num:D6}");
Console.WriteLine($"Fixed-point: {money:F1}");
Console.WriteLine($"Percent: {ratio:P1}");
Console.WriteLine($"Hexadecimal: {num:X}");
Currency: ¤1,234.56
Decimal: 000255
Fixed-point: 1234.6
Percent: 85.6%
Hexadecimal: FF
7. استخدام Console.ReadLine لإدخال البيانات
تقوم Console.ReadLine() بقراءة سطر من النص من وحدة التحكم وتعيده كـ string. وتُرجع null عند الوصول إلى نهاية دفق الإدخال.
▶ مثال
Console.WriteLine("Please enter your name:");
string input = Console.ReadLine();
Console.WriteLine($"Hello, {input}!");
Please enter your name:
Charlie
Hello, Charlie!
8. تحويل المدخلات الرقمية
نظرًا لأن Console.ReadLine() تُرجع سلسلة نصية، فاستخدم int.Parse أو int.TryParse أو Convert.ToInt32 لتحويلها إلى رقم.
▶ مثال
string str1 = "42";
int num1 = int.Parse(str1);
int num2 = Convert.ToInt32(str1);
string str2 = "abc";
if (int.TryParse(str2, out int result))
{
Console.WriteLine($"Conversion succeeded: {result}");
}
else
{
Console.WriteLine("Conversion failed, input is not a valid integer");
}
Console.WriteLine($"Parse result: {num1}");
Console.WriteLine($"Convert result: {num2}");
Conversion failed, input is not a valid integer
Parse result: 42
Convert result: 42
9. Console.ReadKey لإدخال مفتاح واحد
تقوم Console.ReadKey() بقراءة ضغطة مفتاح واحدة دون الحاجة إلى الضغط على مفتاح Enter. وتُرجع كائنًا من نوع ConsoleKeyInfo، ويمكن الوصول إلى الحرف عبر KeyChar.
▶ مثال
Console.WriteLine("Press any key to continue...");
ConsoleKeyInfo key = Console.ReadKey();
Console.WriteLine();
Console.WriteLine($"You pressed: {key.KeyChar}");
Press any key to continue...
A
You pressed: A
10. التعبيرات والتنسيق في عملية الاستيفاء
يمكنك كتابة تعبيرات داخل عملية الإقحام {}، كما يمكنك الجمع بين محددات التنسيق والمحاذاة. وتكون صيغة الكتابة {expression,alignment:formatSpecifier}.
▶ مثال
double price = 29.9;
int quantity = 3;
Console.WriteLine($"Unit price: {price:C}, Quantity: {quantity}, Total: {price * quantity:C}");
Console.WriteLine($"|{price,10:C}|");
int hex = 255;
Console.WriteLine($"Hexadecimal: {hex:X4}");
Unit price: ¤29.90, Quantity: 3, Total: ¤89.70
| ¤29.90|
Hexadecimal: 00FF
11. أفضل الممارسات في التنسيق
- يُفضل استخدام «إدراج السلاسل»
$""للحصول على كود أكثر وضوحًا وسهولة في القراءة - استخدم دائمًا
TryParseبدلاً منParseفي المدخلات التي يدخلها المستخدم لتجنب حدوث استثناءات - استخدم عرض محاذاة ثابتًا عند عرض البيانات في شكل جداول
- استخدم محدد التنسيق
Cللمبالغ النقدية وPللنسب المئوية - فصل التنسيقات المعقدة إلى دالات لتقليل التكرار
- استخدم
ReadKeyلإيقاف البرنامج مؤقتًا، وReadLineلقراءة سطر كامل من المدخلات
▶ مثال
string[] names = { "Apple", "Banana", "Orange" };
double[] prices = { 5.5, 3.2, 4.8 };
int[] stocks = { 120, 85, 200 };
Console.WriteLine($"{"Item",8}{"Price",8:C}{"Stock",8}");
Console.WriteLine(new string('-', 24));
for (int i = 0; i < names.Length; i++)
{
Console.WriteLine($"{names[i],8}{prices[i],8:F2}{stocks[i],8}");
}
Console.WriteLine("\nEnter quantity to purchase:");
if (int.TryParse(Console.ReadLine(), out int qty) && qty > 0)
{
double total = prices[0] * qty;
Console.WriteLine($"Total: {total:C}");
}
else
{
Console.WriteLine("Invalid input, please enter a positive integer");
}
Item Price Stock
------------------------
Apple 5.50 120
Banana 3.20 85
Orange 4.80 200
Enter quantity to purchase:
5
Total: ¤27.50
❓ أسئلة شائعة
{{ تُعرض على النحو التالي {، و}} تُعرض على النحو التالي }.📖 ملخص
- لا تضيف الدالة Console.Write سطراً جديداً؛ أما الدالة WriteLine فتضيف سطراً جديداً
- العنصر النائب
{0}والاستيفاء$"{var}"هما طريقتا التنسيق {0,10}يُحاذي النص إلى اليمين،{0,-10}يُحاذي النص إلى اليسار{0:F2}يتحكم في عدد الخانات العشرية- المحددات الشائعة: C للعملة، D للرقم العشري، F للنقطة الثابتة، P للنسبة المئوية، X للرقم السداسي عشري
- تقوم الدالة ReadLine بقراءة سلسلة أحرف؛ استخدم الدوال Parse أو TryParse أو Convert لتحويلها إلى رقم
- تقوم ReadKey بقراءة مفتاح واحد دون الحاجة إلى الضغط على مفتاح Enter
- تدعم التعبيرات الموجودة داخل عمليات الإدراج المحاذاة والتنسيق معًا
📝 تمارين
- اكتب برنامجًا يستخدم تقنية «إدراج القيم في السلاسل» لعرض بطاقة معلومات شخصية تتضمن الاسم والعمر والطول، مع محاذاة كل حقل على حدة
- اكتب آلة حاسبة بسيطة: تقرأ عددين صحيحين وعلامة عملية، وتُخرج النتيجة، وتستخدم TryParse لمعالجة المدخلات
- اكتب برنامجًا يعرض 5 منتجات في شكل جدول يتضمن الاسم، وسعر الوحدة (بتنسيق F2)، والمخزون، مع استخدام عرض عمود ثابت يبلغ 10
- اكتب برنامجًا يقرأ عددًا صحيحًا ويعرضه بالصيغة العشرية (D8)، والسداسية العشرية (X)، والنسبة المئوية (P)
- اكتب برنامجًا يستخدم Console.ReadKey لاختيار الخيارات من القائمة: اضغط على 1 لعرض الوقت، واضغط على 2 للخروج