В C ++ Как обнаружить EOF в архитектуре arm

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 никогда не возвращается и загрузка процессора составляет 100%! Я ожидаю, что это ошибка!

0

Решение

Изменить тип c от char в int, EOF находится за пределами диапазона char,

Чтобы уточнить, под «изменить тип» я имею в виду изменить объявление на

int c;

не отбрасывать значение обратно int после обрезания до char,

4

Другие решения

В C ++ проще использовать cin.

int main()
{
char ch;

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

// Do something with you character
}
}

Это прекратится, когда произойдет сбой con >> ch

0

По вопросам рекламы [email protected]