任何人都可以解释一下,为什么这部分代码的行为不同?
while((c = fread(buf, sizeof(char), 1, f)) != 0);
{
if(write(t, buf, c) < 0)
{
return E_MSGSEND;
}
}
/////////////////////////////////////
do
{
c = fread(buf, sizeof(char), 1, f);
if(write(t, buf, c) < 0)
{
return E_MSGSEND;
}
} while(c != 0);
虽然{}只运行1次但是{}运行5次。什么是差异?在{} c初始化为1之前。
感谢您的建议
答案 0 :(得分:25)
您的第一个while
后有一个分号:
while((c = fread(buf, sizeof(char), 1, f)) != 0);
这实际上使它成为一个空循环,它可能执行与另一个循环相同的次数,但它的主体不包含任何语句。但是,以下if
不再是该循环的一部分,因此它只执行一次。
答案 1 :(得分:0)
在第一部分中,使用while
循环,在执行内部语句之前检查EOF或成功读取。
在第二部分中,使用do-while
循环,在执行if
语句之前不会检查EOF。