Probleme debugging simple-Konsole-Programm :: CLion
Ich versuche zu lernen Sie die Grundlagen von C++ nach Java-Entwickler. Also beschloss ich, geben CLion versuchen. Ich schrieb dieses basic-code nur vertraut zu machen, mich mit einigen C++ - syntax.
#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;
}
Den code funktionsfähig ist. Es kehrt auch immer Wort, das Sie Eingabe. Ich wollte Schritt für Schritt durch, um zu sehen, Variablen und was nicht, und zu testen, CLion-debugger.
Mein problem tritt auf, wenn ich
getline(cin, word);
Wenn ich auf diese Zeile, ich geben Sie ein Wort ein, und drücken Sie die EINGABETASTE. Dann Schritt über. Nachdem ich dies Tue, passiert nichts; alle Schritt über, in, etc. Schaltflächen sind deaktiviert. Ich bin nicht in der Lage, weiterhin über die Schleife, oder führen Sie den Rest des Codes.
Habe ich benutzt Eclipse-debugger aus, viele Male für die Entwicklung mit Java ohne jegliche Probleme. Alle Ideen könnten hilfreich sein.
TL;DR Wie kann ich Schritt für Schritt durch einen C++ - Kommandozeilen-Programm mit basic input und output mit CLion?
- nicht beantworten Ihre Frage, aber hast du Undefiniertes Verhalten:
string word; char wordReversedArray[word.length()];
- Sie haben ein array mit 0-Länge, die Sie versuchen zu schreiben, in... - Du hast Recht. Ich änderte den code ein wenig klarer. Das gleiche problem weiterhin besteht.
- Könnte so einfach sein wie Pufferung -
cout << "str";
schreiben in die Konsole/terminal. Kann die Konsole Puffer Dinge, bis Sie bekommt einen Zeilenumbruch. Versuchencout << "str" << endl;
zu sehen, ob das etwas erklärt... - Feste ein problem. Sie druckt nun, als erwartet. Allerdings bin ich immer noch das Problem bei der Eingabe.
- Hinzufügen eines
cout
vor der Schleife zeigt nun das Wort. Hinzufügen einescout
in Ihrer Schleife anzeigeni
. Sehen Sie, wenn eveything ist, wie Sie es erwarten. C++ verwendet 0-basierte Indizes, soword[word.length]
ist nicht gültig. - Ja, das ist ein leicht umgehen. Ich hatte gehofft, dass ein Update für den debugger, da werde ich sicherlich schreiben, erweiterte code-erfordern eine Art debugger.
- Nicht klar, was für ein problem hast du eigentlich mit dem debugger?
- Die debugger-Optionen sind deaktiviert, nachdem Sie ein Wort. Ich bin nicht in der Lage, Schritt durch die Schleife, oder sonst was folgende getline(cin, Wort);
- Haben Sie die Anwendung kompiliert mit debug-Unterstützung aktiviert? (side note, ändern Sie die Schleife starten, mit
i = static_cast<int>(word.length()) - 1
). Gehen Sie zu " Ausführen | Bearbeiten Sie Konfigurationen Dialogfeld, und ändern Sie die Konfiguration auf Debug
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe repliziert, das problem sieht für mich so aus, wenn das Debuggen des newline wird verschluckt von der IDE und nicht zurück an das Programm. Die ich eingereicht habe, einen Fehler zu JetBrains. Ich sehe nicht einen Weg, dies zu umgehen, abgesehen von immer aus der IDE und das debugging direkt mit GDB oder eine andere IDE verwenden.
UPDATE: Dieses Problem wurde behoben in der Clion EAP-Build 140.1221.2. Er selbst machte die erste änderung aufgeführt, die in den release notes:
Blick auf deinen code, wenn alles korrekt ist, müssen Sie
#include <string>
.Wenn ich diesen starte, kompiliert und vervollständigt die Ausgabe.
std::string
auf einigeC++
- Implementierungen, die verfügbar sein können mitiostream
ohnestring
ausdrücklich. Außerdem, wennstd::string
nicht verfügbar ist, würde Sie einen compile-Zeit-Fehler und kein Problem beim Debuggen.iostream
rufen Siestd::cin.getline(char*, streamsize)
. Mitstring
rufen Siestd::getline(std::istream, std::string)
.Verwenden Sie den folgenden code. Ich habe modifiziert Ihren code, um es geeignet für Ihren Zweck. 🙂
string(s.rbegin(), s.rend())
impliziert s ist ein string?