นี่เป็นความลับเล็ก ๆ ของ scanf ที่คนไม่ค่อยรู้
เวลาเราเรียนเขียนโปรแกรมเนี่ย ใคร ๆ ก็รู้ว่า scanf มีไว้รับค่าใช่ไหมล่ะครับ เช่น ถ้าเราต้องการรับเลขตัวเดียว
เราก็เขียนโค้ดง่าย ๆ ได้ดังนี้
int x;
scanf("%d", &x);
แต่ถ้าเรามีข้อมูลที่เราไม่ต้องการอยู่ด้วยล่ะ จะทำอย่างไร ลองดูข้อมูลต่อไปนี้
ถ้าเราต้องการแค่เดือน (เลขตัวกลาง) เราจะทำอย่างไรดี ในที่นี้แหละคือสิ่งที่หลายคนไม่รู้เกี่ยวกับ scanf ว่าเราสามารถกำหนดได้ว่าจะรับ หรือไม่รับค่าไหน สังเกตว่ารูปแบบของวันที่จะเป็น
เราไม่สนใจ / ในที่นี้ เราจึงเขียนเป็น
int a, b, x;
scanf("%d/%d/%d", &a, &x, &b);
แบบนี้ พอคอมอ่านเจอ / เมื่อไหร่ ก็จะกระโดดข้ามไปอ่านตัวต่อไปเลย
แล้วก็ไม่ต้องสนใจตัวแปร a, b ไปเลยก็ได้ แต่เอ~ แบบนี้ก็มีตัวแปรที่ไม่ได้ใช้น่ะสิ นี่แหละที่ sub-specifier * เข้ามาช่วย โดยที่ตัวไหนที่เราไม่สนใจ เราก็ใส่ * ไว้ข้างหน้าตัว d ซะเลย โค้ดก็จะกลายเป็น
int x;
scanf("%*d/%d/%*d", &x);
แบบนี้เราก็จะสกัดข้อมูลที่เราต้องการได้ตั้งแต่ตอนรับค่า ไอ้การที่เรารู้ทริกซ์เล็ก ๆ นี้ช่วยให้เราประหยัดเวลาทำงานไปได้มาก อันที่จริงยังมีอย่างอื่นอีกมากที่ปกติเราไม่เคยถูกสอน ลองศึกษาดูได้ที่
http://www.cplusplus.com/reference/cstdio/scanf/
ภาษา C นี่มันลึกล้ำนะ
เข้าสู่ระบบเพื่อแสดงความคิดเห็น
Log in