Lecture Notes - cin.fail(), cin.clear(), cin.eof() and strchr()1. cin. การแปล - Lecture Notes - cin.fail(), cin.clear(), cin.eof() and strchr()1. cin. ไทย วิธีการพูด

Lecture Notes - cin.fail(), cin.cle

Lecture Notes - cin.fail(), cin.clear(), cin.eof() and strchr()

1. cin.fail() and cin.eof()

Part of C++ input processing is the function cin.fail(). This returns non-zero (true) if the last cin command failed, and zero (false) otherwise. When you reach the end of a file and try to read anything, this is a classic time for cin.fail(). See the program cinfail.cpp:

#include
using namespace std;

int main()
{
string s;
int i;

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
























































การแปล กรุณารอสักครู่..
ผลลัพธ์ (ไทย) 3:[สำเนา]
คัดลอก!
บันทึกการบรรยาย ? - . fail() clear() ? ? , , . . eof() และ strchr()

1 และมา . fail() cin . eof()

ส่วนของ C input การประมวลผลฟังก์ชันซิน . fail() . นี้จะไม่เป็นศูนย์ ( จริง ) ถ้ามาสั่งสุดท้ายล้มเหลว และเป็นศูนย์ ( เท็จ ) มิฉะนั้น เมื่อคุณถึงจุดสิ้นสุดของไฟล์และพยายามที่จะอ่านอะไร นี่คือช่วงเวลาที่คลาสสิกสำหรับซิน . fail() . เห็นโปรแกรม cinfail . cpp :

>
< iostream #รวมใช้ namespace std ;



สาย int main() { ;
1 I ;

i = 0 ;
ในขณะที่ ( 1 ) {
i ;
cin > > S ;
( ถ้ามา . fail() ) กลับ 0 ;
" สตริง เคาท์ < < " < < < < " : " < < s < < Endl ;
}
}
คุณจะทราบว่าเมื่อคุณเรียกใช้นี้จะสิ้นสุดลงเมื่อสิ้นสุดของแฟ้มที่ได้รับถึงเพราะ ? . fail() ผลตอบแทนที่แท้จริงที่นี่ :

Unix > G cinfail . cpp
Unix > แมว input-1 . txt

แมวเท้ากรงเล็บเหล็ก ประสาทศัลยแพทย์ กรี๊ดมาก
paranoias ยาพิษที่ประตู schizoid
ผู้ชายศตวรรษที่ 21 a.out
Unix > < input-1 . txt สตริงสตริงแมว

1 : 2 : 3 : เหล็กเชือกเท้า

สาย 4 สาย 5 :
: กรงเล็บ ประสาทศัลยแพทย์
6
: ร้องสตริงสตริง 7 :
8
9 : สตริงสตริง : ที่ 10 : paranoias

สตริงสตริงสตริง 12 : 11 : ยาพิษ

13 ประตู สตริงสตริงสตริงศตวรรษที่ 21
14 : 15 : schizoid

สาย 16 : ผู้ชาย >
.
UNIX มา .fail() ยังกลับ 1 ถ้าคุณลองอ่านจำนวนเต็มและได้รับบางสิ่งบางอย่างที่ไม่สามารถแปลงเป็นจำนวนเต็ม ตัวอย่างเช่น เห็น cinfail2 . cpp :

< >
#รวมถึง iostream ใช้ namespace std ;
1 main()
{
1 J ;
1 I ;

i = 0 ;
ในขณะที่ ( 1 ) {
i ;
cin > > J ;
( ถ้ามา . fail() ) กลับ 0 ;
" จำนวนเต็ม เคาท์ < < " < < < < " " < < < < Endl J ;
}
}
เมื่อเราเรียกใช้มันบน input-2.txt ,คุณเห็นว่า มันลาออกหลังจากอ่านคำที่เจ็ด เพราะนั่นไม่ใช่จำนวนเต็ม :

Unix > G cinfail2 . cpp
Unix > แมว input-2 . txt
30 40 50 60 70 - 100 เฟรด 99 88 77 66
Unix > a.out < input-2 . txt

จำนวนเต็มจำนวนเต็ม 1 : 30 : 40 2 3 : 50

จำนวนเต็มจำนวนเต็ม 4 : 60

จำนวนเต็มจำนวนเต็ม 5 : 6 : 70 - 100
Unix >
ดังนั้น คุณทราบได้อย่างไรถ้าคุณอ่านคำที่ป้อนไม่ถูกต้อง หรือ ถ้าคุณกำลังที่ส่วนท้ายของแฟ้มนี้คือเมื่อคุณใช้ ? และ . eof() cin . clear() . ก่อนมา . eof() กลับ 1 ถ้าคุณพยายามที่จะอ่านอะไร แต่ที่ส่วนท้ายของไฟล์ ? 2 . clear() ใช้ชัดเจน " รัฐ " ข้อผิดพลาดของซิน . ในคำอื่น ๆเมื่อมีการป้อนข้อมูลความล้มเหลวเกิดขึ้นมา . fail() ส่งกลับจริง บัฟเฟอร์ ( ? ) อยู่ในรัฐ " ข้อผิดพลาด "และการประมวลผลข้อมูลเพิ่มเติมจะไม่ทำงานจนกว่าคุณจะล้างสถานะ โดยเรียกมา . clear() . ใช้ร่วมกับซิน . fail() cin , และ . eof() cin . clear() ให้คุณกระบวนการและข้อผิดพลาดการตรวจสอบความหลากหลายของการป้อนข้อมูล ตัวอย่างเช่น cinfail3.cpp ด้านล่างอ่านจำนวนเต็มในแฟ้มและพิมพ์พวกเขาออก มันใช้ fail() / ? ? . . clear() เพื่อตรวจสอบ และละเว้นไม่เต็ม และใช้ cin .eof() ค้นพบที่จุดสิ้นสุดของแฟ้ม :

< >
#รวมถึง iostream ใช้ namespace std ;
1 main()
{
1 J ;
1 I ;
สตริงโง่ ;

ฉัน = 0 ;
ในขณะที่ ( 1 ) {
cin > > J ;
( ถ้า ! ซิน . fail() ) {
i ;
" จำนวนเต็ม เคาท์ < < " < < < < " " < < < < Endl J ;
} อีก ถ้าซิน . eof() ) {

} อื่น { 0 กลับ ;
ซิน . clear() ;
cin > > หุ่น
} }

; }
เมื่อเราเรียกใช้มันบน input-3.txt , คุณจะเห็นว่ามันเป็นสัญญา :

