Dateiname als Variable einlesen und daraus lesen:(
-
meckert77 schrieb:
char name[20]; // Muss ein char array (string) sein ... char datei[20]; // ebeno ... fgets(datei, 20, stdin); // besser geeignet um strings einzulesen
Den Rest hab ich mir nicht weiter durchgeschaut...
-
schneller
-
@TactX
name darf übrigens kein Array sein! Vielleicht hättest du dir doch noch den Rest anschauen sollen ;).
-
Ooops
-
Danke für die Tipps. Aber so komme ich nur auf einen Fehler beim Compilieren.
PrintAscii.cpp(29) : error C2440: '=' : 'int' kann nicht in 'char [256]' konvertiert werden
Es gibt keine Konvertierungen von Arraytypen, obwohl es Konvertierungen von Verweisen oder Zeigern in Arrays gibt
Fehler beim Ausführen von cl.exe.NachSP6.exe - 1 Fehler, 0 Warnung(en)
Was will mir der Compiler sagen ?????
-
ich denk mal das liegt am prototyp von getc
int getc(FILE *stream);
gruessle TDO
-
meckert77 schrieb:
Danke für die Tipps. Aber so komme ich nur auf einen Fehler beim Compilieren.
PrintAscii.cpp(29) : error C2440: '=' : 'int' kann nicht in 'char [256]' konvertiert werden
Es gibt keine Konvertierungen von Arraytypen, obwohl es Konvertierungen von Verweisen oder Zeigern in Arrays gibt
Fehler beim Ausführen von cl.exe.NachSP6.exe - 1 Fehler, 0 Warnung(en)
Was will mir der Compiler sagen ?????
Wie gesagt deine Variable NAME darf KEIN Array sein. Das hat also von Anfang an gestimmt. Nur deine Variable DATEI musste zu einem Array gemacht werden.
-
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!