در حال بارگذاری...

ورودی و خروجی

ورودی و خروجی در سی‌پلاس‌پلاس به مجموعه‌ای از قابلیت‌ها اطلاق می‌شود که امکان تعامل برنامه با کاربر، فایل‌ها و سیستم‌های خارجی را فراهم می‌کند. ورودی به برنامه اجازه می‌دهد داده‌ها را از منابع مختلف مانند صفحه‌کلید یا فایل‌ها دریافت کند و خروجی امکان نمایش یا ذخیره نتایج در صفحه‌نمایش یا فایل‌ها را فراهم می‌کند. استفاده صحیح از ورودی و خروجی برای توسعه نرم‌افزارهای قابل اعتماد و بهینه ضروری است و مانع از بروز خطاهایی مانند نشت حافظه، خواندن داده‌های نامعتبر و خطاهای نوشتاری می‌شود. در سی‌پلاس‌پلاس، از کتابخانه استاندارد برای ورودی و خروجی استاندارد و برای کار با فایل‌ها استفاده می‌شود. در این آموزش، تکنیک‌های پیشرفته‌ای از خواندن و نوشتن داده‌ها، ادغام با ساختارهای داده، الگوریتم‌ها و اصول شی‌ءگرایی ارائه می‌شود تا دانشجو بتواند راهکارهای امن، بهینه و قابل نگهداری ایجاد کند. پس از مطالعه این آموزش، خواننده قادر خواهد بود برنامه‌هایی با ورودی و خروجی ایمن و کارآمد بنویسد که در پروژه‌های واقعی و معماری‌های نرم‌افزاری بزرگ قابل استفاده باشند.

مثال پایه

text
TEXT Code
\#include <iostream>
\#include <string>
\#include <limits>

int main() {
std::string name;
int age;

std::cout << "نام خود را وارد کنید: ";
std::getline(std::cin, name);

std::cout << "سن خود را وارد کنید: ";
while (!(std::cin >> age)) {
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "ورودی نامعتبر است. دوباره تلاش کنید: ";
}

std::cout << "سلام، " << name << "! شما " << age << " سال دارید." << std::endl;

return 0;

}

در این مثال پایه، ابتدا کتابخانه‌های و اضافه شده‌اند. متغیر name برای ذخیره نام کاربر و age برای سن او استفاده می‌شود. با استفاده از std::getline، کل خط ورودی گرفته می‌شود تا نام‌های چندکلمه‌ای با فاصله نیز به درستی ذخیره شوند. برای ورودی age، از یک حلقه while استفاده شده تا اطمینان حاصل شود که مقدار وارد شده صحیح است؛ اگر ورودی نامعتبر باشد، std::cin.clear() وضعیت جریان را پاک می‌کند و std::cin.ignore() ورودی اشتباه را نادیده می‌گیرد. استفاده از std::cout امکان نمایش خروجی با قالب‌بندی مناسب را فراهم می‌کند. این الگو برای برنامه‌های واقعی اهمیت دارد زیرا اطمینان می‌دهد ورودی‌ها ایمن، معتبر و قابل استفاده در پردازش‌های بعدی هستند و از خطاهای برنامه‌نویسی جلوگیری می‌کند.

مثال کاربردی

text
TEXT Code
\#include <iostream>
\#include <fstream>
\#include <vector>
\#include <algorithm>
\#include <string>

class Student {
public:
std::string name;
int grade;

Student(const std::string& n, int g) : name(n), grade(g) {}
void display() const {
std::cout << name << ": " << grade << std::endl;
}

};

int main() {
std::ifstream inputFile("students.txt");
std::ofstream outputFile("students_sorted.txt");

if (!inputFile) {
std::cerr << "خطا در باز کردن فایل ورودی." << std::endl;
return 1;
}

std::vector<Student> students;
std::string name;
int grade;

while (inputFile >> name >> grade) {
students.emplace_back(name, grade);
}

std::sort(students.begin(), students.end(), [](const Student& a, const Student& b) {
return a.grade > b.grade;
});

for (const auto& student : students) {
student.display();
outputFile << student.name << " " << student.grade << std::endl;
}

inputFile.close();
outputFile.close();

return 0;

}

