※ 引述《tonyder.bbs@bbs.yuntech.edu.tw (綺緣)》之銘言:
> 請問一個很基礎的問題
> 如果想限制只能輸入數字要怎麼改寫這個程式(只要輸入abc就會當掉)
> 自己測試的結果
> 如果使用迴圈測試cin是否錯誤
> 第一次錯誤接著就不會執行cin這行
> 所以就變成無窮迴圈了
> 請問有其他解決的辦法媽
並不是光用 .clear() 清除狀態旗標就沒事了,
將狀態旗標清除之後只是讓 stream 能再次運作,
不正確的資料還是留在 stream 的 buffer 裡,
你要設法把它消耗掉。
我曾經提過兩種方式:
1. cin.ignore(numeric_limits<std::streamsize>::max());
這個需要 #include <limits>
2. string str; cin >> str;
這種方式是可以清到泛空白字元之前
coco (coco@hifly.to) 也曾經在這個主題提出過一種方法:
cin.seekg(0, ios_base::end);
--
Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net
School: National Chung Cheng University
Department: Computer Science and Information Engineering
Researching: GNU Toolchain Porting for Unified RISC/DSP Processor with VLIW
Homepage: https://it.muds.net/~uranus
--
╔═══╗ ┼────────────────────────╮
║狂狷 ║ │* Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮
║ 年少║ ┼╮ < IP:140.119.164.16 > ╰─╮
╚╦═╦╝ ╰ * From:218-171-157-175.dynamic.hinet.net
─╨─╨─ KGBBS ─ ◎ 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩 ◎