الإدخال والإخراج — أساسيات C++
الإدخال والإخراج: cin و cout
cout تكتب إلى الشاشة، و cin تقرأ من لوحة المفاتيح. كلاهما في <iostream>.
cin تقرأ حسب النوع
int age;
cin >> age; // يقرأ رقماً صحيحاً
int x, y;
cin >> x >> y; // قيمتان مفصولتان بمسافة أو سطرعلى عكس input() في Python، cin تحوّل تلقائياً إلى نوع المتغير.
ماذا لو أدخل المستخدم نصاً بدل رقم؟
تفشل القراءة: يبقى المتغير بقيمة 0 (منذ C++11)، وتدخل cin حالة فشل تتجاهل كل قراءة لاحقة. افحص النجاح دائماً:
int age;
if (cin >> age) {
cout << "عمرك " << age << endl;
} else {
cout << "إدخال غير صالح" << endl;
}cin >> age نفسها تُستخدم كشرط: صحيحة إذا نجحت القراءة.
النصوص: cin مقابل getline
string word;
cin >> word; // يقرأ كلمة واحدة فقط (يتوقف عند المسافة)
string line;
getline(cin, line); // يقرأ السطر كاملاً بالمسافاتفخ cin ثم getline
بعد cin >> age يبقى رمز السطر الجديد (Enter) في المخزن، فتقرأه getline فوراً وترجع نصاً فارغاً. الحل:
int age;
string fullName;
cin >> age;
cin.ignore(numeric_limits<streamsize>::max(), '\n'); // تجاهل بقية السطر (يحتاج <limits>)
getline(cin, fullName);تنسيق الإخراج (<iomanip>)
cout << fixed << setprecision(2) << 3.14159; // 3.14
cout << setw(10) << "Name" << setw(5) << 25; // عرض ثابت للأعمدةfixed و setprecision تبقيان مفعّلتين لكل ما يُطبع بعدها.
ملاحظة عن المحرر في Kodax
إذا شغّلت برنامجاً يقرأ بـ cin بدون إدخال، تفشل القراءة فوراً. لذلك تفحص الأمثلة نجاح القراءة وتستخدم قيمة افتراضية.
تمرين
اكتب برنامجاً يقرأ عدد الطلاب ثم درجاتهم واحدة واحدة، ويطبع المتوسط بمنزلتين عشريتين، ويتعامل مع الإدخال غير الرقمي.
#include <iostream>
#include <string>
#include <iomanip> // للتنسيق
using namespace std;
int main() {
// إدخال رقم
int age;
cout << "أدخل عمرك: ";
cin >> age;
cout << "عمرك: " << age << endl;
// إدخال عدة قيم
int x, y;
cout << "أدخل رقمين: ";
cin >> x >> y;
cout << "المجموع: " << x + y << endl;
// إدخال نص (كلمة واحدة)
string firstName;
cout << "أدخل اسمك الأول: ";
cin >> firstName;
// تنظيف buffer قبل getline
cin.ignore();
// إدخال نص كامل (مع مسافات)
string fullName;
cout << "أدخل اسمك الكامل: ";
getline(cin, fullName);
cout << "مرحباً " << fullName << endl;
// تنسيق الأرقام
double pi = 3.14159265359;
cout << fixed << setprecision(2);
cout << "Pi = " << pi << endl; // 3.14
// تنسيق العرض
cout << setw(10) << "Name" << setw(5) << "Age" << endl;
cout << setw(10) << "Ahmed" << setw(5) << 25 << endl;
cout << setw(10) << "Mohammad" << setw(5) << 30 << endl;
return 0;
}اختبر فهمك