Ws. lächerlicher Fehler aber komm nicht drauf
-
Hallo,
sitz hier schon ne Weile an dem Programm (bin eher noch Anfänger).
Eventuell liegt es an der späten Stunde, dass ich das nicht mehr auf die Reihe bekomme. Oder einfach schon zu lange dran gearbeitet
Naja, zu meinem Problem:
In meinem Programm wird ein Teil einer Ip abgefragt "HotIp" und das Interval (wieviel Pause zwischen den Schleifen ist).
Dann wird mittels system(netstat -n) abgefragt, in eine Textdatei gespeichert, ausgelesen, in String gespeichert, bearbeitet und mit der Hot-Ip verglichen.
Stimmen die beiden überein, soll ein Signal ausgegeben werden. Wenn nicht, soll die Schleife von vorne beginnen.
Leider stürzt es mir immer mit "Abnormal program termination" ab.
Aber nur wenn ich die Schleife drin habe, sonst nicht!#include <iostream> #include <string> #include <windows.h> #include <stdlib.h> #include <fstream> using namespace std; int main() { int server; int interval; int currentip; char zeile[1024]; string text; string search="4000"; string serverneu; int sleep; ifstream file; cout<<"Hot Ip: "; cin>>server; //Eingabe der Hot-Ip cout<<"\n\nWelcher Interval?\n1. 5 Sekunden\n2. 10 Sekunden\n3. 30 Sekunden\n4. 60 Sekunden\n\n"; cin>>interval; //Eingabe des Intervals if(interval == 1) { sleep = 50; } else if(interval == 2) { sleep = 100; } else if(interval == 3) { sleep = 300; } else if(interval == 4) { sleep = 600; } Schleife: //Schleife system("netstat -n | find \"4000\" > server.txt"); //Speichert aktuelle IP in TXT-Datei file.open("server.txt", ios::in); //TXT-Datei öffnen if (file.good()) //Wenn die Datei erfolgreich geöffnet wurde... { file.seekg(0L, ios::beg); //... an den Anfang der Datei springen while (! file.eof()) //Schleife - Text wird in String geschrieben { file.getline(zeile, 1024); //Lest Zeichen für Zeichen in Char "Zeile" text=text + zeile; //Schreibt Zeichen für Zeichen in String "Text" } } std::string::size_type i = text.find(search); //Sucht nach dem Port i=i-1; text.erase(i); //Löscht alles ab dem Port (inkl. Doppelpunkt) cout<<"test"; std::string::size_type a = text.rfind("."); //Sucht Anhaltspunkt a=a+1; text.erase(0,a); //Löscht alles sodass nur mehr die entscheidende Adresse überbleibt serverneu = server; if(serverneu == text) //Wenn der Server übereinstimmt... { cout<<"\a\a\a"; //...wird ein Signal ausgegeben... return 45; } else //...wenn nicht... { text = ""; //(Text wird zurückgesetzt) cout<<"Schlafe\n"; Sleep(sleep); //(Pausenzeit) goto Schleife; //...wiederholt sich die Schleife } }Bitte helft mir, weiss echt nicht mehr weiter

Lg
-
Wahrscheinlich liegts nicht daran, aber goto ist Tabu! Nimm lieber eine while-Scheife!
-
Leider passiert mir mit einer While-Schleife genau das selbe.
Abnormal Program termination.
Ausstieg mit Beendigungscode 3.
Den letzten Code-Schnipsel den das Programm ausführt ist Zeile 59.
-
Vielleicht liegt es ja auch daran, dass du deine Datei nicht schließt.
-
topfmann schrieb:
Den letzten Code-Schnipsel den das Programm ausführt ist Zeile 59.
genau - und mit text.erase( i ) fällst Du dann auf die Nase, weil Du nicht überprüfst, ob i einen sinnvollen Wert angenommen hat. Nach
std::string::size_type i = text.find(search); //Sucht nach dem Portmusst Du i auf Gleichheit mit string::npos abfragen; wenn es gleich ist, hat er den Text nicht gefunden.