[英]Why is this a valid scanf statement to break out of a while loop?
為什么這是打破無限while
循環的有效代碼行?
if (scanf("%s", word) != 1) break;
if (scanf("%s", word) != 1) break;
scanf
返回成功消費的項目數。 此值用作表達式內的左側操作數。 因此,這個表達式是完全有效的。
在下面的示例中,如果沒有發生 I/O 錯誤並且成功轉換了字符串,則該值應為1
,因為只有一項要消耗。
我猜這個if
語句是一個循環的一部分,其目的是從輸入中讀取后續單詞,直到它遇到一個EOF
stdin
用於標准輸入或用作輸入的任何重定向文件,因為只有然后條件才被評估為true
(並且要打破如果發生EOF
或其他I/O
錯誤,因為scanf()
在這種情況下返回0
。
這將使您了解如何評估和解釋這個if
語句。
提到的 break 語句及其保護是有效的,但它在撒謊。 考慮循環
while (1) {
...
}
根據結構化編程的規則,循環不應該退出,除非程序退出。 而不是使用 break 語句,一個結構正確的程序應該使用 function掃描的返回值作為循環保護,如下所示:
tokenCount = scanf("%s", word);
while (tokenCount == 1) {
...
tokenCount = scanf("%s", word);
}
如果表達式沒有副作用,也更容易推斷程序的正確性; 這就是為什么返回值存儲在變量中(具有有意義的名稱)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.