คอมพิวเตอร์ หน้าต่าง อินเทอร์เน็ต

ภาษาโปรแกรมที่พิมพ์ §1 ข้อมูลทั่วไปเกี่ยวกับภาษา ขั้นตอนการออกแบบโปรแกรม โมเดลวงจรชีวิตของแอปพลิเคชัน ทั้งหมดเกี่ยวกับค

ภาษาโปรแกรม C++

อัปเดตครั้งล่าสุด: 08/28/2017

ภาษาการเขียนโปรแกรม C++ เป็นภาษาการเขียนโปรแกรมสำหรับวัตถุประสงค์ทั่วไปที่มีการพิมพ์แบบคงที่ระดับสูง ซึ่งเหมาะสำหรับการสร้างแอปพลิเคชันที่หลากหลาย ปัจจุบัน C++ เป็นหนึ่งในภาษาที่ได้รับความนิยมและแพร่หลายมากที่สุด

มีรากฐานมาจากภาษา C ซึ่งได้รับการพัฒนาในปี 1969-1973 ที่ Bell Labs โดยโปรแกรมเมอร์ Dennis Ritchie ในช่วงต้นทศวรรษ 1980 โปรแกรมเมอร์ชาวเดนมาร์ก Bjarne Stroustrup ซึ่งในขณะนั้นทำงานที่ Bell Labs ได้พัฒนา C++ เป็นส่วนเสริมของภาษา C ในความเป็นจริง ในตอนแรก C++ เพียงแต่เสริมภาษา C ด้วยความสามารถด้านการเขียนโปรแกรมเชิงวัตถุบางอย่าง และนั่นคือสาเหตุที่ Stroustrup เรียกมันว่า "C พร้อมคลาส" ในตอนแรก

ต่อมาภาษาใหม่เริ่มได้รับความนิยม มีการเพิ่มคุณสมบัติใหม่ซึ่งทำให้ไม่เพียงแต่เป็นส่วนเสริมของ C แต่ยังเป็นภาษาการเขียนโปรแกรมใหม่ทั้งหมด ด้วยเหตุนี้ “C พร้อมคลาส” จึงถูกเปลี่ยนชื่อเป็น C++ และตั้งแต่นั้นเป็นต้นมาทั้งสองภาษาก็เริ่มพัฒนาแยกจากกัน

C++ เป็นภาษาที่ทรงพลัง ซึ่งสืบทอดความสามารถด้านหน่วยความจำที่หลากหลายจากภาษา C ดังนั้น C++ จึงมักพบการใช้งานในการเขียนโปรแกรมระบบ โดยเฉพาะอย่างยิ่งเมื่อสร้างระบบปฏิบัติการ ไดรเวอร์ ยูทิลิตี้ต่างๆ โปรแกรมป้องกันไวรัส ฯลฯ อย่างไรก็ตาม Windows OS ส่วนใหญ่เขียนด้วยภาษา C++ แต่การใช้ภาษานี้ไม่จำกัดเฉพาะการเขียนโปรแกรมระบบเท่านั้น สามารถใช้ C++ ในโปรแกรมทุกระดับที่ความเร็วและประสิทธิภาพมีความสำคัญ มักใช้เพื่อสร้างแอพพลิเคชั่นกราฟิกและแอพพลิเคชั่นต่างๆ โดยเฉพาะอย่างยิ่งมักใช้เพื่อสร้างเกมที่มีการแสดงภาพที่สมบูรณ์และสมบูรณ์ นอกจากนี้ เมื่อเร็ว ๆ นี้ ทิศทางของมือถือได้รับแรงผลักดัน โดยที่ C++ ก็ค้นพบแอปพลิเคชันของมันเช่นกัน และแม้กระทั่งในการพัฒนาเว็บ คุณยังสามารถใช้ C++ เพื่อสร้างเว็บแอปพลิเคชันหรือบริการสนับสนุนบางอย่างที่ให้บริการเว็บแอปพลิเคชันได้ โดยทั่วไป C++ เป็นภาษาที่ใช้กันอย่างแพร่หลายซึ่งคุณสามารถสร้างโปรแกรมได้เกือบทุกประเภท

C++ เป็นภาษาที่คอมไพล์ ซึ่งหมายความว่าคอมไพลเลอร์แปลซอร์สโค้ด C++ เป็นไฟล์ปฏิบัติการที่มีชุดคำสั่งของเครื่อง แต่แพลตฟอร์มที่ต่างกันก็มีลักษณะเฉพาะของตัวเอง ดังนั้นโปรแกรมที่คอมไพล์แล้วจึงไม่สามารถถ่ายโอนจากแพลตฟอร์มหนึ่งไปอีกแพลตฟอร์มหนึ่งและรันที่นั่นได้ อย่างไรก็ตาม ในระดับซอร์สโค้ด โปรแกรม C++ ส่วนใหญ่จะพกพาได้ เว้นแต่จะใช้ฟังก์ชันเฉพาะระบบปฏิบัติการบางอย่าง และความพร้อมใช้งานของคอมไพเลอร์ ไลบรารี และเครื่องมือการพัฒนาสำหรับแพลตฟอร์มทั่วไปเกือบทั้งหมด ทำให้คุณสามารถคอมไพล์ซอร์สโค้ด C++ เดียวกันลงในแอปพลิเคชันสำหรับแพลตฟอร์มเหล่านี้ได้

ต่างจากภาษา C ตรงที่ภาษา C++ อนุญาตให้คุณเขียนแอปพลิเคชันในรูปแบบเชิงวัตถุ โดยเป็นตัวแทนของโปรแกรมในรูปแบบของชุดของคลาสและอ็อบเจ็กต์ที่มีปฏิสัมพันธ์ระหว่างกัน ซึ่งช่วยลดความยุ่งยากในการสร้างแอพพลิเคชั่นขนาดใหญ่

ขั้นตอนหลักของการพัฒนา

ในปี 1979-80 Bjarne Stroustrup ได้พัฒนาส่วนขยายของภาษา C - "C with Classes" ในปี 1983 ภาษาถูกเปลี่ยนชื่อเป็น C++

ในปี พ.ศ. 2528 ภาษา C++ เวอร์ชันเชิงพาณิชย์รุ่นแรกได้รับการเผยแพร่ เช่นเดียวกับหนังสือ "The C++ Programming Language" ฉบับพิมพ์ครั้งแรก ซึ่งแสดงถึงคำอธิบายแรกของภาษานี้ในกรณีที่ไม่มีมาตรฐานอย่างเป็นทางการ

ในปี 1989 เวอร์ชันใหม่ของภาษา C++ 2.0 ได้รับการเผยแพร่ ซึ่งรวมถึงฟีเจอร์ใหม่ๆ มากมาย หลังจากนั้นภาษาก็พัฒนาค่อนข้างช้าจนถึงปี 2554 แต่ในเวลาเดียวกันในปี 1998 มีความพยายามครั้งแรกในการสร้างมาตรฐานภาษาโดยองค์กร ISO (องค์การระหว่างประเทศเพื่อการมาตรฐาน) มาตรฐานแรกเรียกว่า ISO/IEC 14882:1998 หรือเรียกสั้น ๆ ว่า C++98 ต่อมาในปี พ.ศ. 2546 ได้มีการเผยแพร่มาตรฐาน C++03 เวอร์ชันใหม่

ในปี 2011 มาตรฐาน C++11 ใหม่ได้รับการเผยแพร่ ซึ่งมีการเพิ่มเติมมากมายและทำให้ภาษา C++ สมบูรณ์ด้วยฟังก์ชันใหม่จำนวนมาก ต่อจากนี้ มีการเผยแพร่ส่วนเพิ่มเติมเล็กน้อยจากมาตรฐานหรือที่เรียกว่า C++14 ในปี 2014 และภาษาหลักอีกฉบับหนึ่งมีกำหนดเปิดตัวในปี 2560

คอมไพเลอร์และสภาพแวดล้อมการพัฒนา

ในการพัฒนาโปรแกรมในภาษา C++ คุณต้องมีคอมไพลเลอร์ โดยจะแปลซอร์สโค้ดในภาษา C++ ให้เป็นไฟล์ปฏิบัติการ ซึ่งคุณสามารถเรียกใช้ได้ แต่ในขณะนี้มีคอมไพเลอร์ที่แตกต่างกันมากมาย อาจแตกต่างกันในแง่มุมต่าง ๆ โดยเฉพาะในการดำเนินการตามมาตรฐาน รายการคอมไพเลอร์พื้นฐานสำหรับ C++ มีอยู่ใน Wikipedia ขอแนะนำให้พัฒนาเลือกคอมไพเลอร์ที่กำลังพัฒนาและใช้มาตรฐานล่าสุดทั้งหมด ดังนั้น ตลอดบทช่วยสอนนี้ เราจะใช้คอมไพเลอร์ g++ ที่เปิดให้ใช้งานได้ฟรีซึ่งพัฒนาโดยโครงการ GNU เป็นหลัก