این مثال پیشرفته ترکیب ورودی و خروجی با شی‌ءگرایی، استفاده از STL و الگوریتم‌ها را نشان می‌دهد. کلاس Student داده‌های هر دانش‌آموز را کپسوله می‌کند. از std::ifstream و std::ofstream برای خواندن و نوشتن فایل‌ها استفاده شده است. با std::vector دانش‌آموزان به‌صورت پویا ذخیره می‌شوند و با std::sort و تابع lambda براساس نمره مرتب می‌شوند. متد display اطلاعات را در کنسول نمایش می‌دهد و نوشتن در فایل باعث حفظ داده‌ها می‌شود. استفاده از RAII باعث بسته شدن خودکار جریان‌ها و جلوگیری از نشت منابع می‌شود. این الگو در پروژه‌های واقعی برای مدیریت داده‌ها، مرتب‌سازی و نمایش اطلاعات به کار می‌رود و از نظر کارایی، امنیت و نگهداری بهینه است.

بهترین شیوه‌ها در ورودی و خروجی سی‌پلاس‌پلاس شامل اعتبارسنجی ورودی‌ها، استفاده ایمن از جریان‌ها، پاک‌سازی وضعیت جریان بعد از خطا و بهره‌گیری از containerهای STL برای مدیریت داده‌ها است. اشتباهات رایج شامل بازنکردن یا نادیده گرفتن فایل‌ها، عدم رسیدگی به خطاهای جریان و استفاده از الگوریتم‌های ناکارآمد است. برای اشکال‌زدایی می‌توان وضعیت جریان‌ها را بررسی و پیام‌های خطا با std::cerr نمایش داد. برای بهینه‌سازی عملکرد، پردازش داده‌ها به‌صورت بلوکی و استفاده از الگوریتم‌های بهینه STL توصیه می‌شود. از نظر امنیتی، ورودی‌های خارجی باید همیشه اعتبارسنجی شوند و فرضیات غلط درباره فرمت داده‌ها اجتناب گردد تا برنامه مقاوم در برابر خطاها و آسیب‌پذیری‌ها باشد.

📊 جدول مرجع

سی‌پلاس‌پلاس Element/Concept Description Usage Example
std::cin جریان ورودی استاندارد int x; std::cin >> x;
std::cout جریان خروجی استاندارد std::cout << "سلام" << std::endl;
std::getline خواندن کل خط ورودی std::string s; std::getline(std::cin, s);
std::ifstream خواندن فایل std::ifstream in("file.txt");
std::ofstream نوشتن فایل std::ofstream out("file.txt");
std::vector ذخیره‌سازی پویا std::vector<int> v; v.push_back(10);

یادگیری ورودی و خروجی در سی‌پلاس‌پلاس امکان توسعه برنامه‌هایی امن و کارآمد را فراهم می‌کند که با کاربران و سیستم‌های خارجی تعامل دارند. تسلط بر این مفاهیم، یکپارچگی با الگوریتم‌ها، ساختارهای داده و شی‌ءگرایی را تقویت می‌کند و برنامه‌نویس را برای ایجاد نرم‌افزارهای مقیاس‌پذیر و مقاوم آماده می‌کند. مباحث بعدی پیشنهادی شامل مدیریت پیشرفته فایل‌ها، استفاده از stringstream، سریال‌سازی داده‌ها و ورودی و خروجی در محیط‌های چندنخی یا شبکه است. تمرین با پروژه‌های واقعی و مراجعه به مستندات رسمی سی‌پلاس‌پلاس دانش عملی را تقویت می‌کند.

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

2
سوالات
🎯
70%
برای قبولی
♾️
زمان
🔄
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود