PowerPoint - ee.eng.cmu.ac.th

Download Report

Transcript PowerPoint - ee.eng.cmu.ac.th

Week 3
Data Input and Output
Objectives
• อุปกรณ์มาตรฐานในการรับข้อมูลและแสดงผลข้อมูล
• การรับและแสดงผลข้อมูลแบบ C++ โดยอาศัย iostream
• cin และ cout
• การกาหนดรูปแบบการแสดงผลโดยอาศัย stream manipulator และ
stream format states
• การแสดงผลแบบภาษา C ด้วยคาสัง่ printf
• การกาหนดรูปแบบการแสดงผลโดยอาศัย format control string
2
Standard Input and Output
• การนาข้อมูลเข้าโปรแกรมคอมพิวเตอร์ (input)
• ช่องในการนาข้อมูลเข้าสูโ่ ปรแกรม เช่น เมาส์ ไฟล์ เครือข่ายคอมฯ
• Standard input device - คียบ
์ อร์ด
• การแสดงผลลัพธ์จากการทางานของโปรแกรม (output)
่ื มพ์
• ช่องทางในการแสดง(หรือจัดเก็บ)ผลลัพธ์ เช่น ไฟล์ เครือข่าย เครืองพิ
• Standard output device – หน้าจอคอมพิวเตอร์
• C++ สามารถรับข้อมูลเข้า และแสดงผลลัพธ์ของโปรแกรมโดยอาศัย
ชุดคาสังที
่ ไ่ ด้สร้างไว้แล้ว และถูกจัดเก็บไว้ใน header file ทีช่ ่อื ว่า
iostream (input/output stream)
3
C++ Input and Output with iostream
• คาสังที
่ ม่ กี ารใช้งานบ่อยๆ ได้แก่ cin และ cout
จะถูกใช้งานร่วมกับ right shift operator (>>) หรือถูกเรียกว่า
stream extraction operator เมือ่ ใช้รว่ มกับ cin
• cin
• ใช้ในการดึงข้อมูลเข้าจาก standard input device
จะถูกใช้งานร่วมกับ left shift operator (<<) หรือถูกเรียกว่า
stream insertion operator เมือ่ ใช้รว่ มกับ cout
• cout
• ใช้แสดงผลลัพธ์ออกทาง standard output device
• ในกรณีทต่ี อ้ งการอ่านข้อมูลเข้าจากไฟล์ หรือเขียนผลลัพธ์ทไ่ี ด้ไปเก็บใน
ไฟล์ ต้องอาศัยชุดคาสังที
่ อ่ ยูใ่ น head file ทีช่ ่อื ว่า fstream
(file stream) - ไม่ขอกล่าวถึงในเนื้อหานี้
4
cin
• ใช้ในการรับข้อมูลทีป
่ ้ อนผ่านคียบ์ อร์ดมาจัดเก็บในตัวแปรทีก่ าหนด
• ไม่จดั เก็บข้อมูลอักขระทีเ่ ป็ นช่องว่าง (whitespace)
• รูปแบบพืน
้ ฐานในการใช้งาน
cin >> var;
- ตัวแปรทีจ่ ะใช้ในการจัดเก็บข้อมูล และได้มกี ารประกาศใช้งานแล้ว
โดย C++ จะจัดเก็บข้อมูลให้ตรงตามชนิดของตัวแปร (data type) ทีไ่ ด้ประกาศ
• var
• สามารถใชัรบั ข้อมูลได้ทลี ะหลายๆตัว เช่น
cin >> var1 >> var2 >> var3;
• เป็ นการรับข้อมูล 3 ค่าจากผูใ้ ช้ป้อนผ่านคียบ
์ อร์ด
• ขณะป้อนข้อมูล ต้องแยกข้อมูลแต่ละตัวออกจากกันด้วยช่องว่าง
• ข้อมูลทัง้ 3 ค่าทีป
่ ้ อน จะถูกนามาจัดเก็บในตัวแปรทัง้ 3 ตัวตามลาดับก่อนหลัง
5
cin
• Example - การรับอินพุทต่อเนื่อง
6
cin.get()
• ใช้รบั ค่าอักขระ 1 ตัวอักษร ซึง่ รวมไปถึงช่องว่าง (whitespace) ต่างๆ
• รูปแบบการใช้งานคือ
char ch;
cin.get(ch);
• รับค่าอักขระ 1 ตัวแล้วนาค่าทีไ่ ด้ไปเก็บไว้ทต่ี วั แปรชนิด char ทีช่ ่อื ว่า ch
cin.get();
• รอรับอักขระจากคียบ
์ อร์ด แต่ไม่ได้นาไปใช้งานต่อ
• ใช้ในกรณีทอ่ี ยากให้โปรแกรมหยุดรอการตอบสนองจากผูใ้ ช้
• ยังมีรป
ู การใช้งานแบบอื่นๆ ทีใ่ ช้กบั ข้อมูลประเภทตัวแปรชุด (array)
ซึง่ จะได้มกี ารกล่าวถึงในโอกาสต่อไป
7
cin and string
• โดยทัวไปเราสามารถใช้
่
cin >> var กับตัวแปรชนิดข้อความ
(string) ได้เช่นกัน แต่โปรแกรมจะตัดข้อความทันทีเมือ่ พบช่องว่าง
8
cin and string
• หากต้องการรับข้อความทัง้ หมด รวมถึงช่องว่างต่างๆ ต้องอาศัยคาสัง่
getline() ซึง่ มีรป
ู แบบการใช้งานดังนี้
string string_variable;
getline(cin, string_variable);
9
cin and string
• ตัวอย่าง
10
cout
• แสดงผลออกทางหน้าจออุปกรณ์คอมพิวเตอร์
• รูปแบบพืน
้ ฐานในการใช้งาน
cout << “STRING 1” << (Math Exp) << “STRING 2”;
- ข้อความ (string) ซึง่ อยูภ่ ายใต้เครือ่ งหมาย “” เช่น
“This is a good day to program” << “, “ << “let’s do it !”
“C++ programming is way too easy\n \t I want to try .NET programming!!!”
“I love \”C++\” and I am going to get \’A\’ for sure“
หรือ endl (new line)
• STRING
• (Math Exp)
- ตัวแปร หรือชุดคาสังที
่ ใ่ ช้คานวณทางคณิตศาสตร์ เช่น
a%3
pow(2, sqrt(1/x))
exp(4*a*b) + 4*sin(2*PI*f*t)
11
cout
• Example - การแสดง output แบบต่อเนื่องด้วย left-shift (<<)
12
Stream Manipulators
• การกาหนดรูปแบบการแสดงผลของ cout เช่น
• รูปแบบการแสดงผลของข้อมูลจานวนเต็มในรูปเลขฐานต่างๆ
• ความละเอียด (precision) ของข้อมูลจานวนทศนิยม
• กาหนดความกว้างของช่องว่างประกอบการแสดงผล
• การแสดงเลขฐาน (Base)
• อาศัยคาสัง่ และค่าคงทีซ
่ ง่ึ มีการกาหนดไว้ใน header file ชื่อ iomanip
• hex (base 16) - hexadecimal
• oct (base 8) - octal
• dec (base 10) – decimal
• setbase(base_number) - กาหนดรูปแบบเลขฐานตาม base_number
• base_number - มีคา
่ ได้เพียง 8, 10 และ 16
13
Stream Manipulators
• การแสดงเลขฐาน (ต่อ)
14
Stream Manipulators
• ความละเอียดการแสดงผลข้อมูลทศนิยม (floating-point precision)
• ควบคุมจานวนตัวเลขด้านขวาของจุดทศนิยม
cout.precision(precision_number)
15
Stream Manipulators
• ความละเอียดการแสดงผลข้อมูลทศนิยม (ต่อ)
setprecision(precision_number)
16
Stream Manipulators
• กาหนดขนาดช่องว่างประกอบการแสดงผล (field width)
• กาหนดจานวนหลักในการแสดงผล โดยจะแสดงผลชิดขวา (right justified)
cout.width(number_of_column)
17
Stream Manipulators
• กาหนดขนาดช่องว่างประกอบการแสดงผล (ต่อ)
setw(number_of_column)
18
Stream Format States
• เป็ นการกาหนดรูปแบบการแสดงผลได้โดยอาศัย flag ชนิดต่างๆ
cout.setf(flag); หรือ setiosflags(flag);
19
Stream Format States
• การแสดงเลขศูนย์ต่อท้ายและจุดทศนิยม
• โดยทัวไป
่ cout จะไม่แสดงเลขศูนย์ และจุดทศนิยมของจานวน 88.0
• หากต้องการให้แสดงค่า 88.0000 จาเป็ นต้องกาหนด ios::showpoint
20
Stream Format States
• การแสดงผลแบบชิดซ้ายและชิดขวา
• หากมีการกาหนดช่องว่างในการแสดงผล โดยปกติการแสดงข้อความต่างๆจะอยู่
ในรูปแบบชิดขวา ซึง่ เปรียบเทียบเหมือนกับการใช้งาน ios::right,
ios::adjustfield
• การแสดงผลชิดซ้าย ต้องกาหนดค่า ios::left, ios::adjustfield
21
Stream Format States
• การเติมอักขระให้เต็มพืน
้ ทีแ่ สดงผล (padding)
cout.fill(char); หรือ setfill(char);
• char - อักษรทีต
่ อ้ งการนามาเติมด้านซ้ายหรือด้านขวาของการแสดงผล
• หากไม่มกี ารกาหนด character คาสังจะใช้
่
ชอ่ งว่าง (space) ในการเติมเต็ม
22
Stream Format States
• การแสดงข้อมูลตัวเลขรูปแบบวิทยาศาสตร์ (scientific notation)
• อาศัย ios::scientific และ ios::fixed ซึง่ เป็ นสมาชิกภายใต้
ios::floatfield
จะถูกใช้เมือ่ ต้องการให้กลับไป
ใช้รปู แบบการแสดงผลตามปกติ (เหมือนก่อนทีจ่ ะมีการเปลีย่ นแปลง)
• cout.setf(0, ios::floatfield);
23
C-Style Output using printf()
• ยังมีโปรแกรมทีเ่ ขียนโดย C++ จานวนหนึ่ง ยังอาศัยการแสดงข้อมูล
แบบทีม่ กี ารใช้งานในภาษา C โดยอาศัยคาสัง่ printf()
• การกาหนดรูปแบบการแสดงผลในคาสัง่ printf() จะอาศัยสิง่ ที่
เรียกว่า format control string
• รูปแบบการใช้งาน printf()
printf(format_control_str, other-args);
24
C-Style Output using printf()
• การกาหนดรูปแบบการแสดงผลด้วย format control string
25
C-Style Output using printf()
• การกาหนดรูปแบบการแสดงผลด้วย format control string (ต่อ)
26
C-Style Output using printf()
• ตัวอย่าง - การแสดงตัวเลขจานวนเต็มชิดขวา
27
C-Style Output using printf()
• ตัวอย่าง - การกาหนดความละเอียดให้จานวนเต็มและทศนิยม
28
Summary
• C++ อาศัยคาสัง่ cin และ cout ในการนาข้อมูลเข้าและแสดงข้อมูล
ตามลาดับ โดยคาสังเหล่
่ านี้ถูกเก็บอยูใ่ น header file ชื่อ iostream
ใช้งานร่วมกับ stream extractor operator (>>)
• cout ใช้งานร่วมกับ stream insertion operator (<<)
• cin
• cin.get()
จะใช้ในการดึงข้อมูลอักขระทีละ 1 ตัวอักษร
ใช้ในการดึงข้อความได้เช่นเดียวกับ cin แต่จะไม่
หยุดการทางานเมือ่ พบช่องว่าง (whitespace)
• getline()
• ดึงข้อความได้เป็ นประโยค รวมทัง้ ช่องว่างต่างๆด้วย
29
Summary
• cout ใช้
stream manipulator หรือ stream format states ในการ
กาหนดรูปแบบการแสดงผลลักษณะต่างๆ
• รูปแบบต่างๆได้ถูกกาหนดไว้ใน header file ชื่อ iomanip
• Stream format states นัน้ ถูกกาหนดอยูใ่ นลักษณะของ flag ทีก่ าหนดใช้
งานด้วยคาสัง่ cout.setf(flag) หรือ setiosflags(flag)
• การแสดงผลแบบภาษา C จะอาศัยคาสัง่ printf() โดยจะอาศัย
format control string ในการกาหนดรูปแบบการแสดงผล
• การเลือกใช้ control character ต้องเลือกใช้งานให้สอดคล้องกับข้อมูลที่
ต้องการแสดงผล
30
Reference Links
• Tenouk’s Programming Tutorials:
• C Formatted I/O Programming
http://www.tenouk.com/Module5.html
• C++ Stream Formatted I/O
http://www.tenouk.com/Module18.html
31