2014-10-02 2 views
9

Я пытаюсь изучить базовый C++, будучи разработчиком Java. Поэтому я решил попробовать КЛИОН. Я написал этот базовый код, чтобы ознакомиться с некоторыми синтаксисами C++.Проблемы с отладкой простой консольной программы :: CLion

#include <iostream> 
using namespace std; 

int main() { 
    string word; 

    cout << "Enter a word to reverse characters: " << endl; 
    getline(cin, word); 

    for(int i = word.length(); i != -1; i--) { 
     cout << word[i]; 
    } 

    return 0; 
} 

Код функциональный. Он меняет любое слово, которое вы вводите. Я хотел пройти через него, чтобы увидеть переменные, а что нет, и проверить отладчик CLion.

Моя проблема возникает, когда я получаю

getline(cin, word); 

Когда я ступаю на эту линию, я ввожу слово и нажмите клавишу ВВОД. Затем переходим. После этого ничего не происходит; все кнопки переходов, дюймов и т. д. отключены. Я не могу продолжить цикл или запустить оставшуюся часть кода.

Я много раз использовал отладчик Eclipse для разработки Java без каких-либо проблем. Любые идеи могут быть полезны.

TL; DR Как выполнить команду командной строки на C++ с базовыми вводами и выводами с использованием CLion?

+0

не отвечает на ваш вопрос, но у вас есть неопределенное поведение: 'string word; char wordReversedArray [word.length()]; '- у вас есть массив с длиной 0, которую вы пытаетесь записать в ... – John3136

+0

@ John3136 Вы правы. Я изменил код, чтобы быть немного более ясным. Та же проблема все еще сохраняется. –

+0

Может быть так же просто, как буферизация - 'cout <<" str ";' писать на консоль/терминал. Консоль может накапливать сообщения до тех пор, пока не получит новую строку. Попробуйте 'cout <<" str "<< endl;' тоже посмотрите, если это объясняет вещи ... – John3136

ответ

11

Я воспроизвел проблему - смотрит на меня как при отладке новой строки проглатывания в IDE и не передается обратно в программу. I've submitted a bug to JetBrains. Я не вижу возможности обойти это, не выходя из среды IDE и отлаживая напрямую GDB или другую среду IDE.


UPDATE: Эта проблема была устранена в Clion EAP Построить 140.1221.2. Он даже сделал первые изменения, перечисленные в примечаниях к выпуску:

Наиболее ценные изменения:

  • Debugger не висит на «CIN >>» оператор больше.
+1

Увы, это, похоже, не исправлено в последнем EAP. – sfjac

2

Посмотрите на свой код, если все правильно, вам нужно добавить #include <string>.

Когда я запускаю это, он компилирует и завершает вывод.

#include <iostream> 
#include <string> 

int main() { 

    std::string word; 

    std::cout << "Enter a word to reverse chars: "; 
    std::getline(std::cin, word); //Hello 

    for (int i = word.length() - 1; i != -1; i--) { 
     //Without - 1 " olleh" 
     //With - 1 "olleh" 
     std::cout << word[i]; 
    } 
    std::cout << std::endl; 
    system("pause"); 
    return 0; 
} 
+0

'std :: string' на некотором' C++ 'реализация может быть доступна с помощью' iostream', не включая 'string' явно. Более того, если 'std :: string' недоступен, вы увидите ошибку времени компиляции и не будете выходить во время отладки. –

+1

@MohitJain true, но с 'iostream' вы вызываете' std :: cin.getline (char *, streamsize) '. С помощью 'string' вы вызываете' std :: getline (std :: istream, std :: string) '. – CodeMonkey

1

Используйте следующий код. Я изменил ваш код, чтобы сделать его работоспособным для вашей цели. :)

#include <iostream> 
#include <string> 
using namespace std; 

int main() { 
    string word; 

    cout << "Enter a word to reverse characters: " << endl; 
    getline(cin, word); 

    for(int i = word.length() - 1; i != -1; i--) { 
     cout << word[i]; 
    } 

    printf("\n"); 

    system("pause"); 

    return 0; 
} 
+0

Почему вы говорите, что нормально использовать систему («пауза»)? Не думаете ли вы, что новичка выиграет от какого-либо взгляда на то, как на самом деле обратить строку на C++? 'string (s.rbegin(), s.rend())' подразумевая s является строкой? – user2913685

+0

На самом деле не понимаю, о чем вы говорите. Система («пауза») фактически позволяет нам видеть окно вывода после завершения выполнения программы. Это не имеет ничего общего со строкой. –

Смежные вопросы