Einlesen von einer Datei / Strings vergleichen
-
Hallo Comunity!
Ich bin ein ziemlicher Neuling in C und wollte fragen, warum das Programm nicht so Funktioniert wie es soll:/* * cmd_main.c * * Created on: 15.02.2012 * Author: weini - Weinberger Michael */ #include <stdio.h> #include <stdlib.h> #include <string.h> void flush(); int main() { char eingabe[1000] = "c"; char eingabeZwei[1000] = "c"; char run[4] = "run"; char hilfe[5] = "help"; char beenden[5] = "exit"; char ersteZeile[1000] = "c"; char zweiteZeile[1000] = "c"; char dritteZeile[1000] = "c"; char vierteZeile[1000] = "c"; char fuenfteZeile[1000] = "c"; char sechsteZeile[1000] = "c"; char siebteZeile[1000] = "c"; char achteZeile[1000] = "c"; char neunteZeile[1000] = "c"; char zehnteZeile[1000] = "c"; FILE *fp; fp = fopen("dateipfad.txt", "r"); fgets(ersteZeile, 1000, fp); fgets(zweiteZeile, 1000, fp); fgets(dritteZeile, 1000, fp); fgets(vierteZeile, 1000, fp); fgets(fuenfteZeile, 1000, fp); fgets(sechsteZeile, 1000, fp); fgets(siebteZeile, 1000, fp); fgets(achteZeile, 1000, fp); fgets(neunteZeile, 1000, fp); fgets(zehnteZeile, 1000, fp); fclose(fp); printf( "Herzlich Wilkommen bei der Console\nSchreiben Sie <help> für Hilfe\n"); flush(); scanf("%s", eingabe); //hilfe---------------------------------------------------------------------- if (strcmp(eingabe, hilfe) == 0) { printf("\nFolgende Befehle können eingegeben werden: "); printf("run\n"); printf("ip\n"); printf("ip all\n"); printf("exit"); } //beenden-------------------------------------------------------------------- if (strcmp(eingabe, beenden) == 0) { return 0; } //run------------------------------------------------------------------------ if (strcmp(eingabe, run) == 0) { flush(); scanf("%s", eingabeZwei); if(strcmp(eingabeZwei, ersteZeile) == 0) { printf("Funktioniert"); } } printf("Falsche Eingabe"); return 0; } void flush(void) { fflush(stdout); fflush(stdin); }
Was ist hier der Fehler?
Wenn ich eingebe: exit, schließt es das Programm.
Wenn ich eingebe: help, schreibt es mir die Kommandos hin.
Wenn ich eingebe: run, kommt eine zweite eingabe.Wenn ich dann LoL eingebe, sollte er es mit der txt Datei vergleichen, dort steht auch in der ersten Zeile Lol und dann soll es ausgeben: Funktioniert.
Aber es gibt mir nur Falsche Eingabe aus, warum?
-
Ich kann: Schleifen, Deklaration, Operatoren, ein/ausgabe, random
mfg
weini
-
fgets lässt das \n mit im String.
scanf liest es hingegen nicht mit ein.Mach mal
printf("<%s>\n", ersteZeile);
Wenn da steht
<LoL >
ist der Zeilenvorschub mit drin.
-
Ich Idiot
Danke hätte ich merken sollen, hab ja auch die ersteZeile ausgegeben und hab nicht bemerkt, das da das \n dabei ist.
Danke
weini
-
Nur stellt sich hier die Frage, wie ich es jetzt machen kann, das es Funktioniert
Soll ich das scanf() mit einen fgets austauschen?
-
Ok, habs jetzt ausgetauscht.
Andere Frage, kann man das auch machen, das er das \n nicht mit einliest?
-
Du kannst auch nach dem einlesen das '\n' suchen (z.B. mit strrchr()) und dann mit '\0' überschreiben.
Und für
char ersteZeile[1000] = "c"; ... char zehnteZeile[1000] = "c";
gibt es (2D-)Arrays.
-
Und bei
char run[4] = "run";
kannst du die Arraygröße weglassen. Der Compiler nimmt dann die richtige Größe an:char run[] = "run";
-
Das mit den Arrays haben wir noch nicht gelernt
Ich hab zwar schon mit Java Arrays "überflogen" aber so wirklich können tue ich sie nicht und wir haben sie auch noch nicht in der Schule gelernt.
-
strrchr scheint mir nicht so richtig sinnvoll, denn die Position des Zeilenumbruchs (sofern vorhanden) im String ist ja bekannt. Wie wärs damit?
size_t pos = strlen(ersteZeile) - 1; if(ersteZeile[pos] == '\n') { ersteZeile[pos] == '\0'; }
-
?weini37? schrieb:
void flush(void) { fflush(stdout); fflush(stdin); }
Diesen Unsinn gewöhne dir am besten gleich wieder ab. (und die Quelle, aus der du sowas hast auch gleich)