คุณยังสามารถใช้ IDE เช่น Visual Studio, Netbeans, Eclipse, Qt ฯลฯ เพื่อสร้างโปรแกรมได้

C++ (อ่าน c-plus-plus) เป็นภาษาโปรแกรมทั่วไปที่คอมไพล์และพิมพ์คงที่ ซึ่งคุณสามารถสร้างโปรแกรมที่ซับซ้อนได้ทุกระดับ
เป็นเวลากว่า 20 ปีแล้วที่ภาษานี้เป็นหนึ่งในสามภาษาการเขียนโปรแกรมที่ได้รับความนิยมและเป็นที่ต้องการมากที่สุด (คุณสามารถตรวจสอบได้โดยไปที่เว็บไซต์ TIOBE)
ภาษานี้ถือกำเนิดขึ้นในช่วงต้นทศวรรษ 1980 เมื่อบียอร์น สตรุสทรัป พนักงานของ Bell Labs ได้พัฒนาภาษา C ขึ้นมาหลายอย่างตามความต้องการของเขาเอง

Bjarne Stroustrup – ผู้สร้างภาษา C++

Stroustrup ตัดสินใจขยายภาษา C ด้วยความสามารถที่พบในภาษา Simula C ซึ่งเป็นภาษาพื้นฐานของระบบ UNIX ที่คอมพิวเตอร์ Bell ใช้นั้น มีความรวดเร็ว มีคุณสมบัติหลากหลาย และพกพาได้ Stroustrup เพิ่มความสามารถในการทำงานกับคลาสและวัตถุ เป็นผลให้ปัญหาการสร้างแบบจำลองในทางปฏิบัติกลายเป็นเรื่องง่ายที่จะแก้ไขทั้งในแง่ของเวลาในการพัฒนา (ขอบคุณการใช้คลาสที่คล้าย Simula) และในแง่ของเวลาในการคำนวณ (ขอบคุณความเร็ว C)
นักพัฒนาภาษาพูดถึงเรื่องนี้อย่างไร:



ในปี 1998 มาตรฐานภาษาแรกที่เรียกว่า C++98 ได้รับการเผยแพร่โดยคณะกรรมการมาตรฐาน C++ มีการพัฒนาอย่างต่อเนื่องเพื่อตอบสนองความต้องการในปัจจุบัน หนึ่งในกลุ่มที่พัฒนาภาษา C++ และส่งข้อเสนอเพื่อปรับปรุงต่อคณะกรรมการมาตรฐาน C++ คือ บูสต์ซึ่งมีส่วนร่วมในการปรับปรุงความสามารถของภาษาโดยการเพิ่มคุณสมบัติเมตาโปรแกรมมิงเหนือสิ่งอื่นใด มาตรฐานล่าสุดเปิดตัวในปี 2560 และมีชื่อว่า ค++17. มาตรฐานถัดไปจะมาในเร็วๆ นี้ และคาดว่าจะปรากฏในปี 2020
ไม่มีใครเป็นเจ้าของสิทธิ์ในภาษา C++ มันฟรี ในเดือนมีนาคม 2559 คณะทำงาน WP21 C++ ถูกสร้างขึ้นในรัสเซีย กลุ่มนี้จัดขึ้นเพื่อรวบรวมข้อเสนอสำหรับมาตรฐาน C++ ส่งไปยังคณะกรรมการ และปกป้องข้อเสนอเหล่านั้นในการประชุมใหญ่ขององค์การระหว่างประเทศเพื่อการมาตรฐาน
C++ เป็นภาษาที่มีหลายกระบวนทัศน์ (จากคำว่า Paradigm ซึ่งเป็นรูปแบบของการเขียนโปรแกรมคอมพิวเตอร์) รวมถึงรูปแบบการเขียนโปรแกรมและเทคโนโลยีที่หลากหลาย มักถูกจัดว่าเป็นภาษาเชิงวัตถุ แต่หากพูดอย่างเคร่งครัด ในกรณีนี้ไม่เป็นเช่นนั้น ในระหว่างขั้นตอนการทำงาน นักพัฒนาจะได้รับอิสระอย่างเต็มที่ในการเลือกเครื่องมือ เพื่อให้ปัญหาที่ได้รับการแก้ไขโดยใช้แนวทางเฉพาะได้รับการแก้ไขอย่างมีประสิทธิภาพมากที่สุด กล่าวอีกนัยหนึ่ง C++ ไม่ได้บังคับให้โปรแกรมเมอร์ยึดติดกับรูปแบบการพัฒนาโปรแกรมเพียงรูปแบบเดียว (เช่น เชิงวัตถุ)
C++ มีไลบรารีมาตรฐานที่หลากหลายซึ่งประกอบด้วยคอนเทนเนอร์และอัลกอริธึมทั่วไป, I/O, นิพจน์ทั่วไป, การสนับสนุนมัลติเธรด และคุณลักษณะอื่นๆ C++ มีอิทธิพลต่อภาษาการเขียนโปรแกรมหลายภาษา รวมถึง: Java, C#, D เนื่องจาก C++ เป็นของตระกูลภาษาตามไวยากรณ์ของภาษา C คุณจึงสามารถเชี่ยวชาญภาษาการเขียนโปรแกรมอื่นในตระกูลนี้ได้อย่างง่ายดาย: JavaScript, PHP , Perl, Objective-C และอื่นๆ อีกมากมาย ฯลฯ รวมถึงภาษาแม่ด้วย - C. ()
ในระหว่างที่มันดำรงอยู่ ภาษา C++ ได้รับความเชื่อผิด ๆ ที่ไม่หยุดยั้งซึ่งถูกหักล้างอย่างง่ายดาย (ดูที่นี่: ส่วนที่ 1 และส่วนที่ 2)

ประวัติความเป็นมาของภาษาและมาตรฐานการเผยแพร่

1983

ผู้สร้างภาษาคือ Björn Stroustrupซึ่งเป็นพนักงานของ Bell Labs ได้เปิดตัวภาษา C++ เวอร์ชันแรกๆ (“C พร้อมคลาส”)

1985

การเปิดตัวเชิงพาณิชย์ครั้งแรกของ C++ ภาษานี้ใช้ชื่อที่ทันสมัย

1986

การเปิดตัว The C++ Programming Language ฉบับพิมพ์ครั้งแรก - หนังสือเกี่ยวกับ C++ ที่เขียนโดย Björn Stroustrup

1998

มาตรฐานสากลสำหรับภาษา C++ ได้รับการรับรองแล้ว: ISO/IEC 14882:1998 “มาตรฐานสำหรับภาษาการเขียนโปรแกรม C++”

2003
2005

รายงานทางเทคนิคของห้องสมุด 1 (TR1) ได้รับการเผยแพร่แล้ว แม้ว่าจะไม่ได้เป็นส่วนหนึ่งของมาตรฐานอย่างเป็นทางการ แต่รายงานก็ได้อธิบายส่วนขยายของไลบรารีมาตรฐานที่ควรรวมไว้ในเวอร์ชันถัดไปของภาษา C++

2011

การเปิดตัวมาตรฐานใหม่ – C++11 หรือ ISO/IEC 14882:2011; มาตรฐานใหม่รวมถึงการเพิ่มเติมในแกนภาษาและการขยายไลบรารีมาตรฐาน รวมถึง TR1 ส่วนใหญ่

2014

การเปิดตัวมาตรฐาน C++14 (“มาตรฐานสากล ISO/IEC 14882:2014(E) ภาษาการเขียนโปรแกรม C++”); C++14 สามารถมองได้ว่าเป็นส่วนขยายขนาดเล็กเหนือ C++11 ซึ่งมีการแก้ไขข้อบกพร่องและการปรับปรุงเล็กน้อยเป็นส่วนใหญ่

2017

การเปิดตัวมาตรฐานใหม่ – C++1z (C++17) มาตรฐานนี้ทำให้เกิดการเปลี่ยนแปลงและเพิ่มเติมมากมาย ตัวอย่างเช่น STD รวมไลบรารีของมาตรฐาน C11 ระบบไฟล์ที่อิงตาม boost::filesystem และไลบรารี TS I รุ่นทดลองส่วนใหญ่

2020

C++20 เป็นชื่ออย่างไม่เป็นทางการของมาตรฐาน ISO/IEC สำหรับภาษาการเขียนโปรแกรม C++ ซึ่งคาดว่าจะเป็นไปตาม C++17 ร่างมาตรฐาน N4800

ปรัชญา C++