ยูนิกซ์ > G cinfail3 . cpp
Unix > แมว input-3 . txt
ดำ 100 เป็น 50 25 มืด 12 กลางคืน - เธอ 0 - 500
Unix > a.out < input-3 . txt

จำนวนเต็มจำนวนเต็ม 1 : 100 2 : 50 : 25
3
จำนวนเต็มจำนวนเต็ม 4 : 12
จำนวนเต็ม 5 : - 5
0
จำนวนเต็มจำนวนเต็ม 6 : 7 : - 500
Unix >
2 strchr() เพื่อตรวจสอบหนึ่งของพวงของตัวละคร

ที่นี่เป็นเคล็ดลับที่ดี สมมติว่าคุณต้องการที่จะทราบว่าตัวละครเป็นหนึ่งในตัวละคร ' 0 ' , ' ' ,' B ' , ' ' , ' ' หรือ ' / ' ดีวิธีหนึ่งในการทดสอบนี้คือการทำพวงของถ้างบ วิธีอื่น ๆคือการใช้ strchr() . จำได้ว่า strchr ( s , c ) จะชี้ไปยังอินสแตนซ์แรกของ C ใน s และมันกลับ null ถ้า c ไม่ . ดังนั้น , ถ้าคุณต้องการที่จะดำเนินการทดสอบข้างต้น คุณสามารถพูดได้ :
( ถ้า strchr ( " 0ab : / " c ) = null )
ถ้ากลับมาจริง แล้ว C เป็นหนึ่งในที่ต้องการอักขระ มิฉะนั้นมันไม่ได้ .
ตัวอย่างเช่น สมมติว่า เราต้องการที่จะเขียนโปรแกรมที่ผู้ใช้ระบุบัตรที่พิมพ์ยศและชุด เช่น " อา " Ace ของหัวใจและ " 2C " สำหรับสองของคลับ แล้วรหัสคำนวณการ์ดในเด็ค อันดับที่ 2 คือ 0 และเป็นบัตรเป็นบัตร 51 นี่คือวิธีที่จะทำมัน ( ใน readcard . cpp ) :


#รวม < iostream >
< >
#รวมถึงซีสตริงค์ใช้ namespace std นะ

;การจัดอันดับ Const char * = " 23456789tjqka " ;
Const char * ชุด = " cdhs " ;

Const char * longranks [ 13 ] = / / เรย์ของ char * สตริง ( c-style )
{ " สอง " , " สาม " , " 4 " , 5 " , 6 " , " เจ็ด " " แปด " , " เก้า "
" สิบ " , " แจ็ค " , " ราชินี " , " King " , " เอซ " } ;

