2014-10-02 14 views
9

Tôi đang cố gắng tìm hiểu cơ bản C++ sau khi trở thành nhà phát triển Java. Vì vậy, tôi quyết định thử CLION. Tôi đã viết mã cơ bản này chỉ để làm quen với một số cú pháp C++.Vấn đề gỡ lỗi chương trình điều khiển đơn giản :: 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; 
} 

Mã này hoạt động. Nó đảo ngược bất cứ từ nào bạn nhập vào. Tôi muốn bước qua nó để xem các biến và những gì không, và để kiểm tra trình gỡ rối của CLion.

Vấn đề của tôi xảy ra khi tôi nhận được để

getline(cin, word); 

Khi tôi bước vào dòng này, tôi nhập một từ và nhấn Enter. Sau đó bước qua. Sau khi tôi làm điều này không có gì xảy ra; tất cả các nút trên, trong, vv đều bị tắt. Tôi không thể tiếp tục qua vòng lặp hoặc chạy phần còn lại của mã.

Tôi đã sử dụng trình gỡ rối của Eclipse nhiều lần để phát triển Java mà không gặp bất kỳ vấn đề nào. Bất kỳ ý tưởng nào cũng hữu ích.

TL; DR Làm cách nào để tôi thực hiện chương trình dòng lệnh C++ với đầu vào và đầu ra cơ bản bằng CLion?

+0

không trả lời câu hỏi của bạn, nhưng bạn đã có hành vi chưa xác định: 'string word; char wordReversedArray [word.length()]; '- bạn có một mảng với độ dài 0 mà bạn cố gắng viết vào ... – John3136

+0

@ John3136 Bạn đúng. Tôi đã thay đổi mã để rõ ràng hơn một chút. Vấn đề tương tự vẫn còn tồn tại. –

+0

Có thể đơn giản như đệm - 'cout <<" str ";' ghi vào bàn điều khiển/thiết bị đầu cuối. Giao diện điều khiển có thể đệm mọi thứ cho đến khi nó nhận được một dòng mới. Hãy thử 'cout <<" str "<< endl;' quá xem nếu điều đó giải thích mọi thứ ... – John3136

Trả lời

11

Tôi đã sao chép vấn đề - trông giống như tôi khi gỡ lỗi dòng mới đang bị IDE nuốt và không được chuyển lại chương trình. I've submitted a bug to JetBrains. Tôi không nhìn thấy một cách để làm việc xung quanh này ngoài việc nhận ra IDE và gỡ lỗi trực tiếp với GDB hoặc IDE khác.


CẬP NHẬT: Vấn đề này đã được cố định trong Clion EAP Xây dựng 140.1221.2. Nó thậm chí thực hiện thay đổi đầu tiên được liệt kê trong các ghi chú phát hành:

Những thay đổi có giá trị nhất là:

  • Debugger không treo trên ‘cin >>’ điều hành nữa.
+1

Than ôi, điều này dường như không được sửa trong EAP mới nhất. – sfjac

2

Nhìn vào mã của bạn, nếu mọi thứ đều chính xác, bạn cần phải thêm #include <string>.

Khi tôi chạy điều này, nó biên dịch và hoàn thành đầu ra.

#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' trên một số' C++ 'hiện thực có thể có sẵn với' iostream' mà không bao gồm 'chuỗi' một cách rõ ràng. Hơn nữa nếu 'std :: string' không có sẵn, bạn sẽ thấy một lỗi thời gian biên dịch và không phải vấn đề trong khi gỡ lỗi. –

+1

@MohitJain đúng, nhưng với 'iostream', bạn gọi' std :: cin.getline (char *, streamize) '. Với 'string', bạn gọi' std :: getline (std :: istream, std :: string) '. – CodeMonkey

1

Sử dụng mã sau. Tôi đã sửa đổi mã của bạn để làm cho nó hoàn toàn khả thi cho mục đích của bạn. :)

#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

Tại sao bạn nói rằng nó ok để được sử dụng hệ thống ("tạm dừng")? Bạn không nghĩ rằng người mới bắt đầu sẽ được hưởng lợi từ một số cái nhìn vào làm thế nào để thực sự đảo ngược một chuỗi trong c + +? 'string (s.rbegin(), s.rend())' ngụ ý s là một chuỗi? – user2913685

+0

Thực sự không hiểu bạn đang nói gì. Hệ thống ("tạm dừng") thực sự có thể cho chúng ta thấy cửa sổ đầu ra sau khi thực hiện chương trình hoàn thành. Nó không có gì để làm với chuỗi đảo ngược. –

Các vấn đề liên quan