Проблемы отладки простой консольной программы :: CLion

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

#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?

9

Решение

Я повторил проблему — мне кажется, что при отладке новая строка проглатывается IDE и не передается обратно в программу. Я отправил сообщение об ошибке в JetBrains. Я не вижу способа обойти это, кроме выхода из IDE и отладки напрямую с помощью GDB или другой IDE.


ОБНОВИТЬ: Эта проблема была исправлена ​​в Clion EAP Build 140.1221.2. Он даже сделал первое изменение, указанное в примечаниях к выпуску:

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

  • Отладчик больше не зависает от оператора «cin >>».
11

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

Глядя на свой код, если все правильно, нужно добавить #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;
}
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;
}
1