ในหนังสือของเขา The Design and Evolution of C++ (2007) Björn Stroustrup อธิบายถึงหลักการที่เขาปฏิบัติตามเมื่อออกแบบ C++ (ตัวย่อ):

  • รับภาษาสำหรับใช้งานทั่วไปพร้อมประเภทข้อมูลคงที่ ประสิทธิภาพ และความสะดวกในการพกพาของภาษา C
  • รองรับรูปแบบการเขียนโปรแกรมที่หลากหลายโดยตรงและครอบคลุม
  • ให้อิสระแก่โปรแกรมเมอร์ในการเลือก แม้ว่าจะเปิดโอกาสให้เขาเลือกผิดก็ตาม
  • รักษาความเข้ากันได้กับ C ให้มากที่สุดเท่าที่จะเป็นไปได้ ดังนั้นจึงทำให้เปลี่ยนจากการเขียนโปรแกรม C ได้ง่าย
  • หลีกเลี่ยงความแตกต่างระหว่าง C และ C++: โครงสร้างใดๆ ที่ถูกต้องในทั้งสองภาษาจะต้องมีความหมายเหมือนกันในแต่ละภาษา และนำไปสู่พฤติกรรมของโปรแกรมเดียวกัน
  • หลีกเลี่ยงฟีเจอร์ที่ขึ้นอยู่กับแพลตฟอร์มหรือไม่เป็นสากล
  • “อย่าจ่ายเงินสำหรับสิ่งที่คุณไม่ได้ใช้” - ไม่มีฟีเจอร์ภาษาใดที่ควรทำให้ประสิทธิภาพของโปรแกรมที่ไม่ได้ใช้ลดลง
  • ไม่ต้องการสภาพแวดล้อมการเขียนโปรแกรมที่ซับซ้อนจนเกินไป

ซี และ ซี++

ไวยากรณ์ของ C++ นั้นสืบทอดมาจากภาษา C แม้ว่าอย่างเป็นทางการหนึ่งในหลักการของ C++ ยังคงรักษาความเข้ากันได้กับภาษา C ในความเป็นจริงกลุ่มมาตรฐานสำหรับภาษาเหล่านี้ไม่มีการโต้ตอบและการเปลี่ยนแปลงที่พวกเขาทำไม่ได้ เพียงแต่ไม่สัมพันธ์กัน แต่มักจะขัดแย้งกันในเชิงอุดมการณ์โดยพื้นฐาน ดังนั้น องค์ประกอบที่มาตรฐาน C ใหม่เพิ่มให้กับเคอร์เนลจึงอยู่ในองค์ประกอบมาตรฐาน C++ ของไลบรารีมาตรฐาน และไม่ได้อยู่ในเคอร์เนลเลย ตัวอย่างเช่น อาร์เรย์แบบไดนามิก อาร์เรย์ที่มีขอบเขตคงที่ สิ่งอำนวยความสะดวกในการประมวลผลแบบขนาน จากข้อมูลของ Stroustrup การผสมผสานการพัฒนาของทั้งสองภาษานี้จะเป็นประโยชน์อย่างยิ่ง แต่ก็ไม่น่าจะเป็นไปได้ด้วยเหตุผลทางการเมือง ดังนั้นความเข้ากันได้ในทางปฏิบัติระหว่าง C และ C++ จะค่อยๆ หายไป
ในตัวอย่างนี้ ขึ้นอยู่กับคอมไพเลอร์ที่ใช้ "C++" หรือ "C" จะถูกส่งออก:

โปรแกรม 9.1

#รวม int main() ( printf("%s\n", (sizeof("a") == sizeof(char)) ? "C++" : "C"); return 0; )

นี่เป็นเพราะความจริงที่ว่าค่าคงที่อักขระใน C เป็นประเภท int และใน C++ เป็นประเภท char แต่ขนาดของประเภทเหล่านี้แตกต่างกัน

โมเดลวงจรการใช้งานของแอปพลิเคชัน

วงจรชีวิตซอฟต์แวร์คือช่วงเวลาที่เริ่มต้นจากช่วงเวลาที่ตัดสินใจเกี่ยวกับความจำเป็นในการสร้างผลิตภัณฑ์ซอฟต์แวร์และสิ้นสุดในขณะที่ถูกถอนออกจากบริการโดยสมบูรณ์ วงจรนี้เป็นกระบวนการสร้างและพัฒนาซอฟต์แวร์ มีโมเดลวงจรชีวิตหลายแบบ
โมเดลน้ำตกวงจรชีวิต (แบบจำลองน้ำตกภาษาอังกฤษ) ถูกเสนอในปี 1970 โดย Winston Royce จัดให้มีการดำเนินการตามลำดับของทุกขั้นตอนของโครงการในลำดับคงที่อย่างเคร่งครัด การเปลี่ยนไปสู่ขั้นต่อไปหมายถึงงานที่สมบูรณ์ในขั้นก่อนหน้า ข้อกำหนดที่กำหนดในขั้นตอนของการสร้างข้อกำหนดนั้นได้รับการบันทึกไว้อย่างเคร่งครัดในรูปแบบของข้อกำหนดทางเทคนิคและจะถูกบันทึกไว้สำหรับการพัฒนาทั้งหมดของโครงการ แต่ละขั้นตอนจะสิ้นสุดลงด้วยการปล่อยชุดเอกสารที่สมบูรณ์เพียงพอเพื่อให้ทีมพัฒนาอื่นสามารถดำเนินการพัฒนาต่อไปได้
ขั้นตอนโครงการตามแบบจำลองน้ำตก:

  1. การก่อตัวของข้อกำหนด
  2. ออกแบบ;
  3. การดำเนินงาน;
  4. การทดสอบ;
  5. การดำเนินงาน;
  6. การดำเนินงานและการบำรุงรักษา.

ในแบบจำลองแบบเรียงซ้อน การเปลี่ยนจากระยะโครงการหนึ่งไปยังอีกระยะหนึ่งจะถือว่าผลลัพธ์ของระยะก่อนหน้านั้นถูกต้องโดยสมบูรณ์ ในโครงการขนาดใหญ่ แทบจะเป็นไปไม่ได้เลยที่จะบรรลุผลสำเร็จ ดังนั้นโมเดลนี้จึงเหมาะสำหรับการพัฒนาโครงการขนาดเล็กเท่านั้น (ดับเบิลยู. รอยซ์เองไม่ได้ยึดติดกับแบบจำลองนี้และใช้แบบจำลองซ้ำ)
รูปแบบการวนซ้ำ
อีกทางเลือกหนึ่งสำหรับแบบจำลองแบบเรียงซ้อนคือแบบจำลองการพัฒนาซ้ำและแบบเพิ่มหน่วย (IID) ซึ่งได้รับจาก T. Gilb ในยุค 70 ชื่อของแบบจำลองวิวัฒนาการ โมเดล IID เกี่ยวข้องกับการแบ่งวงจรชีวิตของโปรเจ็กต์ออกเป็นลำดับของการวนซ้ำ ซึ่งแต่ละรอบจะมีลักษณะคล้ายกับ "มินิโปรเจ็กต์" รวมถึงกระบวนการพัฒนาทั้งหมดที่นำไปใช้กับการสร้างฟังก์ชันการทำงานเล็กๆ น้อยๆ เมื่อเปรียบเทียบกับโปรเจ็กต์โดยรวม เป้าหมายของการวนซ้ำแต่ละครั้งคือการได้รับเวอร์ชันที่ใช้งานได้ของระบบซอฟต์แวร์ รวมถึงฟังก์ชันการทำงานที่กำหนดโดยเนื้อหาที่ผสานรวมของการวนซ้ำก่อนหน้าและปัจจุบันทั้งหมด ผลลัพธ์ของการวนซ้ำครั้งสุดท้ายประกอบด้วยฟังก์ชันที่จำเป็นทั้งหมดของผลิตภัณฑ์ ดังนั้น เมื่อเสร็จสิ้นการวนซ้ำแต่ละครั้ง ผลิตภัณฑ์จะได้รับการเพิ่มขึ้น - เพิ่มขึ้น - ขีดความสามารถของผลิตภัณฑ์ ซึ่งดังนั้นจึงพัฒนาแบบวิวัฒนาการ


แนวทางการพัฒนาซ้ำหลายแบบถูกนำมาใช้ในวิธีการพัฒนาสมัยใหม่ส่วนใหญ่:

กระบวนการพัฒนา - กระบวนการรวมเหตุผล (RUP)

