C++ 在C++;如何在arm体系结构中检测EOF
在上面的代码中,当我拔下设备时,beaglebone ubuntu是arm架构,循环从未中断。上面的代码在我的i386 ubuntu桌面上运行 --编辑-- 真奇怪!迈克的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
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
中无限循环。