Solange ich nur printf verwende, funktioniert die interne Console von Eclipse gut. Bei scanf ist sie nicht mehr zu gebrauchen. Kann man irgendwo auf die Windows Console (MS-Dos-Eingabeaufforderung) umschalten ?
Registriert: Sa Aug 18, 2007 18:47 Beiträge: 694 Wohnort: Köln
Programmiersprache: Java
Zumindest bei einer Java Anwendung kann man in Eclipse bei der Run-Configuration im Reiter 'Common' 'Allocate Console' aktivieren (wenn es nicht sogar standardmäßig an ist), damit kann man dann Eingaben entgegennehmen.
_________________ Es werde Licht. glEnable(GL_LIGHTING); Und es ward Licht.
Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"
Er nimmt Eingaben entgegen, aber leider nicht optimal. Bei folgendem Code, bleibt die Console leer. Ich kann zwar eine Zahl eingeben und mit <Enter> bestätigen. Erst anschliessend erscheint auch "Zahl eingeben:", mit dem restlichen Text.
Wen ich die EXE direkt, z.B. in der MS-DOS Eingabeaufforderung starte, dann funktioniert es ohne Probleme.
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Das ist kein Problem von Eclipse. Wenn du etwas mit printf() ausgibst, wird es erstmal in einen Buffer geschrieben, aber möglicherweise erst später ausgegeben (aus Geschwindigkeitsgründen, falls du z.B. deinen Ausgabetext Zeichen für Zeichen zusammensetzt). Um eine sofortige Ausgabe zu erzwingen, kannst du entweder fflush() aufrufen oder eine neue Zeile beginnen ("\n" am Ende des Strings).
Btw, gibt es einen Grund warum du C verwendest und nicht gleich C++?
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
mathias hat geschrieben:
Wieso funktioniert es dann, wen ich die EXE direkt in der MS-DOS-Eing. oder im Explorer starte ?
Wieviel gepuffert wird, bis es zur endgültigen Ausgabe kommt, hängt natürlich von der Konsole ab. Aber dass überhaupt gepuffert wird, ist ISO-Standard, womit du das Problem grundsätzlich überall hast.
mathias hat geschrieben:
Der grundlegende Sprachsyntax ist ja fast gleich oder täusche ich mich da ?
Was hat C++ für Vorteile ausser der Objectorientierung ?
Die grundlegende Syntax ist ähnlich, das stimmt. Aber die Syntax ist nicht das, was C++ so viel besser macht als C. Ich verstehe nicht ganz, warum Objektorientierung allein für dich nicht schon Grund genug ist, wo du doch aus der Pascal-Ecke kommst (OOP wird dort doch auch eingesetzt, wenn ich mich recht entsinne?).
Aber hier noch ein paar andere:
Operator-Overloading (sehr bequem, wenn man mit Vektoren und Matrizen arbeitet! - siehe auch mein Code-Beispiel hier)
Templates, insbesondere jene, die dir schon von der STL bereitgestellt werden (std::vector<>, std::list<>, std::queue<> usw.). Die STL-Container sollte man unbedingt einsetzen, es reduziert die Anzahl der Fehler in der Speicherverwaltung enorm.
Exception-Handling (wobei es Geschmackssache ist, ob dies vorteilhaft ist, finde ich)
Es gibt noch mehr, aber diese kommen mir als erstes in den Sinn.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Um eine sofortige Ausgabe zu erzwingen, kannst du entweder fflush() aufrufen oder eine neue Zeile beginnen ("\n" am Ende des Strings).
Mit "fflush(stdout);" geht es jetzt, das "\n" bringt nichts. Das Pufferproblem gibt es wohl unter Pascal nicht. Oder vielleicht liegt es daran, das man dort meistens die Unit CRT verwendete. Oder eben, weil das Prgramm direkt unter DOS lief, bei C läuft es da auch ohne Probleme.
Zitat:
Die grundlegende Syntax ist ähnlich, das stimmt. Aber die Syntax ist nicht das, was C++ so viel besser macht als C. Ich verstehe nicht ganz, warum Objektorientierung allein für dich nicht schon Grund genug ist, wo du doch aus der Pascal-Ecke kommst (OOP wird dort doch auch eingesetzt, wenn ich mich recht entsinne?).
Dann wird es wohl besser sein, direkt mit C++ zu beginnen. Für den Grundsyntax, kann ich ja mein Buch trotzdem noch verwenden, bevor ich es wegschmeisse.
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2067
Programmiersprache: C++
mathias hat geschrieben:
Für den Grundsyntax, kann ich ja mein Buch trotzdem noch verwenden, bevor ich es wegschmeisse.
Mach es nicht, da drinnen steht Kram wie malloc etc. Der einzige Grund weshalb man so etwas in C++ nutzen möchte wäre realloc, aber selbst der ist sehr schwach. Bedenke bitte, dass spätestens bei C++11 new (das C++-Äquivalent von malloc) nur noch im Kontext von std::unique_ptr/std::shared_ptr verwendet werden sollte. Eben konsequente Anwendung von RAII. Dies wird im C-Buch fehlen und auch in alten C++-Büchern. Dabei ist es wichtig, da gerade die konsequente Nutzung dessen Dinge wie Exceptions erst richtig nützlich machen. Und der Syntax von C++ und Delphi unterscheiden sich eher in Nuancen. Eben so Dinge wie == vs = und if x then vs if (x).
Wieso funktioniert dies nicht richtig ? Wen ich mehr als 10 Zeichen eingebe, dann komme ich aus der Schleife raus. Bei weniger als 10 Zeichen benutzte bricht es bei <Enter> nicht ab. Auch bei dieser Zeile erscheint <Enter> nicht, es müsste doch eine 13 kommen. Ach erscheint nicht jedes Zeichen einzeln, sondern es kommen alle miteinander, wenb ich <Enter> drücke.
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2067
Programmiersprache: C++
Was möchtest du machen? Ansonsten ist es bis auf std::cout C, nicht C++. std::cout gibt nicht direkt aus, es muss dafür ein std::endl kommen. Und wegen Enter: Ist es sicher \n? Oder vielleicht eine Kombination aus \n\r? Und kann es zu char konvertiert werden oder gibt es keinen >> operator dafür?
Weil du C-Strings und C-Zeiger nutzt. Außer in Ausnahmefällen wenn du einen triftigen Grund hast, solltest du das auf gar keinen Fall machen.
Nutze "std::unique_ptr" und "std::string"! Sonst hast du bloß eine Menge Komplexität und wenn du nicht genau aufpasst jede Menge Speicherlecks! "std::string" hat übrigens den ">>"-Operator für Streams überladen. Damit wäre die gesamte Funktion überflüssig!
Code:
std::string InputStr;
std::cin>> InputStr;
Während man bei Java mit Vorwissen und einem nach einem kleinen Überblick über die Sprache vielleicht eher direkt so loslegen kann, ist es in C++ schon sehr sehr stark zu empfehlen, das man vorher sich mit den Grundlagen der Sprache in Form eine Tutorials(Zb. das sieht ok aus) oder besser Buches aneignet und Übungen dazu macht. (zb. "C++ lernen und professionell anwenden") Ich kann dir aus eigener Erfahrung berichten, das sonst wahrscheinlich wenig Sinnvolles dabei rauskommt. (Siehe Code) Die Sprache erfordert einfach ein bisschen Hintergrundwissen und der Programmierer sollte wissen was er tut. Und nein, prinzipiell bist du nicht verwöhnt. C++ hindert dich bloß nicht daran, es falsch zu machen.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7804 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Oder - um mal was ganz anderes Vorzuschlagen: Nimm Java. Ist eine C-Artige Syntax aber deutlich besser in Eclipse integriert. Und du bekommst dort die Klasse String die genau so funktioniert wie du dir das vorstellst.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.