簡體   English   中英

將 fgets 與 scanf 混合並使用 fseek 跳過換行符是一種不好的做法嗎? C

[英]Would it be a bad practice to mix fgets with scanf and use fseek to skip the new line characters? C

我想使用fgetsscanf混合它們,但是有剩余的'\\n'字符並且它們弄亂了fgets輸出,我嘗試使用:

fseek(stdin, 0, SEEK_END);

它奏效了,這是一種不好的做法嗎?

帶有SEEK_ENDfseek的行為不是由 C 標准定義的。

7.21.9.2/4 fseek 函數

對於文本流,偏移量應為零,或偏移量應為先前成功調用與同一文件相關聯的流上的 ftell 函數返回的值,且 wherece 應為 SEEK_SET。

即便如此,在stdin上使用 fseek 也是不可靠的。 POSIX說,沒有后盾文件(管道,插座等)是不可搜索。

但是在我看來,您正在嘗試一個“錯誤”的解決方案:不要混合fgetsscanf開始。

scanf對於用戶輸入很脆弱,並且scanf正確錯誤處理很困難 您可以改為僅使用fgets來讀取行並使用sscanf來提取輸入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM