ฟังก์ชัน cin.ignore() ใช้เพื่อละเว้นหรือล้างอักขระตั้งแต่หนึ่งตัวขึ้นไปจากบัฟเฟอร์อินพุต
ในการรับแนวคิดเกี่ยวกับการเพิกเฉย () ใช้งานได้ เราต้องเห็นปัญหาหนึ่งปัญหา และพบวิธีแก้ไขโดยใช้ฟังก์ชัน ละเว้น () ปัญหาอยู่ด้านล่างครับ
บางครั้งเราจำเป็นต้องล้างบัฟเฟอร์ที่ไม่ต้องการ ดังนั้นเมื่อรับอินพุตถัดไป บัฟเฟอร์จะจัดเก็บไว้ในคอนเทนเนอร์ที่ต้องการ แต่ไม่ใช่ในบัฟเฟอร์ของตัวแปรก่อนหน้า ตัวอย่างเช่น หลังจากป้อนคำสั่ง cin แล้ว เราจำเป็นต้องป้อนอาร์เรย์อักขระหรือสตริง ดังนั้นเราจำเป็นต้องล้างบัฟเฟอร์อินพุต มิฉะนั้น มันจะใช้บัฟเฟอร์ของตัวแปรก่อนหน้า ด้วยการกดปุ่ม “Enter” หลังจากอินพุตแรก เนื่องจากบัฟเฟอร์ของตัวแปรก่อนหน้ามีพื้นที่สำหรับเก็บข้อมูลใหม่ โปรแกรมจะข้ามอินพุตต่อไปนี้ของคอนเทนเนอร์
ตัวอย่าง
#include<iostream> #include<vector> using namespace std; main() { int x; char str[80]; cout << "Enter a number and a string:\n"; cin >> x; cin.getline(str,80); //take a string cout << "You have entered:\n"; cout << x << endl; cout << str << endl; }
ผลลัพธ์
Enter a number and a string: 8 You have entered: 8
มีคำสั่ง cin สองชุดสำหรับจำนวนเต็มและสตริง แต่ใช้เฉพาะตัวเลขเท่านั้น เมื่อเรากดแป้น Enter มันจะข้ามฟังก์ชัน getLine() โดยไม่ต้องรับอินพุตใดๆ บางครั้งสามารถรับอินพุตได้ แต่อยู่ในบัฟเฟอร์ของตัวแปรจำนวนเต็ม เราจึงมองไม่เห็นสตริงเป็นเอาต์พุต
ในการแก้ไขปัญหานี้ เราจะใช้ฟังก์ชัน cin.ignore() ฟังก์ชันนี้ใช้เพื่อละเว้นอินพุตไม่เกินช่วงที่กำหนด ถ้าเราเขียนข้อความแบบนี้ -
cin.ignore(numeric_limits::max(), ‘\n’)
จากนั้นจะละเว้นอินพุตรวมถึงอักขระขึ้นบรรทัดใหม่ด้วย
ตัวอย่าง
#include<iostream> #include<ios> //used to get stream size #include<limits> //used to get numeric limits using namespace std; main() { int x; char str[80]; cout << "Enter a number and a string:\n"; cin >> x; cin.ignore(numeric_limits<streamsize>::max(), '\n'); //clear buffer before taking new line cin.getline(str,80); //take a string cout << "You have entered:\n"; cout << x << endl; cout << str << endl; }
ผลลัพธ์
Enter a number and a string: 4 Hello World You have entered: 4 Hello World