Zeichenlängen in .txt erkennen



  • DirkB schrieb:

    Lordakius schrieb:

    ja ich kann doch nicht einfach fgets benutzen, ohne die datei offen zu haben.

    Und welchen Filedeskriptor willst du an fgets übergeben?

    Hab mich nur mal auf Wikipedia eingelesen:
    Mit Referenzwert ist sowas wie "r" "rb" und co gemeint oder die Datei, auf die ich zugreifen will?



  • Kann mal jemand über den Quellcode schauen bzw auch über die Fehlermeldung?
    Bin mir nicht ganz sicher, was die Meldung verursacht. ( ⚠ Es gibt keinen Compilerfehler. Die Fehlermeldung kommt, sobald ich das Programm starte. Bzw nach der switch Anweisung.

    #include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h>
    
    void DeclineEnter()
    {
    	printf("Warum rufst du mich dann auf?\n");
    }
    
    void FalseEnter()
    {
    	 printf("Vorgang fehlgeschlagen ... Funktion noch nicht freigeschaltet :D\n");
    }
    
    int main()                                          
    {
    	char cmnd[1000] = "";
    		FILE *g;
    		char pathString[] = { "" };
    		g = fopen("path.txt", "r");  
    		fgets(pathString, 1000, g);
    		printf("Deine Wahl?:\n");
    		printf("[1] = Zeige Dateien + Verzeichnisse\n");
    		printf("[2] = Zeige nur Verzeichnisse\n");
    		printf("\n Bitte triff deine Wahl:\t");
    		int x = 0;
    		scanf("%i", &x);
    		switch (x)
    		{
    		case 1:{
    				  cmnd[1000] =  "dir /s /b " ;  //andere idee: bei der deklaration macht man bereits die definition als "dir /s /b" und in der switch-case dann nur noch den Zusatz  //Anzahl der Dereferenzierungen bei 'char' und 'char[11]' unterschiedlich
    				   break;
    		}
    		case 2:{
    				  cmnd[1000] = "dir /s /b /ad" ;   //Anzahl der Dereferenzierungen bei 'char' und 'char[14]' unterschiedlich
    				   break;
    		}
    		default:{
    					printf("Falsches Format. Interner Fehler\n");
    					exit(1);
    		}
    		} 
    	strcat(cmnd, PathString);												//Pfad reinsetzen. 
    	char eingabe;
    	printf("Soll die Aufgabe ausgefuehrt werden? [J]=>JA/[N]=>NEIN\n"); //Hier macht er automatisch Nein (bevor ich die Switch-Case Anweisung drinne hatte, hat die Eingabeaufforderung normal funktioniert.
    	scanf("%c", &eingabe);
    	if (eingabe == 'N' || 'n')
    	{
    		DeclineEnter();
    	}
    
    	if (eingabe == 'J' || 'j')
    	{
    		char zeile[10000];
    		FILE *f = _popen(cmnd, "r");      //Pfad.ini
    		if (!f) return 1;
    		printf("Loading ... Please Wait!\n");
    		FILE *datei;
    		datei = fopen("AllData.csv", "w");
    		while (fgets(zeile, 10000, f))
    		{
    
    			int len = (strlen(zeile));
    			//printf("%s", datei);							//Dies ist zum Testen des Inhalts von Datei
    			fprintf(datei, "%i;%s\n", len, zeile);
    		}
    		_pclose(f);
    		printf("Aufgabe abgeschlossen\n Einen Schoenen Tag noch!\n");
    		system("PAUSE");
    		return 0;
    	}
    	else FalseEnter();
    
    	system("PAUSE");
    	return 0;
    }
    

    Beim Ausführen startet cmd, die Switch-Case anweisung beginnt. Nach Eingabe einer beliebigen Zahl (alles außer 1,2 gibt wie normal die printf + exit anweisung) geht er weiter zur nächsten eingabeaufforderung und hat nein gespeichert (woher er das auch immer nimmt). in CMD sieht das dann folgendermaßen aus:

    Deine Wahl?:
    [1] = Zeige Dateien + Verzeichnisse
    [2] = Zeige nur Verzeichnisse
    
    Bitte triff deine Wahl:         1
    Soll die Aufgabe ausgefuehrt werden? [J]=>JA/[N]=>NEIN
    Warum rufst du mich dann auf?                         //=>keine eingabe möglich
    Loading ... Please Wait!                             //Das gehört zu ja !?
    Der Befehl "C:\Users\Lordakius\Desktop\Informatik\" ist entweder falsch geschrieben oder konnte nicht gefunden werden.
    Aufgabe Abgeschlossen
     Einen Schoenen Tag noch!
    Drücken Sie eine beliebige Taste . . .
    

    Falls der Code nicht sofort klar wird einfach die Zeile zitieren, ich erklär's dann so gut ich kann 🙂



  • Wie wärs jetzt endlich mal mit dem durchlesen/arbeiten von eienm C-Buch.

    Da steht dann auch drin, wann man cmnd[1000] = "dir /s /b " ; schreiben kann und wann nicht.
    Denn so wie du es benutzt, geht es nicht. (Darum meckert auch der mit einer Warnung).

    Da steht dann auch drin, was (eingabe == 'N' || 'n') wirklich bedeutet.

    Und wenn du Glück hast, steht da auch, warum scanf("%c", &eingabe); nach einem scanf("%i", &x); nicht das Zeichen einliest.
    Da das mit dem Glück manchmal nicht klappt, zumindest die Lösung:

    scanf(" %c", &eingabe);  // Achte auf das Leerzeichen vor dem %c
    

Anmelden zum Antworten