簡體   English   中英

while循環不會退出C

[英]while loop won't exit C

這是while循環工作片段

while(total_bytes_read != fsize){
    while((nread = read(sockd, filebuffer, sizeof(filebuffer))) > 0){
        if(write(fd, filebuffer, nread) < 0){
            perror("write");
            close(sockd);
            exit(1);
        }
        total_bytes_read += nread;
        if(total_bytes_read == fsize) break;
    }
}

這是while循環的NON工作片段的示例:

while(total_bytes_read != fsize){
    while((nread = read(sockd, filebuffer, sizeof(filebuffer))) > 0){
        if(write(fd, filebuffer, nread) < 0){
            perror("write");
            close(sockd);
            exit(1);
        }
        total_bytes_read += nread;
    }
}

而且,這是while循環的NON工作片段的示例:

while(total_bytes_read < fsize){
    while((nread = read(sockd, filebuffer, sizeof(filebuffer))) > 0){
        if(write(fd, filebuffer, nread) < 0){
            perror("write");
            close(sockd);
            exit(1);
        }
    }
     total_bytes_read += nread;
}

我想知道為什么當total_bytes_read等於fsize時進入上述2個片段中,循環不會退出:O
提前致謝!

代碼片段2和3中的外部循環不會退出,因為內部循環不會退出: total_bytes_read != fsize循環永遠不會有機會檢查其繼續條件。

片段1正常工作,因為您檢查了嵌套循環的相同條件,並且在達到限制計數時中斷。

您可以將兩個條件組合成一個循環,如下所示:

while((total_bytes_read != fsize) && (nread = read(sockd, filebuffer, sizeof(filebuffer))) > 0) {
    ...
}

因為您刪除了終止循環的中斷

if(total_bytes_read == fsize) break;

有理由不以這種方式編寫讀取循環代碼。 (實際上,有很多。)如果計算fsize,然后文件在讀取時更改大小,則循環將永遠不會終止。 不要這樣! 無需計算文件大小; 只是讀取數據,直到沒有更多。

暫無
暫無

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

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