กระบวนการรวมเหตุผลแบบมีเหตุผล (RUP)(กระบวนการแบบรวมเหตุผล) เป็นวิธีการพัฒนาซอฟต์แวร์ที่ดูแลโดย Rational Software (IBM) วิธีการให้คำแนะนำสำหรับทุกขั้นตอนของการพัฒนา: ตั้งแต่การสร้างแบบจำลองธุรกิจไปจนถึงการทดสอบและการว่าจ้างโปรแกรมที่เสร็จสมบูรณ์ Unified Modeling Language (UML) ใช้เป็นภาษาการสร้างแบบจำลอง
วงจรชีวิตการพัฒนาผลิตภัณฑ์ที่สมบูรณ์ประกอบด้วยสี่ระยะ ซึ่งแต่ละระยะจะมีการทำซ้ำอย่างน้อยหนึ่งครั้ง

  • ระยะเริ่มแรก (Inception)
  • การกำหนดขอบเขตของโครงการและปริมาณทรัพยากรที่ต้องการ มีการกำหนดข้อกำหนดพื้นฐาน ข้อจำกัด และฟังก์ชันการทำงานที่สำคัญของผลิตภัณฑ์ มีการประเมินความเสี่ยง การวางแผนปฏิบัติการ เมื่อสิ้นสุดระยะเริ่มแรก จะมีการประเมินความสำเร็จของเป้าหมายวงจรชีวิต ซึ่งคาดว่าจะมีข้อตกลงระหว่างผู้มีส่วนได้ส่วนเสียในการดำเนินโครงการต่อไป

  • ชี้แจง
  • ข้อกำหนดด้านเอกสาร การออกแบบ การใช้งาน และการทดสอบสถาปัตยกรรมปฏิบัติการ ชี้แจงข้อกำหนดและค่าใช้จ่าย การลดความเสี่ยงที่สำคัญ การบรรลุผลสำเร็จของขั้นตอนการพัฒนาหมายถึงการบรรลุเป้าหมายสำคัญของ Lifecycle Architecture

  • การก่อสร้าง
  • ในขั้นตอน "สร้าง" ฟังก์ชันส่วนใหญ่ของผลิตภัณฑ์จะถูกนำไปใช้: การออกแบบแอปพลิเคชันเสร็จสมบูรณ์ มีการเขียนซอร์สโค้ด ขั้นตอนการสร้างจะสิ้นสุดด้วยการเปิดตัวระบบภายนอกครั้งแรกและหลักชัยของความสามารถในการปฏิบัติงานเบื้องต้น

  • การแนะนำ
  • ในขั้นตอน "การนำไปใช้งาน" เวอร์ชันสุดท้ายของผลิตภัณฑ์จะถูกสร้างขึ้นและถ่ายโอนจากนักพัฒนาไปยังลูกค้า ซึ่งรวมถึงโปรแกรมการทดสอบเบต้า การฝึกอบรมผู้ใช้ และการพิจารณาคุณภาพของผลิตภัณฑ์ ในกรณีที่คุณภาพไม่เป็นไปตามความคาดหวังของผู้ใช้หรือเกณฑ์ที่กำหนดไว้ในระยะเริ่มต้น ระยะการใช้งานจะถูกทำซ้ำอีกครั้ง การบรรลุเป้าหมายทั้งหมดหมายถึงการบรรลุเป้าหมายการเปิดตัวผลิตภัณฑ์และดำเนินการวงจรการพัฒนาทั้งหมดให้เสร็จสิ้น



“เทคโนโลยีสารสนเทศ วิศวกรรมระบบและซอฟต์แวร์ กระบวนการวงจรชีวิตของซอฟต์แวร์" มาตรฐานนี้ได้รับการรับรองโดยหน่วยงานกลางด้านกฎระเบียบทางเทคนิคและมาตรวิทยาแห่งสหพันธรัฐรัสเซีย และคล้ายคลึงกับมาตรฐานสากล ISO/IEC 12207:2008 มาตรฐานนี้กำหนดโครงสร้างทั่วไปของกระบวนการวงจรชีวิตซอฟต์แวร์ที่สามารถปฏิบัติตามได้ในอุตสาหกรรมซอฟต์แวร์ มาตรฐานไม่ได้เสนอแบบจำลองวงจรชีวิตที่เฉพาะเจาะจง ข้อกำหนดนี้เป็นเรื่องปกติสำหรับโมเดลวงจรชีวิต วิธีการ และเทคโนโลยีสำหรับการสร้างซอฟต์แวร์ อธิบายโครงสร้างของกระบวนการวงจรชีวิตโดยไม่ระบุวิธีดำเนินการหรือทำกิจกรรมและงานที่รวมอยู่ในกระบวนการเหล่านั้น

การนำเสนอสำหรับบทเรียน
หัวข้อข้อความ
  • มูลนิธิซอฟต์แวร์เสรี (FSF)
  • ลิขสิทธิ์ซอฟต์แวร์ฟรี
  • ซอฟต์แวร์ฟรีและโอเพ่นซอร์ส
  • ประวัติความเป็นมาของการพัฒนาภาษาโปรแกรม
  • ประวัติความเป็นมาของภาษาซี C และ C++
  • เรื่องราว
  • คำติชมของ C++
  • ประวัติความเป็นมาของยูนิกซ์
  • แบบจำลองวงจรชีวิตของซอฟต์แวร์แบบเกลียว
  • UML (ภาษาการสร้างแบบจำลองแบบรวม)
  • กรอบโซลูชันของ Microsoft
  • IDE สำหรับการเขียนโปรแกรม C/C++ บน Windows
  • คอมไพเลอร์ C/C++
  • การสร้างแอปพลิเคชันคอนโซลบน Windows
คำถาม
  1. เหตุใดการพัฒนาซอฟต์แวร์โมเดลน้ำตกจึงไม่ใช้ในโครงการขนาดใหญ่
  2. อะไรคือความแตกต่างระหว่างโมเดลการพัฒนาแบบน้ำตกและแบบวนซ้ำ?
  3. แสดงรายการขั้นตอนของการพัฒนาซอฟต์แวร์ในระเบียบวิธี Rational Unified Process (RUP)

บทความนี้จะกล่าวถึงฟังก์ชัน scanf() ในลักษณะทั่วไปโดยไม่มีการอ้างอิงถึงมาตรฐานเฉพาะ ดังนั้นข้อมูลจากมาตรฐาน C99, C11, C++11, C++14 ใดๆ จึงรวมอยู่ที่นี่ อาจเป็นไปได้ว่าในบางมาตรฐานฟังก์ชันทำงานแตกต่างจากเนื้อหาที่นำเสนอในบทความ

ฟังก์ชั่น scanf C - คำอธิบาย

scanf() เป็นฟังก์ชันที่อยู่ในไฟล์ส่วนหัวของ stdio.h(C) และ cstdio(C++) หรือเรียกอีกอย่างว่าอินพุตที่จัดรูปแบบแล้วของโปรแกรม scanf อ่านอักขระจากอินพุตมาตรฐาน (stdin) และแปลงตามรูปแบบ จากนั้นเขียนลงในตัวแปรที่ระบุ รูปแบบหมายความว่าเมื่อได้รับข้อมูลแล้วจะถูกลดขนาดลงเป็นรูปแบบใดรูปแบบหนึ่ง ดังนั้นฟังก์ชัน scanf C จึงอธิบายไว้:

scanf("%format", &variable1[, &variable2,[…]]),

โดยที่ตัวแปรถูกส่งผ่านเป็นที่อยู่ เหตุผลในการส่งตัวแปรไปยังฟังก์ชันในลักษณะนี้ชัดเจน เนื่องจากผลของการดำเนินการ จะส่งคืนค่าที่ระบุว่ามีข้อผิดพลาด ดังนั้นวิธีเดียวที่จะเปลี่ยนค่าของตัวแปรคือการส่งผ่านที่อยู่ นอกจากนี้ ด้วยวิธีนี้ ฟังก์ชันจึงสามารถประมวลผลข้อมูลประเภทใดก็ได้

โปรแกรมเมอร์บางคนเรียกใช้ฟังก์ชันต่างๆ เช่น scanf() หรือ printf() โพรซีเดอร์ เนื่องจากการเปรียบเทียบกับภาษาอื่น

Scanf ช่วยให้คุณสามารถป้อนภาษาพื้นฐานทุกประเภท: char, int, float, string ฯลฯ ในกรณีของตัวแปรประเภทสตริงไม่จำเป็นต้องระบุเครื่องหมายที่อยู่ - "&" เนื่องจากตัวแปรประเภทสตริงคืออาร์เรย์และชื่อของมันคือที่อยู่ขององค์ประกอบแรกของอาร์เรย์ในหน่วยความจำคอมพิวเตอร์ .

รูปแบบการป้อนข้อมูลหรือสตริงควบคุม

เริ่มต้นด้วยการดูตัวอย่างการใช้ฟังก์ชัน scanf C จากคำอธิบาย

#รวม int main() ( int x; while (scanf("%d", &x) == 1) printf("%d\n", x); return 0; // ข้อกำหนดสำหรับระบบ linux )

รูปแบบอินพุตประกอบด้วยพารามิเตอร์สี่ตัวต่อไปนี้: ประเภท %[*][width][modifiers] ในกรณีนี้ ต้องใช้เครื่องหมายและประเภท "%" นั่นคือรูปแบบขั้นต่ำจะเป็นดังนี้: “%s”, “%d” และอื่นๆ

