logo

C++ קלט ופלט בסיסיים (I/O)

פעולת C++ I/O משתמשת בקונספט הזרם. סדרת הבתים או זרימת הנתונים מכונה זרם. זה מאיץ את הביצועים.

אם בתים מועברים מהזיכרון הראשי למכשיר כמו מדפסת, מסך תצוגה, חיבור רשת וכו', זה נקרא פעולת פלט.

פעולת קלט מתרחשת כאשר בייטים זורמים מהתקן כגון מדפסת, מסך תצוגה או חיבור רשת לזיכרון הראשי.

ב-C++, פונקציות מוגדרות מראש והצהרות מסופקות באמצעות קובצי כותרת, המאפשרים לך לבצע משימות ספציפיות מבלי שתצטרך לכתוב קוד חדש מההתחלה. כמה קבצי כותרות חשובים עבור פעולות קלט/פלט ב-C++ כוללים פונקציות לביצוע יעיל של משימות קלט ופלט. הספרייה הסטנדרטית של C++, אוסף של מחלקות ושיטות שנוצרו בשפת התכנות C++, מכילה קובצי כותרות אלה. הבה נדון בקבצי הכותרות הראשיים עבור פעולות קלט/פלט:

קובץ הכותרת פונקציה ותיאור
הוא משמש להגדרת ה cout, cin ו-cerr אובייקטים, התואמים לזרם פלט סטנדרטי, זרם קלט סטנדרטי וזרם שגיאות סטנדרטי, בהתאמה.
הוא משמש להכרזה על שירותים שימושיים לביצוע I/O מעוצב, כגון setprecision ו-setw.
הוא משמש להכרזה על שירותים לעיבוד קבצים בשליטה של ​​המשתמש.

iostream: זהו אחד מקבצי הכותרת החשובים ביותר לפעולות קלט/פלט ב-C++. זה מייצג 'פלט קלט' זרם. לעבודה עם צורות שונות של זרמי קלט/פלט, ה iostream קובץ header כולל את המחלקות istream (זרם קלט) ו ostream (זרם פלט) כמו גם השיעורים הנגזרים שלו ifstream, ofstream , ו stringstream . המחלקות הנפוצות ביותר של קובץ כותרת זה הן cin (קלט סטנדרטי) ו cout (פלט סטנדרטי) , המאפשרים לך לקרוא קלט משתמש ולהציג פלט לקונסולה. לדוגמה:

 #include using namespace std; int main() { int num; cout <> num; cout << 'You entered: ' << num << endl; return 0; } 

תְפוּקָה

 Enter a number: 42 You entered: 42 

iomanip: קובץ כותרת זה מייצג 'מניפולציה של קלט-פלט' . הוא מספק כלים לעיצוב קֶלֶט ו תְפוּקָה . זה מאפשר לך לשנות את יישור, רוחב, דיוק , ותכונות עיצוב אחרות של הקלט והפלט. Setw, setprecision, קבוע, שמאל, ימין , ופונקציות אחרות בשימוש קבוע מפורטות להלן. זה שימושי במיוחד להצגת נתונים בצורה מסוימת.

דוגמא:

 #include #include using namespace std; int main() { double pi = 3.14159; cout << fixed << setprecision(2) << 'Value of pi: ' << pi << endl; return 0; } 

תְפוּקָה

json ב-json לדוגמה
 Value of pi: 3.14 

זרם: קובץ הכותרת עבור פעולות קלט/פלט של קבצים נקרא fstream . הוא כולל שיעורים לקריאה וכתיבה לקבצים ifstream (זרם קובץ קלט) ו ofstream (זרם קובץ פלט) . המערכת משתמשת במחלקות אלו כדי לפתוח קבצים לקריאה בלבד ולכתיבה בלבד.

דוגמא:

 #include #include using namespace std; int main() { ofstream outputFile('output.txt'); if (outputFile.is_open()) { outputFile << 'Hello, File I/O!'; outputFile.close(); cout << 'File is written successfully.' << endl; } else { cout << 'Failed to open the file.' << endl; } return 0; } 

תְפוּקָה

 The file was written successfully. 

