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 einemscanf("%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