2012-01-27 2 views
0
#include "ellison.h" 

int main(int argc, char *argv[]) 
{ 
    if (argc > 1) 
    { 
     int errorOutput = Execute(argc, argv); 
     switch (errorOutput) 
     { 
      case 0: 
       return EXIT_SUCCESS; 
       break; 
      default: 
       cout << "An error occured: " << ParseError(errorOutput); 
       return ERROR; 
       break; 
     } 
    } 

    cout << "+---------------+ \n"; 
    cout << "| ellison 0.1.1 | \n"; 
    cout << "+---------------+ \n\n"; 

    int errorOutput = 0; 
    string input; 

    while (true) 
    { 
     cout << ">"; 
     input = ""; 
     cin >> input; 

     if (input == "quit") 
     { 
      if (errorOutput != 0) 
       return ERROR; 
      else 
       return EXIT_SUCCESS; 
     } 

     errorOutput = Execute(input); 
     switch (errorOutput) 
     { 
      case 0: 
       break; 
      default: 
       cout << "An error occured: " << ParseError(errorOutput); 
       break; 
     } 
    } 
} 

Этот код компилируется и работает нормально. Странная часть состоит в том, что если я набираю длинную строку букв с одним или несколькими пробелами, у меня есть два больше знаков, а не один. Есть ли какая-то ошибка, которую я сделал? Я добавлю, что это не работает с короткими входными строками и что это было скомпилировано с помощью Visual-C++ 2012Проблемы с вводом в приложение командной строки

ответ

0

std :: cin читает только до первого места. Затем он не очищает буфер чтения. Итак, из-за вашего «while (true)», когда он попадает во второй std :: cin, он считывает вторую часть вашего ввода, не дожидаясь нового ввода. Вы должны попробовать std :: getline (поток & readBuffer, std :: string & destination). Он будет читать всю строку, как например:

getline(cin, input); 

Просто не использовать CIN и GetLine в то же время, если вы не используете cin.ignore (1) после использования CIN, потому что CIN оставляет «/ п» в потоке. Если вы используете getline сразу после того же потока, он остановится на этом «/ n», не прочитав то, что вы хотели прочитать.

+0

Спасибо. Это было то, что мне нужно. – Andonuts