Hallo, nachdem ich schon länger mit C Controller programmiere möchte ich jetzt endlich mal C richtig lernen und ein Buch durcharbeiten. Hierzu habe ich Eclipse mit MinGw installiert, was auch ein paar Tage problemlos lief. Seit 2 Tagen habe ich folgendes Problem: Ich schreibe ein Programm und klicke auf den RUN-Button. Das Programm wird ohne Probleme ausgeführt. Dann ändere ich eine kleinigkeit (es reicht schon, wenn ich z.B. beim String "Hello World" nur einen Buchstaben ändere. Wenn ich dann auf RUN klicke, bricht Eclipse ab und bringt im PROBLEMS-Fenster folgenden Fehler: "cannot open output file test.exe: Permission denied test C/C++ Problem" Ich muss nach jeder Änderung Elipse beenden und neu starten, dann kann ich wieder eine Änderung vornehmen, bevor ich wiederum neu starten muss. Wie bereits geschrieben, am Anfang trat das Problem nicht auf. Auch das Anlegen eines neuen Projektes brachte keine Besserung. Hat jemand eine Idee? System: Eclipse IDE for C/C++ Developers Version: Kepler Service Release 2 Build id: 20140224-0627 Win7 64 Bit Home Premium Avira Antivirus Pro (Hat am Anfang auch Probleme bereitet, als die "Cloud-Sicherheit" aktiv war)
Und das zu testende Programm war wie beendet? Windows ist da eigen. Aktives Exe, also wenn das Programm gerade läuft, kann man nicht einfach überschreiben. Bei Unix sind Datei und Name zwei verschiedene Dinge. Die Datei kann weiter existieren, wenn man den Namen entfernt hat und man kann diesen auch für eine andere Datei wiederverwenden. Die alte Version kann aber weiter in einen Prozess gemapped sein, z.b. zum Ausführen. Eclipse hat einen roten Button um einen laufenden Prozess zu stoppen. Mit den grauen "x" sollte er komplett abgeräumt sein, so daß die Exe neu geschrieben werden kann.
Hallo, vielen Dank für den Beitrag. Der Hinweis mit dem Roten Stop-Button war die Lösung. Wenn ich auf den klicke kann ich die Datei neu überschreiben.
R. F. schrieb: > Der Hinweis mit dem Roten Stop-Button war > die Lösung. Wenn ich auf den klicke kann ich die Datei neu > überschreiben. Das braucht man aber nur, wenn sich das Programm nicht selber ordnungsgemäß beendet. Ergo hast du in deinem Programm einen Fehler... Oliver
Eventuell ist das Beispiel auch nur so geschrieben das es auf den "ANY-KEY" wartet ;-)
Oliver S. schrieb: > Das braucht man aber nur, wenn sich das Programm nicht selber > ordnungsgemäß beendet. Ergo hast du in deinem Programm einen Fehler... Jain, ich habe jetzt mal folgendes Beispiel eingegeben, nur zum Testen, also keinen tieferen Sinn in dem Programm suchen:
1 | int main (void) |
2 | {
|
3 | int i; |
4 | |
5 | printf("Zahl eingeben:"); |
6 | scanf("%d",&i); |
7 | printf("Zahl: %d\n",i); |
8 | return 0; |
9 | }
|
Wenn ich die .exe in der Eingabeaufforderung starte, wird das Programm korrekt ausgeführt. Es erscheint der Text "Zahl eingeben:", ich gebe eine Zahl ein und drücke enter, es erscheint der Text "Zahl: 6" In der Konsole von Eclipse erscheint zunächst nichts, und das Programm wird auch nicht beendet. In dem einfachen Beispiel kann ich durch drücken einer Zahl und Enter das Programm dann doch beenden, und der Text wird dann doch noch ausgegeben. In der Win-Eingabeaufforderung sieht das Programm so aus: Zahl eingeben:6 Zahl: 6 Bei Eclipse: 6 Zahl eingeben:Zahl: 6 Wenn mehrere scanf-Zeilen zum Einsatz kommen, funktioniert aber auch das nicht mehr. Dann kann ich das Programm nur noch mit dem "roten Button" beenden und muss das Programm in der Eingabeaufforderung testen.
R. F. schrieb: > Wenn mehrere scanf-Zeilen zum Einsatz kommen, funktioniert aber auch das > nicht mehr. Mach nach das printf und vor das scanf ein fflush(stdout); .
Kindergärtner schrieb: > Mach nach das printf und vor das scanf ein fflush(stdout); . Danke. Funktioniert. Allerdings verstehe ich noch nicht ganz, warum. Wird das Programm nicht Zeile für Zeile abgearbeitet? Wieso hat das Einfügen des Befehles dann Auswirkungen auf den Befehl davor?
R. F. schrieb: > Wird das Programm nicht > Zeile für Zeile abgearbeitet? Ja. R. F. schrieb: > Wieso hat das Einfügen des Befehles dann > Auswirkungen auf den Befehl davor? Weil das printf() in einen Puffer schreibt, der nicht notwendigerweise sofort auf dem Bildschirm ausgegeben wird. Erst bei Ausgabe eines newline (\n) oder bei Aufruf von fflush wird der Text tatsächlich ausgegeben. Siehe zB hier: http://stackoverflow.com/questions/1716296/
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.