ฟังก์ชัน 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