โดยทั่วไป อักขระที่ประกอบเป็นสตริงรูปแบบจะแบ่งออกเป็น:

  • ตัวระบุรูปแบบ - ทุกสิ่งที่ขึ้นต้นด้วยสัญลักษณ์ %
  • อักขระแยกหรือช่องว่าง - ได้แก่ ช่องว่าง แท็บ (\t) บรรทัดใหม่ (\n);
  • อักขระอื่นที่ไม่ใช่ช่องว่าง

ฟังก์ชั่นอาจไม่ปลอดภัย

ใช้ scanf_s() แทน scanf()

(โพสต์โดย Visual Studio)

พิมพ์หรือจัดรูปแบบตัวระบุหรืออักขระการแปลงหรืออักขระควบคุม

อย่างน้อยคำอธิบายของ scanf C ต้องมีตัวระบุรูปแบบ ซึ่งระบุไว้ที่ส่วนท้ายของนิพจน์ที่ขึ้นต้นด้วยเครื่องหมาย "%" มันบอกโปรแกรมถึงประเภทของข้อมูลที่คาดหวังเมื่อป้อนข้อมูล ซึ่งมักจะมาจากคีย์บอร์ด รายการตัวระบุรูปแบบทั้งหมดอยู่ในตารางด้านล่าง

ความหมาย

โปรแกรมจะรอให้ป้อนอักขระ ตัวแปรที่จะเขียนต้องเป็นประเภทอักขระอักขระ

โปรแกรมคาดว่าจะป้อนเลขทศนิยมจำนวนเต็ม ตัวแปรต้องเป็นประเภท int

โปรแกรมคาดหวังจำนวนจุดลอยตัวในรูปแบบเลขชี้กำลัง ตัวแปรต้องเป็นประเภท float

โปรแกรมคาดว่าจะป้อนจำนวนจุดลอยตัว ตัวแปรต้องเป็นประเภท float

7

โปรแกรมคาดว่าจะป้อนจำนวนจุดลอยตัว ตัวแปรต้องเป็นประเภท float

โปรแกรมคาดว่าจะป้อนเลขฐานแปด ตัวแปรต้องเป็นประเภท int

โปรแกรมคาดว่าจะป้อนสตริง สตริงถือเป็นชุดของอักขระใดๆ จนถึงอักขระตัวคั่นตัวแรกที่พบ ตัวแปรต้องเป็นประเภทสตริง

โปรแกรมคาดว่าจะป้อนเลขฐานสิบหก ตัวแปรต้องเป็นประเภท int

ตัวแปรคาดหวังอินพุตตัวชี้ ตัวแปรจะต้องเป็นประเภทตัวชี้

เขียนค่าจำนวนเต็มให้กับตัวแปรเท่ากับจำนวนอักขระที่ฟังก์ชัน scanf อ่านจนถึงตอนนี้

โปรแกรมอ่านจำนวนเต็มที่ไม่ได้ลงนาม ประเภทตัวแปรต้องเป็นจำนวนเต็มที่ไม่ได้ลงนาม

โปรแกรมคาดว่าจะป้อนเลขฐานสอง ตัวแปรต้องเป็นประเภท int

ชุดอักขระที่สามารถสแกนได้ โปรแกรมรอการป้อนอักขระจากพูลที่จำกัดซึ่งระบุไว้ระหว่าง scanf และจะทำงานตราบเท่าที่มีอักขระจากชุดที่ระบุในสตรีมอินพุต

อักขระในสตริงรูปแบบ

เครื่องหมายดอกจัน (*)

เครื่องหมายดอกจัน (*) คือแฟล็กที่ระบุว่าควรระงับการดำเนินการกำหนด เครื่องหมายดอกจันจะอยู่หลังเครื่องหมาย “%” ทันที ตัวอย่างเช่น,

Scanf("%d%*c%d", &x, &y); //ละเว้นอักขระระหว่างจำนวนเต็มสองตัว scanf("%s%*d%s", str, str2); //ละเว้นจำนวนเต็มระหว่างสองสาย

นั่นคือหากคุณป้อนบรรทัด "45-20" ในคอนโซลโปรแกรมจะดำเนินการดังต่อไปนี้:

  1. ตัวแปร "x" จะได้รับการกำหนดค่า 45
  2. ตัวแปร "y" จะถูกกำหนดค่าเป็น 20
  3. และเครื่องหมายลบ (เส้นประ) “-” จะถูกละเว้นเนื่องจาก “%*c”

ความกว้าง (หรือความกว้างของฟิลด์)

นี่คือจำนวนเต็มระหว่างเครื่องหมาย "%" และตัวระบุรูปแบบที่ระบุจำนวนอักขระสูงสุดที่จะอ่านระหว่างการดำเนินการอ่านปัจจุบัน

มีประเด็นสำคัญบางประการที่ควรคำนึงถึง:

  1. scanf จะหยุดทำงานหากพบอักขระตัวคั่น แม้ว่าจะยังไม่นับ 20 อักขระก็ตาม
  2. หากอินพุตมีอักขระมากกว่า 20 ตัว เฉพาะ 20 ตัวแรกเท่านั้นที่จะถูกเขียนลงในตัวแปร str

ตัวดัดแปลงประเภท (หรือความแม่นยำ)

สิ่งเหล่านี้คือแฟล็กพิเศษที่ปรับเปลี่ยนประเภทของข้อมูลที่คาดหวังสำหรับการป้อนข้อมูล ธงถูกระบุทางด้านซ้ายของตัวระบุประเภท:

  • L หรือ l (L ตัวเล็ก) เมื่อใช้ "l" กับตัวระบุ d, i, o, u, x แฟล็กจะบอกโปรแกรมให้คาดหวังอินพุตประเภท long int เมื่อใช้ "l" กับตัวระบุ e หรือ f แฟล็กจะบอกโปรแกรมว่าควรป้อนค่าสองเท่า การใช้ "L" เป็นการบอกโปรแกรมว่าต้องการค่าประเภท long double การใช้ "l" กับตัวระบุ "c" และ "s" จะบอกโปรแกรมว่าควรใช้อักขระแบบไบต์คู่ประเภท wchar_t ตัวอย่างเช่น "%lc", "%ls", "%l"
  • h คือธงที่ระบุประเภทสั้น
  • hh - ระบุว่าตัวแปรเป็นตัวชี้ไปยังค่าประเภทถ่านที่ลงนามหรือถ่านที่ไม่ได้ลงนาม สามารถใช้แฟล็กกับตัวระบุ d, i, o, u, x, n
  • ll (L ขนาดเล็กสองตัว) - ระบุว่าตัวแปรเป็นตัวชี้ไปยังค่าประเภท signed int หรือ int ยาวที่ไม่ได้ลงนาม แฟล็กใช้กับตัวระบุ: d, i, o, u, x, n
  • j - แสดงว่าตัวแปรเป็นตัวชี้สำหรับพิมพ์ intmax_t หรือ uintmax_t จากไฟล์ส่วนหัว stdint.h ใช้กับตัวระบุ: d, i, o, u, x, n
  • z - แสดงว่าตัวแปรเป็นตัวชี้สำหรับพิมพ์ size_t ซึ่งมีคำจำกัดความอยู่ใน stddef.h ใช้กับตัวระบุ: d, i, o, u, x, n
  • t - แสดงว่าตัวแปรเป็นตัวชี้ให้พิมพ์ ptrdiff_t คำจำกัดความสำหรับประเภทนี้อยู่ใน stddef.h ใช้กับตัวระบุ: d, i, o, u, x, n

รูปภาพที่มีตัวปรับแต่งสามารถนำเสนอได้ชัดเจนยิ่งขึ้นในรูปแบบของตาราง คำอธิบายของ scanf C นี้จะชัดเจนยิ่งขึ้นสำหรับโปรแกรมเมอร์

ตัวละครอื่นๆ

อักขระใด ๆ ที่พบในรูปแบบจะถูกละทิ้ง เป็นที่น่าสังเกตว่าการมีช่องว่างหรืออักขระคั่น (ขึ้นบรรทัดใหม่ เว้นวรรค แท็บ) ในสตริงควบคุมสามารถนำไปสู่พฤติกรรมที่แตกต่างกันของฟังก์ชันได้ ในเวอร์ชันหนึ่ง scanf() จะอ่านโดยไม่บันทึกตัวคั่นจำนวนเท่าใดก็ได้จนกว่าจะพบอักขระอื่นที่ไม่ใช่ตัวคั่น และในอีกเวอร์ชันหนึ่ง การเว้นวรรค (เฉพาะอักขระเหล่านั้น) จะไม่มีความสำคัญ และนิพจน์ "%d + %d" จะเทียบเท่ากัน เป็น "% d+%d"

ตัวอย่าง

