簡體   English   中英

為什么這是跳出 while 循環的有效 scanf 語句?

[英]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.

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