C++ Input Validation

در C++، Input Validation (اعتبارسنجی ورودی) به معنای بررسی داده‌های وارد شده توسط کاربر قبل از استفاده در برنامه است. این کار باعث جلوگیری از خطاهای زمان اجرا، ورود داده‌های نادرست و رفتار غیرمنتظره برنامه می‌شود.

🔹 1️⃣ بررسی نوع داده ورودی

هنگام استفاده از cin، اگر کاربر داده‌ای با نوع اشتباه وارد کند، cin وارد حالت خطا (fail state) می‌شود.

مثال:

#include <iostream> using namespace std; int main() { int age; cout << "Enter your age: "; cin >> age; if(cin.fail()) { // بررسی خطا cout << "Invalid input! Please enter a number." << endl; } else { cout << "Your age is: " << age << endl; } return 0; }

📌 اگر کاربر چیزی غیر از عدد وارد کند، پیام خطا نمایش داده می‌شود.

🔹 2️⃣ پاک کردن خطا و بافر

اگر cin در fail state قرار بگیرد، باید خطا را پاک کنیم و بافر ورودی را خالی کنیم:

#include <iostream> #include <limits> // برای numeric_limits using namespace std; int main() { int age; cout << "Enter your age: "; cin >> age; while(cin.fail() || age < 0) { cin.clear(); // پاک کردن وضعیت خطا cin.ignore(numeric_limits<streamsize>::max(), '\n'); // خالی کردن بافر cout << "Invalid input! Enter a positive number: "; cin >> age; } cout << "Your age is: " << age << endl; return 0; }
  • ()cin.clear → پاک کردن وضعیت خطا

  • (...)cin.ignore → حذف داده‌های باقی‌مانده در بافر

🔹 3️⃣ اعتبارسنجی محدوده داده

می‌توانیم مطمئن شویم مقدار وارد شده در یک محدوده معتبر باشد:

int score; cout << "Enter your score (0-100): "; cin >> score; while(cin.fail() || score < 0 || score > 100) { cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); cout << "Invalid score! Enter 0-100: "; cin >> score; } cout << "Your score: " << score << endl;

🔹 4️⃣ اعتبارسنجی رشته‌ها

برای رشته‌ها هم می‌توان بررسی کرد که ورودی خالی یا شامل کاراکترهای غیرمجاز نباشد:

#include <iostream> #include <string> using namespace std; int main() { string name; cout << "Enter your name: "; getline(cin, name); while(name.empty()) { cout << "Name cannot be empty! Enter again: "; getline(cin, name); } cout << "Hello, " << name << "!" << endl; return 0; }

🔹 5️⃣ نکات مهم

  1. همیشه داده ورودی کاربر را بررسی و اعتبارسنجی کنید.

  2. برای ورودی‌های عددی، از ()cin.fail و ()cin.clear استفاده کنید.

  3. محدوده داده‌ها را مشخص کنید تا ورودی منطقی باشد.

  4. برای رشته‌ها، بررسی کنید که خالی یا نامعتبر نباشند.

  5. ترکیب while + cin.clear + cin.ignore بهترین روش برای حلقهٔ اعتبارسنجی است.

💡 خلاصه:
Input Validation در C++ تضمین می‌کند داده‌های وارد شده صحیح، منطقی و امن باشند و از بروز Runtime Errors جلوگیری می‌کند. این مهارت برای برنامه‌های واقعی و کاربردی بسیار ضروری است.