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