קובצי כותרות אלו הם מהחשובים ביותר עבור משימות קלט/פלט C++. לכל אחד יש מטרה ספציפית והוא מציע את הכלים הדרושים לניהול מוצלח של משימות הכוללות קלט ופלט, בין אם מדובר באינטראקציה עם מסוף, עיצוב פלט , או עבודה עם קבצים.

ב-C++, אנו משתמשים לעתים קרובות 'באמצעות מרחב שמות std;' אחרי קבצי הכותרות. ה מרחב שמות std; הצהרה משמשת לעתים קרובות ב-C++ כדי לייעל את הקוד בעת עבודה עם רכיבי ספרייה סטנדרטיים. הבה נבחן את הפונקציה והיישום של הצהרה זו ביתר פירוט:

א מרחב שמות היא טכניקה לקיבוץ מזהים דומים (כגון כיתות, פונקציות , ו משתנים ) כדי למנוע התנגשויות שמות. הספרייה הסטנדרטית C++ מספקת את חלקיה (כגון cin, cout וכו') תחת מרחב השמות std.

התנאי 'תֶקֶן' מתקצר ל 'סטד' , וכל הרכיבים של הספרייה הסטנדרטית כלולים בתוכה. על ידי כך, התנגשויות שמות עם מזהים שהוגדרו בקוד שלך מצטמצמות.

כעת הבה נדבר על מדוע השימוש במרחב השמות std; נעשה שימוש בהצהרה:

ללא שימוש במרחב שמות std:

 #include int main() { std::cout << 'Hello, world!' << std::endl; return 0; } With using namespace std: #include using namespace std; int main() { cout << 'Hello, world!' << endl; return 0; } 

כפי שאתה יכול לראות, באמצעות מרחב שמות std; הצהרה מאפשרת לך להשמיט את std:: קידומת בעת גישה לרכיבי ספרייה סטנדרטיים. זה הופך את הקוד שלך לקצר יותר וקריא יותר, מכיוון שאתה לא צריך לחזור std:: לפני כל מזהה ספרייה סטנדרטית.

קבצי כותרות של ספריית I/O

זרם פלט סטנדרטי (cout):

אובייקט cout הוא אובייקט מוגדר מראש של מחלקה ostream. הוא מחובר להתקן הפלט הסטנדרטי, שהוא בדרך כלל מסך תצוגה. ה-cout משמש בשילוב עם אופרטור החדרת הזרם (<<) to show the output on a console< p>

הבה נראה את הדוגמה הפשוטה של ​​זרם פלט סטנדרטי (cout):

 #include using namespace std; int main( ) { char ary[] = &apos;Welcome to C++ tutorial&apos;; cout &lt;&lt; &apos;Value of ary is: &apos; &lt;&lt; ary &lt;&lt; endl; } 

תְפוּקָה

 Value of ary is: Welcome to C++ tutorial 

זרם קלט רגיל (cin)

ה אֲכִילָה הוא אובייקט מוגדר מראש של זרם מעמד. הוא מחובר להתקן הקלט הסטנדרטי, שהוא בדרך כלל מקלדת. ה-cin משמש בשילוב עם אופרטור מיצוי זרמים (>>) כדי לקרוא את הקלט ממסוף.

בואו נראה את הדוגמה הפשוטה של ​​זרם קלט סטנדרטי (cin):

 #include using namespace std; int main( ) { int age; cout &lt;&gt; age; cout &lt;&lt; &apos;Your age is: &apos; &lt;&lt; age &lt;&lt; endl; } 

תְפוּקָה

 Enter your age: 22 Your age is: 22 

קו קצה רגיל (endl)

ה endl הוא אובייקט מוגדר מראש של האויב שלנו מעמד. הוא משמש להוספת תווים בשורה חדשה ושוטף את הזרם.

בואו נראה את הדוגמה הפשוטה של ​​קו סיום סטנדרטי (endl):

 #include using namespace std; int main( ) { cout &lt;&lt; &apos;C++ Tutorial&apos;; cout &lt;&lt; &apos; Javatpoint&apos;&lt;<endl; cout << 'end of line'<<endl; } < pre> <p> <strong>Output</strong> </p> <pre> C++ Tutorial Javatpoint End of line </pre> <h3>Un-buffered standard error stream (cerr):</h3> <p> <strong> <em>cerr</em> </strong> stands for <strong> <em>&apos;standard error&apos;</em> .</strong> </p> <p>It is an unbuffered stream, meaning that output sent to <strong> <em>cerr</em> </strong> is immediately displayed on the console without buffering.</p> <p>It is typically used for displaying error messages and diagnostic information, which need to be displayed immediately to avoid delays caused by buffering.</p> <p> <strong>Example: using cerr:</strong> </p> <pre> #include int main() { std::cerr &lt;&lt; &apos;This is an error message.&apos; &lt;&lt; std::endl; return 0; } </pre> <p> <strong>Output</strong> </p> <pre> This is an error message. </pre> <h3>buffered standard error stream (clog):</h3> <p>clog stands for <strong> <em>&apos;standard log&apos;</em> </strong> . It is a buffered stream, similar to cout. It&apos;s often used for writing informational or diagnostic messages that are less time-sensitive than errors. The use of buffering can improve performance when displaying a large number of messages.</p> <p> <strong>Example: using clog</strong> </p> <pre> #include int main() { std::clog &lt;&lt; &apos;This is an informational message.&apos; &lt;&lt; std::endl; return 0; } </pre> <p> <strong>Output</strong> </p> <pre> This is an informational message. </pre> <p>In both examples, the output will appear on the console. However, the main difference between <strong> <em>cerr</em> </strong> and <strong> <em>clog</em> </strong> lies in their buffering behavior. Due to its unbuffered nature, messages given to <strong> <em>cerr</em> </strong> are displayed right away, but messages sent to clog may be buffered for greater speed. However, they will still eventually appear on the console.</p> <h4>Note: It is important to remember that the type of message you wish to display will determine whether you use cerr or clog. Use cerr for essential messages that need immediate attention (like error messages) and use clog for less critical diagnostic or informational messages that can be buffered for better performance.</h4> <hr></endl;>

זרם שגיאות סטנדרטי לא ממוגן (cerr):

cerr מייצג 'שגיאה רגילה' .

זהו זרם לא מפוצץ, כלומר הפלט שנשלח אליו cerr מוצג מיד בקונסולה ללא חציצה.

הוא משמש בדרך כלל להצגת הודעות שגיאה ומידע אבחון, אשר צריך להיות מוצג באופן מיידי כדי למנוע עיכובים הנגרמים על ידי חציצה.

דוגמה: באמצעות cerr:

 #include int main() { std::cerr &lt;&lt; &apos;This is an error message.&apos; &lt;&lt; std::endl; return 0; } 

תְפוּקָה

 This is an error message. 

זרם שגיאה סטנדרטי מאוחסן (סתימה):

Clog מייצג 'יומן רגיל' . זהו זרם מאגר, בדומה ל-cout. הוא משמש לעתים קרובות לכתיבת הודעות מידע או אבחון שהן פחות רגישות לזמן משגיאות. השימוש במאגר יכול לשפר את הביצועים בעת הצגת מספר רב של הודעות.

דוגמה: שימוש בסתימה

 #include int main() { std::clog &lt;&lt; &apos;This is an informational message.&apos; &lt;&lt; std::endl; return 0; } 

תְפוּקָה

 This is an informational message. 

בשתי הדוגמאות, הפלט יופיע בקונסולה. עם זאת, ההבדל העיקרי בין cerr ו לִסְתוֹם טמון בהתנהגות החציצה שלהם. בשל אופיו הבלתי-מחוצץ, הודעות שניתנו ל cerr מוצגים מיד, אך הודעות שנשלחו לסתימה עשויות להיות מאוחסנות למהירות גבוהה יותר. עם זאת, הם עדיין יופיעו בסופו של דבר בקונסולה.

הערה: חשוב לזכור שסוג ההודעה שברצונך להציג יקבע אם אתה משתמש ב-cerr או clog. השתמש ב-cerr עבור הודעות חיוניות הדורשות טיפול מיידי (כמו הודעות שגיאה) והשתמש ב-clog עבור הודעות אבחון או מידע פחות קריטיות שניתן לאחסן במאגר לביצועים טובים יותר.