Warum klappt das nicht? - Frage eines Anfängers



  • Hi, ich bin leider erst etwa seit 4-5 Wochen am C++ programmieren und bin noch am ausprobieren der einfacheren Dinge. Trotzdem frag ich mich wieso das nicht klappt. Sinn der Übung ist es, eine Datei zu löschen, und dabei zwei Backslashes aus einem zu machen, weil ja sonst der Backslash bei C++ als escape-zeichen aufgefasst wird. Kompilieren klappt, nur kommt halt immer die Fehlermeldung, dass es die Datei nicht löschen kann die ich angebe... Hier das Programm:

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
    	int j;
    	int i;
    	char puffer1[1024];
    	char puffer2[1024];
    
    	printf ("Geben Sie den Pfad der Datei ein, die gelöscht werden soll:\n");
    	fgets (puffer1,1023,stdin);
    	for(i = 0,j = 0;puffer1[i] != '\0';i++,j++)
    	{		
    		if (puffer1[i] == '\\') {
    			puffer2[j++] = puffer1[i];
    			puffer2[j] = puffer1[i];
    		}else{
    			puffer2[j] = puffer1[i];
    		}
    
    	}
    
    	if( remove (puffer2) == -1)
    		perror ("Die Datei konnte nicht gelöscht werden!");
    	else
    		puts("Die Datei wurde erfolgreich gelöscht!");
    
    	return 0;
    
    }
    

    Bin für jegliche Hilfe dankbar. 🙂

    /edit von davie: Bitte Code-Tags verwenden



  • Rubberdruck schrieb:

    Sinn der Übung ist es, eine Datei zu löschen, und dabei zwei Backslashes aus einem zu machen, weil ja sonst der Backslash bei C++ als escape-zeichen aufgefasst wird. Kompilieren klappt, nur kommt halt immer die Fehlermeldung, dass es die Datei nicht löschen kann die ich angebe...

    Kleines Mißverständnis: Diese Zeichen, von denen Du redest, musst Du nur im Quelltext durch einen Rückstrich schützen, bei Benutztereingaben natürlich nicht. Zusätzlich ist das Interface von fgets etwas, ähm, seltsam. Normalerweise musst Du den Zeilenumbruch vom Ende entfernen; wenn keiner da war, dann war die Eingabe nicht vollständig (also ein weiteres fgets liest nochmal aus dieser Zeile). Dateien, deren Namen Zeilenumbrüche enthalten, kann man folglich mit deinem Programm schlecht löschen, es wären noch ein paar Klimmzüge notwendig.

    -> C?



  • Heisst das jetzt dass der Sinn der Übung eigentlich für die Katz ist, da bei Benutzereingaben der Backslash gar nicht als Escap-Zeichen erkannt wird? So hab ich dich jetzt jedenfalls verstanden.
    Zum fgets Interface... nun ja, wie gesagt ich bin Anfänger.. ich kämpfe mich durch Tutorials durch und so hab ich es halt bis jetzt gelernt. Lasse mich gerne belehren. Aber wo und wie hätte ich dann diesen Zeilenumbruch einbauen sollen?

    Und nee, ich will eigentlich schon C++ programmieren.. nur bevor ich nicht die Grundstruktur mal im Griff habe hat es keinen Sinn wenn ich mich schon an Objektorientiertem Zeugs probiere denke ich.



  • Rubberdruck schrieb:

    ich kämpfe mich durch Tutorials durch und so hab ich es halt bis jetzt gelernt. Lasse mich gerne belehren.

    *belehr*
    Ohne ein gutes und ausführliches Buch ist es imho schwer, mal zu einem vernünftigen Programmierstil zu finden...

    Und nee, ich will eigentlich schon C++ programmieren.. nur bevor ich nicht die Grundstruktur mal im Griff habe hat es keinen Sinn wenn ich mich schon an Objektorientiertem Zeugs probiere denke ich.

    fgets hat aber mit der Grundstruktur von C++ nicht viel zu tun 🙂



  • Ich bin sicher es wurde schon 100 mal gefragt, aber was gibt es denn für gute und ausführliche Bücher?

    Und ob fgets was mit der Grundstruktur von C++ zu tun hat kann ich beim besten Willen nicht beurteilen. Mehr helfen würde es mir wenn du mir sagen könntest was ich denn anstatt fgets verwenden soll.. Deswegen bin ich ja hier.



  • Rubberdruck schrieb:

    Ich bin sicher es wurde schon 100 mal gefragt, aber was gibt es denn für gute und ausführliche Bücher?

    Wenn Du im Menü oben auf Bücher geklickt hättest müsstest Du nicht zum 101. Mal fragen! 😉

    Und ob fgets was mit der Grundstruktur von C++ zu tun hat kann ich beim besten Willen nicht beurteilen. Mehr helfen würde es mir wenn du mir sagen könntest was ich denn anstatt fgets verwenden soll.. Deswegen bin ich ja hier.

    Was Du hier programmierst ist kein C++ sondern C, lies Dir mal Shades Tutorial durch!



  • nman schrieb:

    Wenn Du im Menü oben auf Bücher geklickt hättest müsstest Du nicht zum 101. Mal fragen! 😉

    Ok... klingt einleuchtend.. 🙂

    nman schrieb:

    Was Du hier programmierst ist kein C++ sondern C, lies Dir mal Shades Tutorial durch!

    Gut werd ich machen. Dennoch wäre ich aber froh wenn mir jemand sagen könnte was ich an meiner Anwendung noch ändern muss damit es klappt. 🙂




Log in to reply