Консоль Eclipse неправильно анализирует ввод - PullRequest
0 голосов
/ 25 июня 2019

У меня проблема с консолью Eclipse, когда кажется, что мои данные не передаются должным образом.Это с новым проектом Hello World C ++.Консоль Eclipse зацикливается бесконечно, но работает из командной строки Windows или терминала Cygwin работает нормально.Я играл с кодировкой консоли безрезультатно.

int main() {
    int times;
    while (true) {
        cout << ">> " << flush;

        // Get input from the command line
        string input;
        getline(cin, input);

        cout << "This is loop number " << times << endl;
        times++;

        if (input == "exit") {
            cout << "Exiting" << endl;
            return 0;
        }
    }
}

Консоль Eclipse:

>> exit
This is loop number 1
>> exit
This is loop number 2
>> exit
This is loop number 3
>> exit
This is loop number 4
>> exit
This is loop number 5
>> exit
This is loop number 6
>> exit
This is loop number 7
>> 

Командная строка Windows:

C:\Users\Andy>eclipse-workspace\stacktest\Debug\stacktest.exe
>> exit
This is loop number 1
Exiting

РЕДАКТИРОВАТЬ

Благодаря @Armin кажется, что Eclipse вставляет новую строку в конце ввода.

>> hello
This is loop number 0


Size of input6   Input: 'hello
'
Char: h   int representaion: 104
Char: e   int representaion: 101
Char: l   int representaion: 108
Char: l   int representaion: 108
Char: o   int representaion: 111
Char: 
   int representaion: 13

1 Ответ

0 голосов
/ 29 июня 2019

Интересно. На моей машине это работает.

Так что единственная причина, по которой это не сработает, это: «выход» не равен входу. Там может быть CR или LF или CR / LF или другой символ в конце ввода. Или у нас разные типы символов.

Пожалуйста, запустите следующую тестовую программу:

include <iostream>
#include <iomanip>
#include <string>

int main() 
{
    int times{ 0 };
    while (true) {
        std::cout << ">> " << std::flush;

        // Get input from the command line
        std::string input{};
        std::getline(std::cin, input);

        std::cout << "This is loop number " << times << std::endl;
        times++;

        // Test Begin ----------------------------------------
        std::cout << "\n\nSize of input" << input.size() << "   Input: '" << input << "'\n";
        for (char c : input) {
            std::cout << "Char: " << c << "   int representaion: " << static_cast<unsigned int>(c)<< '\n';
        }
        // Test End----------------------------------------

        if (input == "exit") {
            std::cout << "Exiting" << std::endl;
            return 0;
        }
    }
}

Мне действительно любопытно, каков будет результат. , .

...