2 回答

TA貢獻1862條經驗 獲得超6個贊
scanf
據我所知允許正則表達式
不幸的是,它不允許使用正則表達式:語法誤導性很強,但是在實現中甚至沒有與regex相似的東西scanf
。所有這些都支持正則表達式的字符類,因此%[<something>]
將其隱式視為[<something>]*
。這就是為什么您將scanf
Translation 調用轉換為讀取由以外的字符組成的字符串的原因'(', ')', 'x', and '\n'
。
為了解決您眼前的問題,您可以設置一個循環(huán),逐個讀取輸入的字符。每次獲得時'\n'
,請檢查
到目前為止,您輸入的內容中至少包含三個字符,
緊接其前的字符
'\n'
是'x'
,并且那之前的角色
'x'
是另一個'\n'
如果以上所有條件均成立,則您已到達預期輸入序列的末尾;否則,您的循環(huán)應繼續(xù)。

TA貢獻1796條經驗 獲得超10個贊
scanf
不支持正則表達式。它對字符類的支持有限,但這完全不是一回事。
請勿使用scanf
,fscanf
或sscanf
,因為:
數字溢出會觸發(fā)未定義的行為。僅由于有人鍵入太多數字,才允許C運行時使程序崩潰。
某些格式說明符(尤其是
%s
)是不安全的,與gets
不安全的方式完全相同,即它們會欣喜地寫入所提供緩沖區(qū)的末尾,并使程序崩潰。它們使得很難可靠地處理格式錯誤的輸入。
在這種情況下,您不需要正則表達式;一次讀取一行,getline
并在行讀取僅為“ x”時停止。但是,標準正則表達式庫例程(不是ISO C,而是POSIX)稱為regcomp
和regexec
。
- 2 回答
- 0 關注
- 930 瀏覽
添加回答
舉報