มาดูตัวอย่างต่างๆ เพื่อช่วยให้คุณคิดและเข้าใจวิธีการทำงานของฟังก์ชันได้แม่นยำยิ่งขึ้น

Scanf("%3s", str); //หากคุณป้อนบรรทัด “1d2s3d1;3” ในคอนโซล เฉพาะ “1d2” เท่านั้นที่จะถูกเขียนลงใน str scanf("%dminus%d", &x, &y); //อักขระลบระหว่างตัวเลขสองตัวจะถูกละทิ้ง scanf("%5", str); //อักขระจะถูกป้อนลงใน str จนกว่าจะมี 5 ตัว และอักขระเป็นตัวเลขตั้งแต่ 0 ถึง 9 scanf("%lf", &d); //อินพุตที่คาดหวังประเภท double scanf("%hd", &x); //คาดว่าจะมีหลายประเภท scanf("%hu", &y); //คาดว่าจะมีหลายประเภท scanf("lx", &z); //จำนวนประเภทที่คาดหวัง int ยาว

จากตัวอย่างที่ให้มา คุณจะเห็นว่าตัวเลขที่คาดหวังเปลี่ยนแปลงไปอย่างไรโดยใช้สัญลักษณ์ต่างๆ

scanf C - คำอธิบายสำหรับผู้เริ่มต้น

ส่วนนี้จะเป็นประโยชน์สำหรับผู้เริ่มต้น บ่อยครั้งที่คุณไม่จำเป็นต้องมีคำอธิบายที่สมบูรณ์ของ scanf C มากนัก แต่ควรมีรายละเอียดเกี่ยวกับวิธีการทำงานของฟังก์ชันด้วย

  • ฟังก์ชั่นค่อนข้างล้าสมัย มีการใช้งานที่แตกต่างกันหลายประการในไลบรารีที่มีเวอร์ชันต่างกัน ตัวอย่างเช่น ฟังก์ชัน scanf S C ที่ปรับปรุงแล้ว ซึ่งมีคำอธิบายอยู่ในเว็บไซต์ Microsoft
  • จำนวนตัวระบุในรูปแบบต้องสอดคล้องกับจำนวนอาร์กิวเมนต์ที่ส่งไปยังฟังก์ชัน
  • องค์ประกอบของอินพุตสตรีมจะต้องคั่นด้วยอักขระคั่นเท่านั้น: เว้นวรรค แท็บ ขึ้นบรรทัดใหม่ เครื่องหมายจุลภาค อัฒภาค จุด ฯลฯ - อักขระเหล่านี้ไม่ใช่ตัวคั่นสำหรับฟังก์ชัน scanf()
  • หาก scanf พบอักขระตัวคั่น อินพุตจะหยุดลง หากมีตัวแปรให้อ่านมากกว่าหนึ่งตัว scanf จะไปยังการอ่านตัวแปรถัดไป
  • ความคลาดเคลื่อนเพียงเล็กน้อยในรูปแบบของข้อมูลอินพุตนำไปสู่ผลลัพธ์ที่คาดเดาไม่ได้จากโปรแกรม เป็นการดีถ้าโปรแกรมจบลงด้วยข้อผิดพลาด แต่บ่อยครั้งที่โปรแกรมยังคงทำงานต่อไปและทำงานไม่ถูกต้อง
  • scanf("%20s ...", ...); หากสตรีมอินพุตเกิน 20 อักขระ scanf จะอ่านอักขระ 20 ตัวแรกแล้วยุติหรืออ่านต่อเพื่ออ่านตัวแปรถัดไป หากระบุไว้ การเรียก scanf ครั้งถัดไปจะอ่านสตรีมอินพุตต่อจากที่ที่การเรียก scanf ก่อนหน้านี้ค้างไว้ หากพบอักขระตัวคั่นขณะอ่านอักขระ 20 ตัวแรก scanf จะหยุดทำงานหรือไปยังการอ่านตัวแปรถัดไป แม้ว่าตัวแปรแรกจะไม่ได้อ่านอักขระ 20 ตัวก็ตาม ในกรณีนี้ อักขระที่นับไม่ได้ทั้งหมดจะถูกแนบไปกับตัวแปรถัดไป
  • หากชุดอักขระที่จะสแกนเริ่มต้นด้วยเครื่องหมาย "^" จากนั้น scanf จะอ่านข้อมูลจนกว่าจะพบอักขระตัวคั่นหรืออักขระจากชุด ตัวอย่างเช่น "%[^A-E1-5]" จะอ่านข้อมูลจากสตรีมจนกว่าจะพบอักขระภาษาอังกฤษตัวพิมพ์ใหญ่ตัวใดตัวหนึ่ง A ถึง E หรือหนึ่งในตัวเลข 1 ถึง 5
  • ฟังก์ชัน scanf C ตามที่อธิบายไว้ จะส่งคืนตัวเลขเท่ากับจำนวนรายการเข้าตัวแปรที่สำเร็จ หาก scanf เขียนตัวแปร 3 ตัว ผลลัพธ์ของการดำเนินการฟังก์ชันที่ประสบความสำเร็จคือการส่งคืนตัวเลข 3 หาก scanf ไม่สามารถเขียนตัวแปรใดๆ ได้ ผลลัพธ์จะเป็น 0 และสุดท้าย หาก scanf ไม่สามารถเริ่มทำงานที่ ด้วยเหตุผลบางอย่าง ผลลัพธ์จะเป็น EOF
  • หากฟังก์ชัน scanf() ทำงานไม่ถูกต้อง ตัวอย่างเช่น scanf("%d", &x) - คาดว่าจะเป็นตัวเลข แต่ได้รับสัญลักษณ์เป็นอินพุต การเรียก scanf() ครั้งถัดไปจะเริ่มต้นจากจุดในสตรีมอินพุตที่การเรียกใช้ฟังก์ชันก่อนหน้านี้สิ้นสุดลง เพื่อเอาชนะปัญหานี้ คุณต้องกำจัดตัวละครที่เป็นปัญหาออกไป ซึ่งสามารถทำได้ เช่น โดยการเรียก scanf("%*s") นั่นคือฟังก์ชันจะอ่านสตริงอักขระแล้วโยนทิ้งไป ด้วยวิธีที่ชาญฉลาดนี้ คุณสามารถป้อนข้อมูลที่จำเป็นต่อไปได้
  • การใช้งาน scanf() บางอย่างไม่อนุญาตให้ใช้ "-" ในชุดอักขระที่จะสแกน
  • ตัวระบุ “%c” อ่านอักขระแต่ละตัวจากสตรีม นั่นคือมันยังอ่านอักขระตัวคั่นด้วย หากต้องการข้ามอักขระตัวคั่นและอ่านอักขระที่ต้องการต่อไป คุณสามารถใช้ "%1s"
  • เมื่อใช้ตัวระบุ “c” คุณสามารถใช้ความกว้าง “%10c” ได้ แต่คุณจะต้องส่งอาร์เรย์ขององค์ประกอบประเภท char เป็นตัวแปรไปยังฟังก์ชัน scanf
  • “%” หมายถึง “ตัวอักษรขนาดเล็กทั้งหมดของตัวอักษรภาษาอังกฤษ” และ “%” หมายถึงอักขระ 3 ตัว: 'z', 'a', '-' กล่าวอีกนัยหนึ่ง อักขระ "-" หมายถึงช่วงเท่านั้นหากปรากฏระหว่างอักขระสองตัวที่อยู่ในลำดับที่ถูกต้อง หาก "-" อยู่ท้ายนิพจน์ ที่จุดเริ่มต้น หรือเรียงลำดับอักขระผิดด้านใดด้านหนึ่ง แสดงว่าเป็นเพียงอักขระยัติภังค์ ไม่ใช่ช่วง

บทสรุป

นี่เป็นการสรุปคำอธิบายของ scanf C ซึ่งเป็นฟังก์ชันอำนวยความสะดวกที่ดีสำหรับการทำงานในโปรแกรมขนาดเล็กและเมื่อใช้วิธีการเขียนโปรแกรมตามขั้นตอน อย่างไรก็ตาม ข้อเสียเปรียบหลักคือจำนวนข้อผิดพลาดที่คาดเดาไม่ได้ที่อาจเกิดขึ้นเมื่อใช้ scanf ดังนั้นจึงเป็นการดีที่สุดที่จะเก็บคำอธิบายของ scanf C ไว้ต่อหน้าต่อตาเมื่อเขียนโปรแกรม ในโครงการมืออาชีพขนาดใหญ่ iostreams ถูกนำมาใช้เนื่องจากมีความสามารถในระดับที่สูงกว่า สามารถตรวจจับและประมวลผลข้อผิดพลาดได้ดีกว่า และยังทำงานกับข้อมูลจำนวนมากได้อีกด้วย ควรสังเกตว่าคำอธิบายของ scanf C ในภาษารัสเซียนั้นมีอยู่ในแหล่งข้อมูลออนไลน์หลายแห่ง รวมถึงตัวอย่างการใช้งานเนื่องจากอายุของฟังก์ชัน ดังนั้นหากจำเป็น คุณสามารถค้นหาคำตอบได้ในฟอรัมเฉพาะเรื่อง

บทช่วยสอนเหล่านี้เหมาะสำหรับทุกคน ไม่ว่าคุณจะเพิ่งเริ่มเขียนโปรแกรมหรือมีประสบการณ์ด้านการเขียนโปรแกรมในภาษาอื่นมาอย่างยาวนานก็ตาม! เนื้อหานี้เหมาะสำหรับผู้ที่ต้องการเรียนรู้ภาษา C/C++ ตั้งแต่พื้นฐานไปจนถึงโครงสร้างที่ซับซ้อนที่สุด

C++ เป็นภาษาโปรแกรม ความรู้เกี่ยวกับภาษาโปรแกรมนี้จะช่วยให้คุณสามารถควบคุมคอมพิวเตอร์ของคุณได้ในระดับสูงสุด ตามหลักการแล้ว คุณจะสามารถทำให้คอมพิวเตอร์ทำทุกอย่างที่คุณต้องการได้ เว็บไซต์ของเราจะช่วยให้คุณเชี่ยวชาญภาษาการเขียนโปรแกรม C++

การติดตั้ง /IDE

สิ่งแรกที่คุณควรทำก่อนเริ่มเรียน C++ คือต้องแน่ใจว่าคุณมี IDE ซึ่งเป็นสภาพแวดล้อมการพัฒนาแบบรวม (โปรแกรมที่คุณจะเขียนโปรแกรม) หากคุณไม่มี IDE คุณก็ไปได้เลย เมื่อคุณตัดสินใจเลือก IDE แล้ว ให้ติดตั้งและฝึกสร้างโปรเจ็กต์ง่ายๆ

รู้เบื้องต้นเกี่ยวกับ C ++

ภาษา C++ คือชุดคำสั่งที่บอกให้คอมพิวเตอร์ทราบว่าต้องทำอย่างไร ชุดคำสั่งนี้มักเรียกว่าซอร์สโค้ดหรือโค้ดเพียงอย่างเดียว คำสั่งอาจเป็น "ฟังก์ชัน" หรือ "คำสำคัญ" คำหลัก (คำสงวน C/C++) เป็นองค์ประกอบพื้นฐานของภาษา ฟังก์ชันต่างๆ เป็นองค์ประกอบที่ซับซ้อนเนื่องจากเขียนขึ้นในแง่ของฟังก์ชันที่เรียบง่ายกว่า คุณจะเห็นสิ่งนี้ในโปรแกรมแรกของเรา ซึ่งแสดงไว้ด้านล่าง โครงสร้างของฟังก์ชันนี้มีลักษณะคล้ายกับเนื้อหาของหนังสือ เนื้อหาสามารถแสดงบทต่างๆ ของหนังสือ แต่ละบทในหนังสือสามารถมีเนื้อหาเป็นของตัวเองซึ่งประกอบด้วยย่อหน้า แต่ละย่อหน้าสามารถมีย่อหน้าย่อยของตัวเองได้ แม้ว่า C++ จะมีฟังก์ชันทั่วไปและคำสงวนมากมายที่คุณสามารถใช้ได้ แต่ก็ยังจำเป็นต้องเขียนฟังก์ชันของคุณเอง

เริ่มที่ส่วนไหนของโปรแกรม? แต่ละโปรแกรมในภาษา C++ มีฟังก์ชันเดียว เรียกว่าฟังก์ชันหลักหรือฟังก์ชันหลัก การทำงานของโปรแกรมจะเริ่มต้นด้วยฟังก์ชันนี้ จากฟังก์ชันหลัก คุณยังสามารถเรียกใช้ฟังก์ชันอื่นๆ ได้ ไม่ว่าจะเป็นฟังก์ชันที่เราเขียนหรือตามที่คอมไพเลอร์จัดเตรียมไว้ข้างต้น

แล้วคุณจะเข้าถึงคุณสมบัติมาตรฐานเหล่านี้ได้อย่างไร? ในการเข้าถึงฟังก์ชันมาตรฐานที่มาพร้อมกับคอมไพเลอร์ คุณต้องรวมไฟล์ส่วนหัวโดยใช้คำสั่ง preprocessor - #include เหตุใดสิ่งนี้จึงมีประสิทธิภาพ? ลองดูตัวอย่างโปรแกรมการทำงาน:

#รวม << "Моя первая программа на С++\n"; cin.get(); }

ให้เราพิจารณารายละเอียดองค์ประกอบของโปรแกรม #include เป็นคำสั่ง "ตัวประมวลผลล่วงหน้า" ที่บอกให้คอมไพเลอร์ใส่โค้ดจากไฟล์ส่วนหัว iostream ลงในโปรแกรมของเราก่อนที่จะสร้างไฟล์ปฏิบัติการ ด้วยการเชื่อมต่อไฟล์ส่วนหัวเข้ากับโปรแกรม คุณจะสามารถเข้าถึงฟังก์ชันต่างๆ มากมายที่คุณสามารถใช้ในโปรแกรมของคุณได้ ตัวอย่างเช่น ตัวดำเนินการ cout ต้องการ iostream บรรทัดโดยใช้เนมสเปซ std; บอกให้คอมไพเลอร์ใช้กลุ่มของฟังก์ชันที่เป็นส่วนหนึ่งของไลบรารีมาตรฐานมาตรฐาน บรรทัดนี้ยังอนุญาตให้โปรแกรมใช้ตัวดำเนินการ เช่น cout อัฒภาคเป็นส่วนหนึ่งของไวยากรณ์ C++ มันบอกคอมไพเลอร์ว่านี่คือจุดสิ้นสุดของคำสั่ง คุณจะเห็นทันทีว่ามีการใช้เครื่องหมายอัฒภาคเพื่อยุติคำสั่งส่วนใหญ่ใน C++

บรรทัดถัดไปที่สำคัญของโปรแกรมคือ int main() บรรทัดนี้จะบอกคอมไพลเลอร์ว่ามีฟังก์ชันที่เรียกว่า main และฟังก์ชันส่งคืนจำนวนเต็ม วงเล็บปีกกา ( และ ) ส่งสัญญาณการเริ่มต้น (และสิ้นสุด) ของฟังก์ชัน วงเล็บปีกกายังใช้ในบล็อกโค้ดอื่น ๆ แต่จะระบุสิ่งหนึ่งเสมอ - จุดเริ่มต้นและจุดสิ้นสุดของบล็อกตามลำดับ

ในภาษา C++ วัตถุ cout ใช้เพื่อแสดงข้อความ (ออกเสียงว่า "C out") เขาใช้สัญลักษณ์<< , известные как «оператор сдвига», чтобы указать, что отправляется к выводу на экран. Результатом вызова функции cout << является отображение текста на экране. Последовательность \n фактически рассматривается как единый символ, который обозначает новую строку (мы поговорим об этом позже более подробно). Символ \n перемещает курсор на экране на следующую строку. Опять же, обратите внимание на точку с запятой, её добавляют в конец, после каждого оператора С++.

คำสั่งถัดไปคือ cin.get() นี่คือการเรียกใช้ฟังก์ชันอื่นที่อ่านข้อมูลจากสตรีมข้อมูลอินพุตและรอให้กดปุ่ม ENTER คำสั่งนี้ป้องกันไม่ให้หน้าต่างคอนโซลปิดจนกว่าจะกดปุ่ม ENTER ซึ่งจะทำให้คุณมีเวลาในการดูผลลัพธ์ของโปรแกรม

เมื่อถึงจุดสิ้นสุดของฟังก์ชันหลัก (วงเล็บปีกกาปิด) โปรแกรมของเราจะส่งคืนค่า 0 ให้กับระบบปฏิบัติการ ค่าที่ส่งคืนนี้มีความสำคัญเนื่องจากโดยการวิเคราะห์ระบบปฏิบัติการสามารถตัดสินได้ว่าโปรแกรมของเราเสร็จสมบูรณ์หรือไม่ ค่าที่ส่งคืนเป็น 0 หมายถึงสำเร็จและส่งคืนโดยอัตโนมัติ (แต่สำหรับประเภทข้อมูล int เท่านั้น ฟังก์ชันอื่น ๆ กำหนดให้คุณต้องส่งคืนค่าด้วยตนเอง) แต่หากเราต้องการส่งคืนอย่างอื่น เช่น 1 เราก็จะต้องดำเนินการ ด้วยตนเอง

#รวม ใช้เนมสเปซมาตรฐาน; int main() ( cout<<"Моя первая программа на С++\n"; cin.get(); return 1; }

