C++ 在C++;如何在arm体系结构中检测EOF

C++ 在C++;如何在arm体系结构中检测EOF,c++,arm,beagleboneblack,C++,Arm,Beagleboneblack,在上面的代码中,当我拔下设备时,beaglebone ubuntu是arm架构,循环从未中断。上面的代码在我的i386 ubuntu桌面上运行 --编辑-- 真奇怪!迈克的intc;没用。注意c给出c=255但即使我改变c=EOF到c=255循环不中断!!尝试了一个小时后,我很沮丧 --编辑-- 我尝试了fstream-fin(“/dev/ttyUSB0”,fstream::in)。当我拔下输入串行设备fin>>c时,永远不会返回,CPU使用率为100%!!我想这是一只虫子 将c的类型从char

在上面的代码中,当我拔下设备时,beaglebone ubuntu是arm架构,循环从未中断。上面的代码在我的i386 ubuntu桌面上运行

--编辑--

真奇怪!迈克的
intc
;没用。注意
c
给出
c=255
但即使我改变
c=EOF
c=255
循环不中断!!尝试了一个小时后,我很沮丧

--编辑--


我尝试了fstream-fin(“/dev/ttyUSB0”,fstream::in)。当我拔下输入串行设备
fin>>c
时,永远不会返回,CPU使用率为100%!!我想这是一只虫子

c
的类型从
char
更改为
int
EOF
超出了
char
的范围

澄清一下,所谓“更改类型”,我的意思是将声明更改为

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

在将值截断为
char
后,不要将值强制转换回
int
c
的类型从
char
更改为
int
EOF
超出了
char
的范围

澄清一下,所谓“更改类型”,我的意思是将声明更改为

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

在将其截断为<代码> char < /c> > >

C++中,使用CIN更容易。
int c;

<> P>> CUC>CH失败时停止。

< P> C++,使用CIN更容易。

int c;

当con>>ch失败时,此操作将停止。

s我做到了,我尝试了
(int)c=EOF
c=(int)EOF
。它从来都不起作用。@neckTwi这不是问题所在。使用
intc;c=getc(f)
@neckTwi:不,它们不起作用。当您将
getc
的结果分配给
c
时,您已经将其转换为
char
,转换后的值将永远不会是
EOF
,因为它不能用
char
表示。正如我所说,将
c
的类型更改为
int
,这样它就可以表示
EOF
。您必须将c声明为int,而不是强制转换为int。因为getc的结果包括所有256个可能的char值(假设char为8位)和EOF,所以char不足以存储所有大小写。因此,你们必须使用一个更广泛的类型来检查我想现在我明白了类型转换。但是我不明白我的i386 ubuntu桌面上的代码是怎么工作的。当我这么做的时候,我尝试了两种
(int)c=EOF
c=(int)EOF
。它从来都不起作用。@neckTwi这不是问题所在。使用
intc;c=getc(f)
@neckTwi:不,它们不起作用。当您将
getc
的结果分配给
c
时,您已经将其转换为
char
,转换后的值将永远不会是
EOF
,因为它不能用
char
表示。正如我所说,将
c
的类型更改为
int
,这样它就可以表示
EOF
。您必须将c声明为int,而不是强制转换为int。因为getc的结果包括所有256个可能的char值(假设char为8位)和EOF,所以char不足以存储所有大小写。因此,你们必须使用一个更广泛的类型来检查我想现在我明白了类型转换。但是我不明白我的i386 ubuntu桌面上的代码是如何工作的。或者只是
而(cin>>c){/*do something*/}
fstream-fin(“/dev/ttyUSB0”,fstream::in”)。当我拔下设备时,
fin>>c
永远不会返回,CPU使用率为100%,你可以像你说的那样打开一个ifstream fin,然后在我的代码中用fin替换它,这不起作用吗?不起作用。在调试时,我发现当设备拔出并且cpu使用率达到100%时,
fin>>ch
从未返回。因此,它可能在
fin
内部无限循环,或者在(cin>>c){/*do something*/}
fstream-fin(“/dev/ttyUSB0”,fstream::in”)时只在
内部循环。当我拔下设备时,
fin>>c
永远不会返回,CPU使用率为100%,你可以像你说的那样打开一个ifstream fin,然后在我的代码中用fin替换它,这不起作用吗?不起作用。在调试时,我发现当设备拔出并且cpu使用率达到100%时,
fin>>ch
从未返回。所以它可能在
fin
中无限循环。