310 likes | 443 Views
Week 3 Data Input and Output. Objectives. อุปกรณ์มาตรฐานในการรับข้อมูลและแสดงผลข้อมูล การรับและแสดงผลข้อมูลแบบ C++ โดยอาศัย iostream cin และ cout การกำหนดรูปแบบการแสดงผลโดยอาศัย stream manipulator และ stream format states การแสดงผลแบบภาษา C ด้วยคำสั่ง printf
E N D
Week 3 Data Input and Output
Objectives • อุปกรณ์มาตรฐานในการรับข้อมูลและแสดงผลข้อมูล • การรับและแสดงผลข้อมูลแบบ C++ โดยอาศัยiostream • cinและcout • การกำหนดรูปแบบการแสดงผลโดยอาศัย stream manipulator และ stream format states • การแสดงผลแบบภาษา C ด้วยคำสั่งprintf • การกำหนดรูปแบบการแสดงผลโดยอาศัย format control string
Standard Input and Output • การนำข้อมูลเข้าโปรแกรมคอมพิวเตอร์ (input) • ช่องในการนำข้อมูลเข้าสู่โปรแกรม เช่นเมาส์ ไฟล์ เครือข่ายคอมฯ • Standard input device - คีย์บอร์ด • การแสดงผลลัพธ์จากการทำงานของโปรแกรม (output) • ช่องทางในการแสดง(หรือจัดเก็บ)ผลลัพธ์ เช่น ไฟล์ เครือข่าย เครืื่องพิมพ์ • Standard output device –หน้าจอคอมพิวเตอร์ • C++ สามารถรับข้อมูลเข้า และแสดงผลลัพธ์ของโปรแกรมโดยอาศัยชุดคำสั่งที่ได้สร้างไว้แล้ว และถูกจัดเก็บไว้ใน header file ที่ชื่อว่าiostream (input/output stream)
C++ Input and Output with iostream • คำสั่งที่มีการใช้งานบ่อยๆ ได้แก่cinและcout • cinจะถูกใช้งานร่วมกับ right shift operator (>>) หรือถูกเรียกว่าstream extraction operator เมื่อใช้ร่วมกับcin • ใช้ในการดึงข้อมูลเข้าจาก standard input device • coutจะถูกใช้งานร่วมกับ left shift operator (<<) หรือถูกเรียกว่าstream insertion operatorเมื่อใช้ร่วมกับcout • ใช้แสดงผลลัพธ์ออกทาง standard output device • ในกรณีที่ต้องการอ่านข้อมูลเข้าจากไฟล์ หรือเขียนผลลัพธ์ที่ได้ไปเก็บในไฟล์ ต้องอาศัยชุดคำสั่งที่อยู่ใน head file ที่ชื่อว่าfstream(file stream)- ไม่ขอกล่าวถึงในเนื้อหานี้
cin • ใช้ในการรับข้อมูลที่ป้อนผ่านคีย์บอร์ดมาจัดเก็บในตัวแปรที่กำหนด • ไม่จัดเก็บข้อมูลอักขระที่เป็นช่องว่าง (whitespace) • รูปแบบพื้นฐานในการใช้งาน cin>> var; • var- ตัวแปรที่จะใช้ในการจัดเก็บข้อมูล และได้มีการประกาศใช้งานแล้ว โดยC++ จะจัดเก็บข้อมูลให้ตรงตามชนิดของตัวแปร (data type) ที่ได้ประกาศ • สามารถใชัรับข้อมูลได้ทีละหลายๆตัว เช่น cin>> var1 >> var2 >> var3; • เป็นการรับข้อมูล 3 ค่าจากผู้ใช้ป้อนผ่านคีย์บอร์ด • ขณะป้อนข้อมูล ต้องแยกข้อมูลแต่ละตัวออกจากกันด้วยช่องว่าง • ข้อมูลทั้ง 3 ค่าที่ป้อน จะถูกนำมาจัดเก็บในตัวแปรทั้ง 3 ตัวตามลำดับก่อนหลัง
cin • Example - การรับอินพุทต่อเนื่อง
cin.get() • ใช้รับค่าอักขระ 1 ตัวอักษร ซึ่งรวมไปถึงช่องว่าง (whitespace) ต่างๆ • รูปแบบการใช้งานคือ char ch; cin.get(ch); • รับค่าอักขระ 1 ตัวแล้วนำค่าที่ได้ไปเก็บไว้ที่ตัวแปรชนิดcharที่ชื่อว่าch cin.get(); • รอรับอักขระจากคีย์บอร์ด แต่ไม่ได้นำไปใช้งานต่อ • ใช้ในกรณีที่อยากให้โปรแกรมหยุดรอการตอบสนองจากผู้ใช้ • ยังมีรูปการใช้งานแบบอื่นๆ ที่ใช้กับข้อมูลประเภทตัวแปรชุด (array) ซึ่งจะได้มีการกล่าวถึงในโอกาสต่อไป
cin and string • โดยทั่วไปเราสามารถใช้cin>>varกับตัวแปรชนิดข้อความ (string) ได้เช่นกัน แต่โปรแกรมจะตัดข้อความทันทีเมื่อพบช่องว่าง
cin and string • หากต้องการรับข้อความทั้งหมด รวมถึงช่องว่างต่างๆ ต้องอาศัยคำสั่งgetline() ซึ่งมีรูปแบบการใช้งานดังนี้ string string_variable; getline(cin, string_variable);
cin and string • ตัวอย่าง
cout • แสดงผลออกทางหน้าจออุปกรณ์คอมพิวเตอร์ • รูปแบบพื้นฐานในการใช้งาน cout<< “STRING 1” << (Math Exp) << “STRING 2”; • STRING- ข้อความ (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) • (Math Exp) - ตัวแปร หรือชุดคำสั่งที่ใช้คำนวณทางคณิตศาสตร์ เช่น a%3 pow(2, sqrt(1/x)) exp(4*a*b) + 4*sin(2*PI*f*t)
cout • Example - การแสดง output แบบต่อเนื่องด้วย left-shift (<<)
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
Stream Manipulators • การแสดงเลขฐาน(ต่อ)
Stream Manipulators • ความละเอียดการแสดงผลข้อมูลทศนิยม (floating-point precision) • ควบคุมจำนวนตัวเลขด้านขวาของจุดทศนิยม cout.precision(precision_number)
Stream Manipulators • ความละเอียดการแสดงผลข้อมูลทศนิยม (ต่อ) setprecision(precision_number)
Stream Manipulators • กำหนดขนาดช่องว่างประกอบการแสดงผล(field width) • กำหนดจำนวนหลักในการแสดงผลโดยจะแสดงผลชิดขวา (right justified) cout.width(number_of_column)
Stream Manipulators • กำหนดขนาดช่องว่างประกอบการแสดงผล(ต่อ) setw(number_of_column)
Stream Format States • เป็นการกำหนดรูปแบบการแสดงผลได้โดยอาศัยflagชนิดต่างๆ cout.setf(flag); หรือsetiosflags(flag);
Stream Format States • การแสดงเลขศูนย์ต่อท้ายและจุดทศนิยม • โดยทั่วไปcoutจะไม่แสดงเลขศูนย์ และจุดทศนิยมของจำนวน 88.0 • หากต้องการให้แสดงค่า 88.0000 จำเป็นต้องกำหนดios::showpoint
Stream Format States • การแสดงผลแบบชิดซ้ายและชิดขวา • หากมีการกำหนดช่องว่างในการแสดงผล โดยปกติการแสดงข้อความต่างๆจะอยู่ในรูปแบบชิดขวา ซึ่งเปรียบเทียบเหมือนกับการใช้งานios::right, ios::adjustfield • การแสดงผลชิดซ้าย ต้องกำหนดค่า ios::left, ios::adjustfield
Stream Format States • การเติมอักขระให้เต็มพื้นที่แสดงผล (padding) cout.fill(char); หรือsetfill(char); • char - อักษรที่ต้องการนำมาเติมด้านซ้ายหรือด้านขวาของการแสดงผล • หากไม่มีการกำหนด character คำสั่งจะใช้ช่องว่าง (space) ในการเติมเต็ม
Stream Format States • การแสดงข้อมูลตัวเลขรูปแบบวิทยาศาสตร์(scientific notation) • อาศัยios::scientific และios::fixed ซึ่งเป็นสมาชิกภายใต้ios::floatfield • cout.setf(0, ios::floatfield); จะถูกใช้เมื่อต้องการให้กลับไปใช้รูปแบบการแสดงผลตามปกติ (เหมือนก่อนที่จะมีการเปลี่ยนแปลง)
C-Style Output using printf() • ยังมีโปรแกรมที่เขียนโดย C++ จำนวนหนึ่งยังอาศัยการแสดงข้อมูลแบบที่มีการใช้งานในภาษาCโดยอาศัยคำสั่งprintf() • การกำหนดรูปแบบการแสดงผลในคำสั่งprintf() จะอาศัยสิ่งที่เรียกว่าformat control string • รูปแบบการใช้งานprintf() printf(format_control_str, other-args);
C-Style Output using printf() • การกำหนดรูปแบบการแสดงผลด้วย format control string
C-Style Output using printf() • การกำหนดรูปแบบการแสดงผลด้วย format control string (ต่อ)
C-Style Output using printf() • ตัวอย่าง - การแสดงตัวเลขจำนวนเต็มชิดขวา
C-Style Output using printf() • ตัวอย่าง - การกำหนดความละเอียดให้จำนวนเต็มและทศนิยม
Summary • C++อาศัยคำสั่งcinและcoutในการนำข้อมูลเข้าและแสดงข้อมูลตามลำดับ โดยคำสั่งเหล่านี้ถูกเก็บอยู่ใน header file ชื่อiostream • cinใช้งานร่วมกับ stream extractor operator (>>) • coutใช้งานร่วมกับ stream insertion operator(<<) • cin.get() จะใช้ในการดึงข้อมูลอักขระทีละ 1 ตัวอักษร • getline()ใช้ในการดึงข้อความได้เช่นเดียวกับcinแต่จะไม่หยุดการทำงานเมื่อพบช่องว่าง (whitespace) • ดึงข้อความได้เป็นประโยค รวมทั้งช่องว่างต่างๆด้วย
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ต้องเลือกใช้งานให้สอดคล้องกับข้อมูลที่ต้องการแสดงผล
Reference Links • Tenouk’sProgramming Tutorials: • C Formatted I/O Programminghttp://www.tenouk.com/Module5.html • C++ Stream Formatted I/Ohttp://www.tenouk.com/Module18.html