บรรยาย - cin.fail () cin.clear () cin.eof () และ strchr () 1 cin.fail () และ cin.eof () เป็นส่วนหนึ่งของภาษา C ++ การประมวลผลข้อมูลเป็น cin.fail ฟังก์ชัน () นี้กลับไม่เป็นศูนย์ (จริง) ถ้าคำสั่ง Cin สุดท้ายล้มเหลวและศูนย์ (เท็จ) เป็นอย่างอื่น เมื่อคุณมาถึงจุดสิ้นสุดของแฟ้มและพยายามที่จะอ่านอะไรนี้เป็นช่วงเวลาที่คลาสสิกสำหรับ cin.fail () ดู cinfail.cpp โปรแกรม: #include
ใช้ namespace std; int หลัก () { สตริง; int i; i = 0; ขณะที่ (1) { i ++; Cin >> วินาที; ถ้า (cin.fail ()) return 0; ศาล << "สตริง" << ฉัน << ":" S << endl <<; } } คุณจะได้ทราบเมื่อคุณทำงานนี้ก็จะสิ้นสุดลงเมื่อสิ้นสุดของแฟ้มได้รับถึงเพราะ cin.fail () ผลตอบแทนจริงที่นี่: UNIX> กรัม ++ cinfail.cpp UNIX> แมวใส่-1.txt แมวเท้าเหล็กกรงเล็บประสาทศัลยแพทย์-กรี๊ดมากที่ paranoias พิษประตูศตวรรษที่ 21 คนที่มีอาการจิตเภทUNIX> a.out <input-1.txt String 1: แมวสตริงที่ 2: เท้าสายที่ 3: เหล็กString 4: กรงเล็บสตริงที่ 5: Neuro-ศัลยแพทย์สตริงที่ 6: กรีดร้องสตริง 7: สำหรับสตริงที่ 8: เพิ่มเติมสตริง 9: ที่String 10: paranoias String 11: พิษString 12: ประตูString 13: 21 String 14: ศตวรรษที่String 15: อาการจิตเภทString 16: คนยูนิกซ์> cin.fail () ยังกลับ 1 ถ้าคุณพยายามที่จะอ่านจำนวนเต็มและได้รับบางสิ่งบางอย่างที่ไม่สามารถแปลงเป็นจำนวนเต็ม ยกตัวอย่างเช่นเห็น cinfail2.cpp: #include
ใช้ namespace std; int main () { int J; int i; i = 0; ขณะที่ (1) { i ++; Cin >> J; ถ้า (cin.fail ()) return 0; ศาล << "จำนวนเต็ม" << ฉัน << ":" J << endl <<; } } เมื่อเราเรียกใช้งานบนอิน 2.txt คุณจะเห็นว่ามันจะหยุดทำงานหลังจากที่ได้อ่านคำที่เจ็ดเพราะนั่นไม่ใช่จำนวนเต็ม: UNIX> กรัม ++ cinfail2.cpp UNIX> แมวใส่-2.txt 30 40 50 60 70 -100 เฟร็ด 99 88 77 66 ยูนิกซ์> a.out <input-2.txt จำนวนเต็ม 1: 30 จำนวนเต็ม 2: 40 จำนวนเต็ม 3: 50 จำนวนเต็ม 4: 60 Integer ที่ 5: 70 Integer ที่ 6: -100 UNIX> ดังนั้นวิธีที่คุณรู้ว่าถ้าคุณอ่านคำป้อนข้อมูลที่ไม่ถูกต้องหรือถ้าคุณอยู่ที่จุดสิ้นสุดของแฟ้ม? นี่คือเมื่อคุณใช้ cin.eof () และ cin.clear () แรก cin.eof () ส่งกลับ 1 ถ้าคุณพยายามที่จะอ่านอะไร แต่อยู่ที่ส่วนท้ายของแฟ้ม ประการที่สอง cin.clear () จะใช้ในการ "ล้างข้อมูลสถานะข้อผิดพลาด" ของ Cin ในคำอื่น ๆ เมื่อความล้มเหลวของการป้อนข้อมูลที่เกิดขึ้นและ cin.fail () ผลตอบแทนจริงบัฟเฟอร์ (Cin) จะอยู่ใน "รัฐ" ข้อผิดพลาดและการประมวลผลข้อมูลต่อไปจะไม่ทำงานจนกว่าคุณล้างรัฐโดยการเรียก cin.clear () ใช้ร่วมกับ cin.fail () cin.eof () และ cin.clear () ช่วยให้คุณสามารถดำเนินการและตรวจสอบข้อผิดพลาดความหลากหลายของการป้อนข้อมูล ตัวอย่างเช่น cinfail3.cpp ด้านล่างอ่านจำนวนเต็มทั้งหมดในไฟล์และพิมพ์พวกเขาออก มันใช้ cin.fail () / cin.clear () เพื่อตรวจสอบและไม่สนใจจำนวนเต็มไม่และใช้ cin.eof () เพื่อค้นพบในตอนท้ายของแฟ้ม: #include
ใช้ namespace std; int main () { int J; int i; สตริงหุ่น; i = 0; ขณะที่ (1) { Cin >> J; (! cin.fail ()) ถ้า { i ++; ศาล << "จำนวนเต็ม" << ฉัน << ":" J << endl <<; } if (cin.eof ()) { return 0; } อื่น { cin.clear (); Cin >> หุ่น; } } } เมื่อเราเรียกใช้ กับการป้อนข้อมูล-3.txt คุณจะเห็นว่าการทำงานเป็นสัญญา: UNIX> กรัม ++ cinfail3.cpp UNIX> แมวใส่-3.txt ดำ 100 ถึง 50 คืน 25 สีเข้ม 12 -5 เธอเป็น 0 -500 UNIX> a.out <input-3.txt จำนวนเต็ม 1: 100 จำนวนเต็ม 2: 50 จำนวนเต็ม 3: 25 จำนวนเต็ม 4: 12 จำนวนเต็ม 5: -5 จำนวนเต็ม 6: 0 จำนวนเต็ม 7: -500 UNIX> 2 strchr () เพื่อตรวจสอบการเป็นหนึ่งในเครือของตัวละครนี่เป็นเคล็ดลับที่มีความสุข สมมติว่าคุณต้องการที่จะรู้ว่าตัวละครที่เป็นหนึ่งในตัวละคร '0', '', 'B', '.' ':' หรือ '/' ดีวิธีหนึ่งในการทดสอบนี้คือการทำพวงของถ้างบ วิธีอื่น ๆ คือการใช้ strchr () โปรดจำไว้ว่า strchr (s c) กลับชี้ไปตัวอย่างแรกของ C ใน S และมันกลับ NULL ถ้า c คือไม่ได้อยู่ใน S ดังนั้นถ้าคุณต้องการที่จะดำเนินการทดสอบข้างต้นคุณสามารถบอกว่า: ถ้า (strchr ("0AB. /" c) = โมฆะ!) หากที่ส่งกลับจริงแล้ว c คือหนึ่งในตัวละครที่ต้องการ มิฉะนั้นจะไม่ได้ตัวอย่างเช่นสมมติว่าเราต้องการที่จะเขียนโปรแกรมที่มีผู้ใช้ป้อนข้อมูลบัตรโดยการพิมพ์ยศและชุดเช่น "AH" สำหรับเอซโพแดงและ "2C" สำหรับทั้งสองสโมสร แล้วรหัสคำนวณตำแหน่งของการ์ดในสำรับที่ 2C เป็นบัตร 0 และเป็นบัตร 51 นี่คือวิธีที่จะทำ (ใน readcard.cpp) ที่: #include
#include
ใช้ namespace std; const char * อันดับ = "23456789TJQKA"; const char * ชุด = "CDHS"; const char * longranks [13] = // array ของ char * สตริง (C-style) {"สอง", "สาม" "โฟร์", "ห้า", "หก", "เซเว่น", "แปด", "เก้า", "สิบ", "แจ็ค", "ราชินี", "พระมหากษัตริย์", "เอ"}; const char * longsuits [4] = // array ของ char * สตริง (C-style) {"คลับ", "เพชร", "หัวใจ", "Spades"}; int หลัก () { สตริง; const char * Str; // Str จะชี้ไปที่ C สไตล์สตริงint cnum; ในขณะที่ (1) { ศาล << "ใส่การ์ด:"; Cin >> วินาที; Str = s.c_str (); if (! strlen (STR) = 2) { ศาล << "บัตรต้องรูปแบบ 'อันดับชุด' เช่น 'AH' หรือ '2C' n"; } if (strchr (ระดับขั้น, STR [0]) == NULL) {/ / ตรวจสอบการจัดอันดับศาล << "ยศต้องเป็นหนึ่งใน" << อันดับ endl <<; } if (strchr (ชุด, STR [1]) == NULL) {// ตรวจสอบชุดศาล << "ชุดต้อง เป็นหนึ่งใน "<< ชุด endl <<; } อื่น { cnum = (strchr (ชุด, STR [1]) - ชุด) * 13 + (strchr (ระดับขั้น, STR [0]) - การจัดอันดับ) ศาล << " ดีการ์ด: # "<< cnum <<": "<< . longranks [cnum 13%] << "ของ" << longsuits [cnum / 13] << " n"; } } } หมายเหตุการใช้ คำนวณตัวชี้ที่จะได้รับการจัดอันดับและชุด การศึกษาหนึ่งที่ระมัดระวัง มันเป็นเคล็ดลับที่ดีที่จะรู้ว่านี่คือตัวอย่างของมันทำงาน: UNIX> กรัม ++ readcard.cpp UNIX> a.out ใส่บัตร: AH ดีการ์ด: # 38: เอซโพแดงใส่บัตร: 2C บัตรดี: # 0: สองของคลับใส่บัตร: 7S บัตรดี: # 44: เซเว่นโพดำใส่บัตร: TD ดีการ์ด: # 21: สิบเพชรใส่บัตร: YS ยศต้องเป็นหนึ่งใน 23456789TJQKA ใส่บัตร: TY ชุดต้องเป็นหนึ่งใน CDHS ใส่บัตร: เฟร็ดการ์ดต้องรูปแบบ 'อันดับชุด' เช่น 'AH' หรือ '2C' ใส่การ์ด: ^ C UNIX>
การแปล กรุณารอสักครู่..
