在C ++中如何在arm架构中检测EOF

时间:2013-11-07 14:41:18

标签: c++ arm beagleboneblack

f=fopen("/dev/ttyUSB0","r")
char c;
c=getc(f);
while(c!=EOF) {
    c=getc(f);
}

在上面的代码中,当我拔下设备时,循环永远不会破坏beaglebone ubuntu,即arm架构。上面的代码适用于我的i386 ubuntu桌面。

- 编辑 -

非常奇怪!迈克的int c;没用。在c上观看c=255,但即使我将c!=EOF更改为c!=255循环也不会中断!!试了一个小时后我很沮丧!!!

- 编辑 -

我试过了fstream fin("/dev/ttyUSB0", fstream::in);。当我拔下输入串口设备fin>>c时,永远不会返回,CPU使用率为100%!!我期待它的错误!

2 个答案:

答案 0 :(得分:4)

c的类型从char更改为intEOF超出了char的范围。

澄清一下,通过“改变类型”,我的意思是将声明改为

int c;

在将int缩减为char之后,不会将该值转回{{1}}。

答案 1 :(得分:0)

在C ++中,使用cin更容易。

int main()
{
    char ch;

    while (true)
    {
        cin >> ch;
        if (!cin.good())
            break;

        // Do something with you character
    }
}

当con>>这将停止ch失败了。