2016-02-24 3 views
1

У меня есть базовый код, который я пытаюсь запустить в терминале для класса. У меня возникли проблемы с окончанием кода командой ctrl + d, когда я закончил печатать. Код ищет количество определенных символов, «e», гласный, а также общее количество используемых символов. Часами вчера я смог использовать команду Ctrl + D для завершения моей программы и продолжать редактировать/добавлять к ней, но он внезапно прекратил работать.CTRL + D внезапно перестает работать в Mac OS X Terminal, не выполняет операцию EOL

Я заметил, что когда строка ввода «d» вводится в окно, возвращается клавиша возврата, а затем используется ctrl + d, программа успешно отображает данные, но в противном случае любой другой вход не кажется, дают команду EOF, которую я ищу.

Я попытался сбросить свой терминал, сохранил условие, в котором работает строка «d», и попытался снова. Что происходит? Прочитав подробно по теме, я думаю, это может быть связано с чем-то еще, работающим в фоновом режиме?

int main() { 
    char ch; 
    int ecount=0, vowels=0, other=0; 
    cin.get(ch); 
    while(!cin.eof()) { 
     switch(ch) { 
      case 'e': 
       ecount++; 
      case 'a'; 
      case 'i': 
      case 'o': 
      case 'u': 
       vowels++; 
       break; 
      default: 
       other++; 
     } 
     cin.get(ch); 
    } 
    cout << ecount << " "<< vowels << " " << other << endl; 
} 
+1

Если вы не нажмете сначала, сначала дважды нажмите Ctrl + D. –

+0

@thatotherguy Я тоже это заметил - это стандартное поведение? Вы знаете, что вызывает это? –

+0

Да, это ожидается. Ctrl-D просто делает любой ожидающий вызов чтения на возврат терминала с любыми буферизованными данными, подобными возврату (кроме этого вы также получаете '\ n'). Если вы нажмете Ctrl-D после Return или Ctrl-D, вызов чтения вернется с 0 байтами, что по соглашению означает конец ввода. –

ответ

1

Вы не должны проверять только петлю eof. Есть и другие способы для потока к ошибке. Просто сделайте так:

while(cin.get(ch)) 
{ 
    // ... 
}