2014-10-02 26 views
9

Sto cercando di imparare il C++ di base dopo essere stato uno sviluppatore Java. Quindi ho deciso di provare CLion. Ho scritto questo codice base solo per familiarizzare con la sintassi del C++.Problemi di debug di un semplice programma di console :: 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; 
} 

Il codice è funzionale. Inverte qualsiasi parola immessa. Volevo superarlo per vedere le variabili e cosa no, e per testare il debugger di CLion.

Il mio problema si verifica quando arrivo a

getline(cin, word); 

Quando faccio un passo su questa linea, entro in una parola e premi invio. Quindi passo oltre. Dopo averlo fatto, non succede nulla; tutti i pulsanti passo dopo passo, in, ecc. sono disabilitati. Non riesco a continuare il ciclo o eseguire il resto del codice.

Ho usato il debugger di Eclipse molte volte per lo sviluppo Java senza problemi. Qualsiasi idea potrebbe essere utile.

TL; DR Come si passa attraverso un programma di riga di comando C++ con input e output di base utilizzando CLion?

+0

non risponde alla tua domanda, ma hai un comportamento non definito: 'stringa di parole; char wordReversedArray [word.length()]; '- hai un array con lunghezza 0 che provi a scrivere in ... – John3136

+0

@ John3136 Hai ragione. Ho cambiato il codice per essere un po 'più chiaro. Lo stesso problema persiste ancora. –

+0

Potrebbe essere semplice come il buffering - 'cout <<" str ";' scrivere nella console/terminale. La console può bufferizzare le cose fino a quando non ottiene una nuova riga. Prova 'cout <<" str "<< endl;' vedi anche se questo spiega le cose ... – John3136

risposta

11

ho replicato il problema - mi sembra in fase di debug il ritorno a capo viene inghiottito dalla IDE e non passato al programma. I've submitted a bug to JetBrains. Non vedo un modo per ovviare a questo oltre a uscire dall'IDE e eseguire il debug direttamente con GDB o un altro IDE.


UPDATE: Questo problema è stato risolto nel Clion EAP costruire 140.1221.2. E 'anche fatto il primo cambiamento elencati nelle note di rilascio:

Le modifiche di maggior valore sono:

  • Debugger non si blocca su ‘cin >>’ operatore più.
+1

Purtroppo, questo non sembra essere stato risolto nell'ultimo EAP. – sfjac

2

Guardando il codice, se tutto è corretto, è necessario aggiungere #include <string>.

Quando eseguo questo, compila e completa l'output.

#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' su alcuni' C++ 'Le implementazioni possono essere disponibili con' iostream' senza includere 'string' in modo esplicito. Inoltre se 'std :: string' non è disponibile, vedresti un errore in fase di compilazione e non il problema durante il debug. –

+1

@MohitJain true, ma con 'iostream', si chiama' std :: cin.getline (char *, streamsize) '. Con 'string', si chiama' std :: getline (std :: istream, std :: string) '. – CodeMonkey

1

Utilizzare il codice seguente. Ho modificato il tuo codice per renderlo praticabile per il tuo scopo. :)

#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

Perché stai dicendo che va bene usare il sistema ("pausa")? Non credi che il principiante trarrebbe beneficio da qualche sguardo su come invertire effettivamente una stringa in C++? 'string (s.rbegin(), s.rend())' implica s è una stringa? – user2913685

+0

In realtà non capisco di cosa stai parlando. Sistema ("pausa") in realtà in grado di vedere la finestra di output dopo l'esecuzione del programma completato. Non ha nulla a che fare con il reverse delle stringhe. –

Problemi correlati