Programm funktioniert nur beim Debugen
-
Ich verstehe nicht was ich falsch mache. Wenn ich es Debuge funktioniert es wunderbar aber wenn ich in den Ordner schaue in dem das Programm liegt und es von dort starte funktioniert es nicht mehr.

#include <iostream> #include <windows.h> #include <string> using namespace std; int main() { string IP; cout << "Examples:" << endl; cout << "Link = enitin.co.de" << endl; cout << "IP = 127.0.0.1\n" << endl; cout << "Link/IP: "; cin >> IP; Ping: system("cls"); cout << "Testing ping..." << endl; system(("ping " + IP).c_str()); cout << "\nPing will be tested again in 5 seconds for " << IP << "." << endl; Sleep(5000); goto Ping; }
-
Enitin schrieb:
Ich verstehe nicht was ich falsch mache.
- Du benutzt goto
- Du benutzt system() und versuchst sowas wie ein Shellscript in C++ zu schreiben
- Du schreibst "es funktioniert nicht mehr", was keine Fehlerbeschreibung ist, mit der man auch nur im Entferntesten was anfangen könnte
- Du hast ganz offensichtlich gegen die Netiquette verstoßen und die mit wichtig markierten Threads hier im Forum nicht gelesen.
-
Mit "es funktioniert nicht mehr" meine ich das es das hier ausgibt:
Testing ping...
Examples:
Link = enitin.co.de
IP = 127.0.0.1Link/IP:
Es sollte nun eigentlich den Ping des Servers herausfinden was das Programm nur macht wenn es Gedebugt wird...
Ich benutze goto? Was ist daran ein Problem?
-
Zum Für und Wider goto
Go To Statement Considered Harmful:A Retrospective
http://david.tribble.com/text/goto.htmlDein Programmcode ist furchtbar siehe Pumuckel.
-
Schön das mein Programmcode furchtbar ist.
Dann würde ich doch gerne wissen wie alles richtig funktioniert und auchnoch einen schönen Code hat. Hättest du da nicht ein Code-Beispiel? 
-
Das Programm funktioniert auch im Release.
Nach Deiner "exakten und klaren" Fehlerbeschreibung, bleibt es bei Link/IP: stehen.
Das sollte keinen wundern und erst recht nicht den Programmschreiber, da im Quälcode cin >> "Link/IP" steht.
-
Das Programm startet sich zwar aber es funktioniert nicht so wie ich es möchte. Und außerdem steht im Code nicht
cin >> "Link/IP"sondern
cout << "Link/IP: ";Warum sollte das Programm überhaupt einfach stehenbleiben? Es fängt ganz normal bei [cpp]system("cls"); wieder an und dürfte also eigentlich garnicht stoppen.
-
Enitin schrieb:
Warum sollte das Programm überhaupt einfach stehenbleiben?
Weil im Code steht, dass es auf eine Eingabe warten soll. Dass du eine Eingabe machst, steht in deiner Fehlerbeschreibung jedenfalls nicht drin, also ist es erst mal nicht weiter verwunderlich, dass das Programm an dieser Stelle stehenbleibt.
-
Enitin schrieb:
Das Programm startet sich zwar aber es funktioniert nicht so wie ich es möchte.
wie möchtest du es denn?
der quellcode sieht so zwar alles andere als schön aus, aber der macht eigentlich was er soll, so sehe ich das
-
Schau mal was Du als Code gepostet hast.
[cpp]
cout << "Examples:" << endl;
cout << "Link = enitin.co.de" << endl;
cout << "IP = 127.0.0.1\n" << endl;
cout << "Link/IP: ";
cin >> IP;
[/cpp]Du scheinst Deinen "eigenen" Code nicht zu kennen.

Wozu 2x system?
system ruft einen Kommandointerpreten als eigenen Prozess auf. Als o machst Du ein Clearscreen in einem Konsolenfenster und ruftst das Ping in einem zweiten auf. Ansonsten such mal hier im Forum nach einen Thread über systems.
Wozu goto?
Ein while mit Abbruchbedingung ist schöner, da man dann das Programm sauber beenden. goto ist in 99% aller Fälle ein Zeichen, das der Schreiber des Programms nicht sonderlich gut programmiert sprich keine Idee vom Programmfluß hat. Siehe meinen Link.Das Programm funktioniert im Debug und Release.
Was nicht funktioniert ist Dein Verständnis des Programms.
-
noergel ich muss dich auf einen Fehler deinerseits hinweißen. Du hast das hier geschrieben: "Das sollte keinen wundern und erst recht nicht den Programmschreiber, da im Quälcode cin >> "Link/IP" steht." Und nicht "cin >> IP;". Aber der Befehl
gotoführt ja nach das
cin >> IP;also kann es doch garnicht dort anfangen. Oder? Natürlich sehe ich ein das mein Code wirklich schlecht geschrieben ist das aber auch daran liegt das ich noch ein totaler Anfänger bin.
Du scheinst dich ja gut auszukennen also schreib mir doch mal wie du das Programm machen würdest. Natürlich währe es auch noch gut wenn du alles Anfängergerecht erklären könntest.
-
Oh je

