Dateiname als Variable einlesen und daraus lesen:(
-
Danke für eure Antworten. Bin mit der gesamten Hilfe zur folgenden Lösung gekommen. Falls es Tipps und Tricks zur Verbesserung gibt gern
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { char name; FILE *fz; char datei[FILENAME_MAX]; printf("Dateiname: "); fgets(datei, FILENAME_MAX, stdin); datei[strlen(datei) - 1] = '\0'; /* Steuerzeichen '\n' von fgets() durch '\0' ersetzen */ if ((fz = fopen(datei, "r")) == NULL) { printf("ERROR: Datei nicht lesbar oder nicht vorhanden.\n"); return 0; } else { name = getc(fz); while(name != EOF) { printf("%c", name); name = getc(fz); } fclose(fz); } return 0; }
MFG
Meckert
-
Ja, ich hab da noch einen Verbesserungsvorschlag.
Wenn du schon einen Fehler meldest, dann solltest du auch in deinem return() einen Fehlercode zurückliefern, also eine andere Zahl als 0, denn 0 gillt allgemein als erfolgreiche und korrekte Ausführung des Programms.
-
Hi, hab mal eine Frage zu den Programm. Da wir auch sowas in der Art programmieren sollen.
"...
char datei[FILENAME_MAX];
..."Für was steht jetzt das Filename_may genau? für ein Feld von 256 Zeichen?
-
FILENAME_MAX ist einfach eine Konstante die zur Compilezeit eingesetzt wird. Die kann 256 sein, aber auch anders. Je nach Plattform für die kompiliert werden soll.
-
@Walli besten Dank... Wieder eine Wissenslücke geschlossen
So ich hab mir mal den Code als Gerüst genommen und wollt jetzt was verändern. Der Compiler bringt keinen Fehler, aber das Resultat stimmt auch nicht.
Ich will eine Datei übergeben und ein Zeichen, innerhalb der Datei soll dann die Anzahl des übergebenen Zeichens ermittelt werden und am Ende den Benutzer am Bildschirm präsentiert werden. Funzt aber nichtBekomm immer 0 zurück auch wenn ich eine Datei mit Textinhalt übergebe.
-
Wenn du diesen Codeabschnitt korrigierst läuft es:
while(name != EOF) //solange nicht das Ende erreicht ist, End of File { if (zeichen == name) anzahl++; name = getc(meine_datei); } fclose(meine_datei); //Schließt die Datei wieder
Du vergleichst Adressen, was nicht wirklich zum Erfolg führt:
if (&zeichen == &name)
Bei char kannst du doch sofort auf Gleichheut (==) prüfen. Aber immer daran denken: bei strings auf alle Fälle
strcmp(string1, string2);
!
-
Es geht
besten Dank...So da ich ja den Code etwas "gestohlen" habe, ist mir etwas noch nicht ganz klar.
"datei[strlen(datei) - 1] = '\0'; /* Steuerzeichen '\n' von fgets() durch '\0' ersetzen */"
<--Wozu brauch ich diese Anweisung?
-
Weil sonst ein Zeilenumbruch (\n) am Ende des Strings steht (da fgets() einen String immer inklusive Newline-Zeichen ließt), wodurch die Datei nicht geöffnet werden könnte, da die Namen nicht übnereinstimmen. Jeder "normale" String wird mit einem \0 abgeschlossen, und mit dieser Anweisung wird das \n durch \0 überschrieben.
Ach übrigens, was studierst du an der HTW? Bin nämlich auch ein HTW-Studie! :p
-
besten Dank, jetzt hab ich endlich alles verstanden
Feine Sache...
Wie man an der s... Nummer sieht bin ich im 2. Semester als Wirtschaftsinformatiker tätigUnd selber?
Wie klein die Welt doch ist!
-
Ebenfalls 2tes, allerdings schimpf ich mich allgemeiner Informatiker.
Schönes WE noch!