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