Du kommst erst gar nicht in Deine Endlosschleife.
cin >> IP bedeutet das das Programm am Eingabeprompt einen Wert erwartet und diesen dann in IP speichert. Das Programm warte am Prompt auf eine Eingabe, deshalb siehst Du nämlich nur Link/IP:_ (blinkender Unterstrich). Sobald Du irgendetwas eingibst, geht es weiter in die Endlosschleife. Ist der Wert falsch (4711.4712.4713.0) oder Blödsinn (z.B. Hurra) wird troztdem endlos das Ping aufgerufen.
Es fehlt ein Überprüfung der Eingabe und wie schon gesagt ein kontrollierbarer Abbruch.
Kleiner Tip nimm Dir eine Buch oder Tutorial und erarbeit Dir die Grundlagen in C++ und Programmierung.
Buchempfehlungen und Tutorials gibt es hier auf der Seite.
-
Bei mir funktioniert dein Programm auch. Sicher, dass du genau den Code verwendest, den du hier gepostet hast?
-
_matze ich bin mir sicher weil ich ihn kopiert habe.
Außerdem habe ich doch gesagt wenn ich es Debuge funktioniert es aber wenn ich es einfach so ohne Compiler und sonstiges starte funktioniert es nicht mehr. noergel ich habe mir schon ein Buch geholt und werde es auch weiterhin lesen. Und ich weiß das ich bei IP etwas eingeben muss. (Mit Abbruchfunktion usw wollte ich noch warten weil es ja bis jetzt noch nicht funktioniert und es den Code einfach noch unübersichtlicher macht.) Aber wie schon gesagt wenn ich die IP eingebe sollte er doch eigentlich den Ping herausfinden und es immer wiederholen.
-
Enitin schrieb:
Und ich weiß das ich bei IP etwas eingeben muss.
Dann beschreibt nochmal genau wie das Ergebnis aussieht dass du bekommst.
uU nimm das system("cls") weg, falls du dir einfach immer nur den Bildschirm löscht.
-
Enitin schrieb:
_matze ich bin mir sicher weil ich ihn kopiert habe.
Außerdem habe ich doch gesagt wenn ich es Debuge funktioniert es aber wenn ich es einfach so ohne Compiler und sonstiges starte funktioniert es nicht mehr.Und genau das kann ich nicht nachvollziehen. Bei mir funktioniert auch die Release-exe.
-
Also wenn ich das
system("cls");weglasse es einfach aus dem Ordner heraus öffne und "Link/IP" eingebe dann gibt er mir das aus:
Testing ping...
Examples:
Link = enitin.co.de
IP = 127.0.0.1Link/IP:
Anders wird es ausgegeben wenn ich es Debuge:
Testing ping...
Ping wird ausgeführt für enitin.co.de [78.46.83.12] mit 32 Bytes Daten:
Antwort von 78.46.83.12: Bytes=32 Zeit=60ms TTL=57
Antwort von 78.46.83.12: Bytes=32 Zeit=56ms TTL=57
Antwort von 78.46.83.12: Bytes=32 Zeit=53ms TTL=57
Antwort von 78.46.83.12: Bytes=32 Zeit=63ms TTL=57Ping-Statistik für 78.46.83.12:
Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
(0% Verlust)
Ca. Zeitangaben in Millisek.:
Minimum = 53ms, Maximum = 63ms, Mittelwert = 58Ping will be tested again in 5 seconds for enitin.co.de.
-
Könntest du bitte mal die vollständige Ausgabe posten? Du fängst hier immer mit "testing ping" an. Da passiert doch vorher schon einiges (inkl. Eingabe).
-
Enitin schrieb:
Also wenn ich das
system("cls");weglasse es einfach aus dem Ordner heraus öffne und "Link/IP" eingebe
Wo gibst du "Link/IP" ein?
Enitin schrieb:
Anders wird es ausgegeben wenn ich es Debuge:
Testing ping...
...
Ping will be tested again in 5 seconds for enitin.co.de.
Im Debugemode gibst du "enitin.co.de" ein.
Gib das mal im Releasemode auch ein.gruß
stalker
-
Wahrscheinlich hat er zwei verschiedene Programme und sollte mal jeweils, für Release- und Debug-Modus, neu builden.