Programm funktioniert nich...
-
Ich habe ein programm geschrieben, womit man einfache Texte auf der festplatte speichern kann.
aber es gibt immer wieder bugs, wie z.B., dass die geschriebenen sätze verhackstückt werden und z.t. mehrmals in dem abgespeichertem text vorkommen
hier is der quelltext:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> int main(int argc, char* argv[]) { FILE* text; char input[100][100]; char dateiname[15]; int i; int x; int b; char save[] = "#save"; char exit[] = "#exit"; char help1[] = "/?"; char help2[] = "-?"; char rmline[] = "#rmline"; char show[] = "#show"; if (argc > 1) { if (!strcmp(argv[1], help1)) { hilfe(); return 0; } else if (!strcmp(argv[1], help2)) { hilfe(); return 0; } } printf("Text Ver1.0\n\n"); for (x = 0; x < 100 ; x++) { gets(input[x]); if (!strcmp(input[x], save)) { x = x - 1; break; } else if (!strcmp(input[x], exit)) { return 0; } else if (!strcmp(input[x], help1)) { hilfe(); return 0; } else if (!strcmp(input[x], help2)) { hilfe(); return 0; } else if (!strcmp(input[x], rmline)) { x = x - 2; } else if (!strcmp(input[x], show)) { printf("\nDer bisherige Text: \n\n"); for (b = 0; b < x; b++) { printf("%s\n", input[b]); } x = x - 1; } } if (argc > 1) { if (strcmp(argv[1], help1) && strcmp(argv[1], help2)) { printf("Datei wird auf die Platte geschrieben...\n"); text = fopen(argv[1], "w"); if (!text) { printf("Dateifehler. Der Text konnte nicht gespeichert werden\n"); printf("Wahrscheinlich ist der Ordner schreibgeschuetzt.\nSorry!\n"); return (0); } for (i = 0; i < x + 1; i++) { fprintf(text, "%s\n", input[i]); } fclose(text); } } else if (argc <= 1) { printf("Dateiname: "); gets(dateiname); printf("Datei wird auf die Platte geschrieben...\n"); text = fopen(dateiname, "w"); if (!text) { printf("Dateifehler. Der Text konnte nicht gespeichert werden\n"); printf("Wahrscheinlich ist der Ordner schreibgeschuetzt.\nSorry!\n"); return (0); } for (i = 0; i < x + 1; i++) { fprintf(text, "%s\n", input[i]); } fclose(text); } printf("Datei wurde erstellt.\n"); _kbhit(); return(0); } int hilfe(void) { printf("Text Ver1.0 von Mr. FlipStar\n\n"); printf("Nutzung: text [-?] [/?] [Dateiname]\n"); printf("\nNachdem das Programm gestartet wurde, kannst du den Text eingeben,\n"); printf("der sp„ter dann gespeichert werden soll.\n"); printf("Um den geschriebenen Text zu speichern, musst du den Befehl #save in eine\n"); printf("neue Zeile eingeben. Dann wirst aufgefordert den Dateinamen einzugeben. Dieser\n"); printf("sollte die Endung \".txt\" haben, damit Windows erkennt, dass es sich\n"); printf("um eine Textdatei handelt.\n"); printf("\nWeiterhin gibt es andere Befehle, mit denen der Editor gesteuert werden kann:\n"); printf("1. #save = Text speichern\n"); printf("2. #exit = Editor verlassen, ohne zu speichern\n"); printf("3. #rmline = vorherige Zeile neu beschreiben\n"); printf("4. #show = (nach Gebrauch von #rmline) zeigt den bisherigen Text\n"); printf(" ohne Befehle an\n"); }
-
Hmm, ich habe versucht, durch deinen Code zu steigen, allerding ist der zu unübersichtlich.
Hast du mal mit nem Debugger geschaut, an welcher Stelle es "aushakt"?
-
ich habe noch nich den debugger ausprobiert...
sry, dass der text so unübersichtilich ist
ich dachte durch die funktions- und variablenbezeichner wäre es
aufschlüssig genug, nun, da hab ich mich geirrt.hier is der code kommentiert:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> int main(int argc, char* argv[]) { FILE* text; char input[100][100]; /* Eingabearray */ char dateiname[15]; /* dateiname*/ int i; int x; int b; char save[] = "#save"; /* befehl zum speichern*/ char exit[] = "#exit"; /* befehl zum verlassen des editors*/ char help1[] = "/?"; /* hilfe */ char help2[] = "-?"; /* hilfe alternative */ char rmline[] = "#rmline"; /* befehl zum loeschen der vorherigen zeile */ char show[] = "#show"; if (argc > 1) { if (!strcmp(argv[1], help1)) /* prüfe ob die hilfe aufgerufen wurde als arg */ { hilfe(); return 0; } else if (!strcmp(argv[1], help2)) { hilfe(); return 0; } } printf("Text Ver1.0 von Mr. FlipStar\n\n"); for (x = 0; x < 100 ; x++) /*eingabe schleife*/ { gets(input[x]); if (!strcmp(input[x], save)) /*prüfe ob ein befehl eingegeben wurde */ { x = x - 1; break; } else if (!strcmp(input[x], exit)) /*prüfe ob ein befehl eingegeben wurde */ { return 0; } else if (!strcmp(input[x], help1)) /*prüfe ob ein befehl eingegeben wurde */ { hilfe(); return 0; } else if (!strcmp(input[x], help2)) /*prüfe ob ein befehl eingegeben wurde */ { hilfe(); return 0; } else if (!strcmp(input[x], rmline)) /*prüfe ob ein befehl eingegeben wurde */ { x = x - 2; } else if (!strcmp(input[x], show)) /*prüfe ob ein befehl eingegeben wurde */ { printf("\nDer bisherige Text: \n\n"); for (b = 0; b < x; b++) { printf("%s\n", input[b]); } x = x - 1; } } if (argc > 1) /* prüfe ob der dateiname bereits als argument angegeben wurde */ { if (strcmp(argv[1], help1) && strcmp(argv[1], help2)) { printf("Datei wird auf die Platte geschrieben...\n"); text = fopen(argv[1], "w"); if (!text) { printf("Dateifehler. Der Text konnte nicht gespeichert werden\n"); printf("Wahrscheinlich ist der Ordner schreibgeschuetzt.\nSorry!\n"); return (0); } for (i = 0; i < x + 1; i++) { fprintf(text, "%s\n", input[i]); /*text wird gespeichert */ } fclose(text); } } else if (argc <= 1) { printf("Dateiname: "); gets(dateiname); printf("Datei wird auf die Platte geschrieben...\n"); text = fopen(dateiname, "w"); if (!text) { printf("Dateifehler. Der Text konnte nicht gespeichert werden\n"); printf("Wahrscheinlich ist der Ordner schreibgeschuetzt.\nSorry!\n"); return (0); } for (i = 0; i < x + 1; i++) { fprintf(text, "%s\n", input[i]); } fclose(text); } printf("Datei wurde erstellt.\n"); _kbhit(); return(0); } int hilfe(void) /*hilfe funktion */ { printf("Text Ver1.0 von Mr. FlipStar\n\n"); printf("Nutzung: text [-?] [/?] [Dateiname]\n"); printf("\nNachdem das Programm gestartet wurde, kannst du den Text eingeben,\n"); printf("der sp„ter dann gespeichert werden soll.\n"); printf("Um den geschriebenen Text zu speichern, musst du den Befehl #save in eine\n"); printf("neue Zeile eingeben. Dann wirst aufgefordert den Dateinamen einzugeben. Dieser\n"); printf("sollte die Endung \".txt\" haben, damit Windows erkennt, dass es sich\n"); printf("um eine Textdatei handelt.\n"); printf("\nWeiterhin gibt es andere Befehle, mit denen der Editor gesteuert werden kann:\n"); printf("1. #save = Text speichern\n"); printf("2. #exit = Editor verlassen, ohne zu speichern\n"); printf("3. #rmline = vorherige Zeile neu beschreiben\n"); printf("4. #show = (nach Gebrauch von #rmline) zeigt den bisherigen Text\n"); printf(" ohne Befehle an\n"); }
-
Hmm, gut jetzt ist übersichtlicher. Aber ich kann jetzt auf die Schnelle keinen Fehler finden. Ich bin dafür, dass du mal einen Debugger benutzt und alle Sequenzen aus deinem Post nimmst, die fehlerfrei sind. Wahrscheinlich findest du den Fehler alleine. Falls du dir bei einer Codestelle nicht sicher bist, schau ich gerne nochmal drauf.