หากต้องการรวมเนื้อหา ให้พิมพ์โค้ดโปรแกรมลงใน IDE ของคุณแล้วรัน เมื่อโปรแกรมรันและคุณเห็นผลลัพธ์แล้ว ให้ทดลองคำสั่ง cout เล็กน้อย สิ่งนี้จะช่วยให้คุณคุ้นเคยกับภาษา

อย่าลืมแสดงความคิดเห็นเกี่ยวกับโปรแกรมของคุณ!

เพิ่มความคิดเห็นลงในโค้ดของคุณเพื่อให้ชัดเจนยิ่งขึ้นไม่เพียงแต่สำหรับตัวคุณเองเท่านั้น แต่ยังรวมถึงผู้อื่นด้วย คอมไพเลอร์จะละเว้นความคิดเห็นเมื่อรันโค้ด ทำให้คุณสามารถใช้ความคิดเห็นจำนวนเท่าใดก็ได้เพื่ออธิบายโค้ดจริง หากต้องการสร้างความคิดเห็น ให้ใช้ หรือ // ซึ่งบอกคอมไพเลอร์ว่าบรรทัดที่เหลือคือความคิดเห็น หรือ /* แล้วตามด้วย */ เมื่อคุณกำลังเรียนรู้การเขียนโปรแกรม การแสดงความคิดเห็นในส่วนต่างๆ ของโค้ดเพื่อดูว่าผลลัพธ์ของโปรแกรมเปลี่ยนแปลงไปอย่างไรจะเป็นประโยชน์ คุณสามารถอ่านรายละเอียดเกี่ยวกับเทคนิคการแสดงความคิดเห็นได้

จะทำอย่างไรกับตัวแปรประเภทนี้?

บางครั้งการมีตัวแปรหลายประเภทอาจทำให้สับสนได้ เมื่อตัวแปรบางประเภทดูเหมือนจะซ้ำซ้อน การใช้ประเภทตัวแปรที่ถูกต้องเป็นสิ่งสำคัญมาก เนื่องจากตัวแปรบางตัวต้องการหน่วยความจำมากกว่าตัวอื่น นอกจากนี้ เนื่องจากวิธีการจัดเก็บไว้ในหน่วยความจำ หมายเลขจุดลอยตัว ประเภทข้อมูลทศนิยมและคู่จึง "ไม่แม่นยำ" และไม่ควรใช้เมื่อจำเป็นต้องจัดเก็บค่าจำนวนเต็มที่แม่นยำ

การประกาศตัวแปรในภาษา C++

หากต้องการประกาศตัวแปร ให้ใช้ประเภทไวยากรณ์<имя>; . นี่คือตัวอย่างบางส่วนของการประกาศตัวแปร:

หมายเลขภายใน; อักขระถ่าน; ลอย num_float;

อนุญาตให้ประกาศตัวแปรประเภทเดียวกันหลายรายการในบรรทัดเดียว โดยต้องคั่นแต่ละรายการด้วยเครื่องหมายจุลภาค

Int x, y, z, d;

หากคุณพิจารณาอย่างละเอียด คุณอาจพบว่าการประกาศตัวแปรมักจะตามด้วยเครื่องหมายอัฒภาคเสมอ คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับแบบแผน “ในการตั้งชื่อตัวแปร”

ข้อผิดพลาดทั่วไปในการประกาศตัวแปรในภาษา C++

หากคุณพยายามใช้ตัวแปรที่ไม่ได้ประกาศ โปรแกรมของคุณจะไม่คอมไพล์และคุณจะได้รับข้อความแสดงข้อผิดพลาด ในภาษา C++ คีย์เวิร์ดภาษาทั้งหมด ฟังก์ชันทั้งหมด และตัวแปรทั้งหมดจะคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

การใช้ตัวแปร

ตอนนี้คุณรู้วิธีการประกาศตัวแปรแล้ว นี่คือตัวอย่างโปรแกรมที่สาธิตการใช้ตัวแปร:

#รวม ใช้เนมสเปซมาตรฐาน; int main() ( หมายเลข int; cout<< "Введите число: "; cin >>หมายเลข; cin.ละเว้น(); ศาล<< "Вы ввели: "<< number <<"\n"; cin.get(); }

ลองมาดูโปรแกรมนี้และตรวจสอบโค้ดของมันทีละบรรทัด คีย์เวิร์ด int ระบุว่าตัวเลขนั้นเป็นจำนวนเต็ม ฟังก์ชัน cin >> อ่านค่าเป็นตัวเลข ผู้ใช้ต้องกด Enter หลังตัวเลขที่ป้อน cin.ignore() เป็นฟังก์ชันที่อ่านอักขระและละเว้นอักขระนั้น เราได้จัดระเบียบอินพุตของเราลงในโปรแกรม หลังจากป้อนตัวเลข เรากดปุ่ม ENTER ซึ่งเป็นสัญลักษณ์ที่ถูกส่งไปยังสตรีมอินพุตด้วย เราไม่ต้องการมัน เราก็เลยทิ้งมันไป โปรดทราบว่าตัวแปรได้รับการประกาศเป็นประเภทจำนวนเต็ม หากผู้ใช้พยายามป้อนเลขฐานสิบ ตัวแปรนั้นจะถูกตัดทอน (นั่นคือ ส่วนทศนิยมของตัวเลขจะถูกละเว้น) ลองป้อนเลขทศนิยมหรือลำดับอักขระ เมื่อคุณรันโปรแกรมตัวอย่าง คำตอบจะขึ้นอยู่กับค่าอินพุต

โปรดทราบว่าเมื่อพิมพ์จากตัวแปร จะไม่มีการใช้เครื่องหมายคำพูด การไม่มีเครื่องหมายคำพูดจะบอกคอมไพเลอร์ว่ามีตัวแปร ดังนั้นโปรแกรมควรตรวจสอบค่าของตัวแปรเพื่อที่จะแทนที่ชื่อตัวแปรด้วยค่าของมันในขณะดำเนินการ คำสั่ง shift หลายรายการในบรรทัดเดียวกันเป็นที่ยอมรับได้อย่างสมบูรณ์ และผลลัพธ์จะดำเนินการในลำดับเดียวกัน คุณควรแยกตัวอักษรสตริง (สตริงที่อยู่ในเครื่องหมายคำพูด) และตัวแปร โดยให้แต่ละตัวดำเนินการกะของตัวเอง<< . Попытка поставить две переменные вместе с одним оператором сдвига << выдаст сообщение об ошибке . Не забудьте поставить точку с запятой. Если вы забыли про точку с запятой, компилятор выдаст вам сообщение об ошибке при попытке скомпилировать программу.

การเปลี่ยนแปลงและการเปรียบเทียบค่า

แน่นอนว่าไม่ว่าคุณจะใช้ข้อมูลประเภทใดก็ตาม ตัวแปรจะไม่น่าสนใจมากนักหากไม่มีความสามารถในการเปลี่ยนค่าของมัน ต่อไปนี้จะแสดงโอเปอเรเตอร์บางตัวที่ใช้ร่วมกับตัวแปร:

  • * การคูณ
  • - การลบ
  • + นอกจากนี้
  • / แผนก,
  • = งานที่ได้รับมอบหมาย
  • == ความเท่าเทียมกัน
  • >เพิ่มเติม
  • < меньше.
  • != ไม่เท่ากัน
  • >= มากกว่าหรือเท่ากับ
  • <= меньше или равно

ตัวดำเนินการที่ทำหน้าที่ทางคณิตศาสตร์จะต้องใช้ทางด้านขวาของเครื่องหมายกำหนดเพื่อกำหนดผลลัพธ์ให้กับตัวแปรทางด้านซ้าย

นี่คือตัวอย่างบางส่วน:

ก = 4 * 6; // ใช้ความคิดเห็นบรรทัดและอัฒภาค a เท่ากับ 24 a = a + 5; // เท่ากับผลรวมของค่าเดิมและห้า a == 5 // ไม่ได้กำหนดห้า ตรวจสอบว่ามีค่าเท่ากับ 5 หรือไม่

คุณมักจะใช้ == ในโครงสร้าง เช่น คำสั่งแบบมีเงื่อนไขและลูป

ก< 5 // Проверка, a менее пяти? a >5 // ตรวจสอบมากกว่าห้าหรือเปล่า? a == 5 // กำลังตรวจสอบเท่ากับห้าใช่ไหม? a != 5 // เช็คสิ มันไม่เท่ากับห้าเหรอ? a >= 5 // ตรวจสอบว่า a มากกว่าหรือเท่ากับ 5 หรือไม่? ก<= 5 // Проверка, a меньше или равно пяти?

ตัวอย่างเหล่านี้ไม่ได้แสดงการใช้เครื่องหมายเปรียบเทียบอย่างชัดเจน แต่เมื่อเราเริ่มศึกษาตัวดำเนินการคัดเลือก คุณจะเข้าใจว่าทำไมจึงจำเป็น