[英]Will fgets always read from the beginning of the string?
我需要使用 fgets 來讀取由換行符分隔的多行標准輸入(例如。
Hello
world
!
)。 如果我在 for 循環中包含 fgets,它會在每次迭代期間從第一行讀取嗎? 如果是這樣,我將如何實現這一目標?
fgets 是否總是從字符串的開頭讀取?
否。 fgets()
基於當前 state 讀取,這可能部分進入用戶輸入行。 它不會以某種方式神奇地 go 回到開頭 - 只是從stream當前定位的位置開始。
fgets()
不讀取字符串。 它讀取一行輸入並將輸入轉換為字符串。 @Fe2O3 。 讀取null 字符時,它不會停止。
fgets()
讀取到:
讀取'\n'
。
滿足fgets()
中傳遞的 size - 1 。
遇到文件結尾或輸入錯誤(例如,錯誤的 stream 模式、奇偶校驗錯誤、月相輸入錯誤……)
如果我在 for 循環中包含 fgets,它會在每次迭代期間從第一行讀取嗎? 如果是這樣,我將如何實現這一目標?
首先在使用fgets()
之前,請確保閱讀了整個前一行。
第二:如果使用fgets()
后的這行輸入不完整,完成它。
char buf[N];
if (fgets(buf, sizeof buf, stdin) {
size_t len = strlen(buf);
if (len + 1 == sizeof buf && buf[sizeof buf - 2] != '\n')) {
// User input is not complete, read rest of line.
int ch;
while ((ch = getchar() != '\n') ** ch != EOF) {
;
}
}
迂腐: fgets()
不是一個很好的輸入 function 如果輸入可能包含null 字符。 在這種情況下,需要更先進的技術。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.