C ++奇怪的事情

时间:2010-02-26 21:43:12

标签: c++

任何人都可以解释一下,为什么这部分代码的行为不同?

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之前。

感谢您的建议

2 个答案:

答案 0 :(得分:25)

您的第一个while后有一个分号:

while((c = fread(buf, sizeof(char), 1, f)) != 0);

这实际上使它成为一个空循环,它可能执行与另一个循环相同的次数,但它的主体不包含任何语句。但是,以下if不再是该循环的一部分,因此它只执行一次。

答案 1 :(得分:0)

在第一部分中,使用while循环,在执行内部语句之前检查EOF或成功读取。

在第二部分中,使用do-while循环,在执行if语句之前不会检查EOF。