2014-10-02 4 views
9

Java 개발자가 된 후에 기본 C++을 배우려고합니다. 그래서 저는 CLion에게 한 번 시험해보기로했습니다. 필자는이 기본 코드를 작성하여 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의 디버거를 테스트 해보기 위해 단계별로 설명했습니다. 나는이 라인에, 나는 단어를 입력하고 Enter 키를 누르 단계 때 나는

getline(cin, word); 

에 도착하면

내 문제가 발생합니다. 다음 단계. 내가 이것을 한 후에는 아무 일도 일어나지 않는다. 모든 step over, in 등의 버튼이 비활성화됩니다. 루프를 계속 진행할 수 없거나 나머지 코드를 실행할 수 없습니다.

Java 개발을 위해 Eclipse의 디버거를 여러 번 사용했습니다. 어떤 아이디어라도 도움이 될 수 있습니다.

TL; DR CLion을 사용하여 기본 입력과 출력으로 C++ 명령 줄 프로그램을 단계별 실행하려면 어떻게해야합니까?

+0

질문에 대한 답변이 없지만 정의되지 않은 동작이 있습니다. 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는 : 140.1221.2 빌드이 문제는 Clion EAP 수정되었습니다. 심지어 릴리스 노트에 나열된 첫 번째 변경 한 :

가장 중요한 변화는 다음과 같습니다

  • 디버거가 더 이상 '>> 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++ '구현은'string '을 명시 적으로 포함하지 않고'iostream'을 통해 사용할 수 있습니다. 게다가'std :: string'을 사용할 수 없다면 컴파일 시간 오류가 발생하고 디버깅 중에는 문제가 발생하지 않습니다. –

+1

@MohitJain true이지만'iostream'으로'std :: cin.getline (char *, streamsize)'를 호출합니다. 'string'으로'std :: getline (std :: istream, std :: string)'을 호출합니다. – CodeMonkey

1

다음 코드를 사용하십시오. 나는 당신의 목적에 맞게 실행할 수 있도록 코드를 수정했다. :)

+0

왜 시스템 ("일시 중지")을 사용하는 것이 좋습니다. 초보자가 실제로 C++에서 문자열을 뒤집는 방법에 대해 살펴 보는 것이 도움이된다고 생각하지 않습니까? 'string (s.rbegin(), s.rend())'s는 문자열입니까? – user2913685

+0

실제로 당신이 말하는 것을 이해하지 못합니다. System ("pause")은 실제로 프로그램이 실행 된 후에 출력 창을 볼 수있게 해줍니다. 문자열 역순과 아무 관련이 없습니다. –