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

上記のコードでは、デバイスのプラグを抜いても、アーム アーキテクチャであるビーグルボーン ubuntu でループが中断されることはありません。上記のコードは、i386 ubuntu デスクトップで機能しました。

- 編集 -

とても奇妙です!マイクのint c; うまくいきませんでした。ギブスを監視しcますc=255が、ループに変更c!=EOFc!=255ても壊れません!! 1時間頑張った後、私は非常にイライラしています!!!

- 編集 -

やってみfstream fin("/dev/ttyUSB0", fstream::in);ました。入力シリアルデバイスのプラグを抜くfin>>cと、CPU使用率が100%になりません!! バグだと思います!

4

2 に答える 2

4

のタイプをcからcharに変更しintます。EOFの範囲外ですchar

明確にするために、「型を変更する」とは、宣言を次のように変更することを意味します

int c;

intに切り捨てた後、値を にキャストし直さないでcharください。

于 2013-11-07T14:42:12.777 に答える
0

C++ では、cin を使用する方が簡単です。

int main()
{
    char ch;

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

        // Do something with you character
    }
}

これは、con >> ch が失敗したときに停止します。

于 2013-11-07T14:53:57.780 に答える