这是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) {
...
}