Const char * longsuits [ 4 ] = / / เรย์ของ char * สตริง ( c-style )
{ " คลับ " , " เพชร " , " หัวใจ " " เสียม " } ;
1 main()
{

สาย ;Const char * STR ; / / STR จะชี้ไปที่ c-style สาย int cnum
;

ตอนที่ ( 1 ) {
< " ใส่การ์ด เคาท์ " ;
cin > > S ;
c_str() STR = S ;
( ถ้า strlen ( STR ) = 2 ) {
เคาท์ < < " การ์ดจะเหมาะกับรูปแบบ ' อันดับ ' เช่น ' อา ' หรือ ' 2 C ' n " ;
} อื่นถ้า ( strchr ( ตำแหน่ง STR [ 0 ] ) = = null ) { / / เช็คอันดับ เคาท์ < <
" ตำแหน่งต้อง อันดับหนึ่งของ " < < < < Endl ;
} อื่นถ้า ( strchr ( ชุดSTR [ 1 ] ) = = null ) { / / ตรวจสอบ เคาท์ชุด
< < " ชุดคงเป็นชุด " < < < < Endl ; } อื่น {

cnum = ( strchr ( ชุด STR [ 1 ] ) - ชุด ) * 13
( strchr ( STR [ 0 ตำแหน่ง การจัดอันดับ ) ;
- ] ) < < " ดี เคาท์การ์ด# cnum " < < < < " : " < <
longranks cnum % [ 13 ] < < " " < < longsuits [ cnum / 13 ] < < " N " } ;

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

นี่คือตัวอย่างของมันวิ่ง :

Unix > G readcard . cpp
Unix > a.out
ใส่บัตร : อ่า
ดีบัตร : # 38 : Ace ของหัวใจ
ใส่บัตร : 2c
ดีบัตร : # 0 : 2 แห่ง คลับ
ใส่บัตร : 7s
ดีบัตร : # 44 : เจ็ดโพดำ

ดีใส่บัตร : TD บัตร : 21 # : สิบข้าวหลามตัด
ใส่บัตร : YS
ยศต้องเป็นหนึ่งใน 23456789tjqka

ใส่บัตร : ไทชุดจะต้องเป็นหนึ่งใน cdhs
ใส่บัตร : เฟร็ด
การ์ดต้องรูปแบบ ' ชุด ' อันดับเช่น ' อา ' หรือ ' 2 C '
ใส่บัตร :
c
Unix >
การแปล กรุณารอสักครู่..
 
ภาษาอื่น ๆ
การสนับสนุนเครื่องมือแปลภาษา: กรีก, กันนาดา, กาลิเชียน, คลิงออน, คอร์สิกา, คาซัค, คาตาลัน, คินยารวันดา, คีร์กิซ, คุชราต, จอร์เจีย, จีน, จีนดั้งเดิม, ชวา, ชิเชวา, ซามัว, ซีบัวโน, ซุนดา, ซูลู, ญี่ปุ่น, ดัตช์, ตรวจหาภาษา, ตุรกี, ทมิฬ, ทาจิก, ทาทาร์, นอร์เวย์, บอสเนีย, บัลแกเรีย, บาสก์, ปัญจาป, ฝรั่งเศส, พาชตู, ฟริเชียน, ฟินแลนด์, ฟิลิปปินส์, ภาษาอินโดนีเซี, มองโกเลีย, มัลทีส, มาซีโดเนีย, มาราฐี, มาลากาซี, มาลายาลัม, มาเลย์, ม้ง, ยิดดิช, ยูเครน, รัสเซีย, ละติน, ลักเซมเบิร์ก, ลัตเวีย, ลาว, ลิทัวเนีย, สวาฮิลี, สวีเดน, สิงหล, สินธี, สเปน, สโลวัก, สโลวีเนีย, อังกฤษ, อัมฮาริก, อาร์เซอร์ไบจัน, อาร์เมเนีย, อาหรับ, อิกโบ, อิตาลี, อุยกูร์, อุสเบกิสถาน, อูรดู, ฮังการี, ฮัวซา, ฮาวาย, ฮินดี, ฮีบรู, เกลิกสกอต, เกาหลี, เขมร, เคิร์ด, เช็ก, เซอร์เบียน, เซโซโท, เดนมาร์ก, เตลูกู, เติร์กเมน, เนปาล, เบงกอล, เบลารุส, เปอร์เซีย, เมารี, เมียนมา (พม่า), เยอรมัน, เวลส์, เวียดนาม, เอสเปอแรนโต, เอสโทเนีย, เฮติครีโอล, แอฟริกา, แอลเบเนีย, โคซา, โครเอเชีย, โชนา, โซมาลี, โปรตุเกส, โปแลนด์, โยรูบา, โรมาเนีย, โอเดีย (โอริยา), ไทย, ไอซ์แลนด์, ไอร์แลนด์, การแปลภาษา.

Copyright ©2025 I Love Translation. All reserved.

E-mail: