Probleme beim einlesen einer Datei
-
Hallo liebe Coder-Community,
ich habe, wie in der Überschrift bereits schon erwähnt, einige Probleme mit einem Programm, dass ich gleich noch hinzu fügen werde.
Also das Problem ist, dass dieser Programmteil mal funktioniert und mal nicht. Der Quellcode lässt sich soweit compilieren. In dem Fall funktioniert nicht kommt dann in einem kleinem Fenster "Projekt1.exe funktioniert nicht mehr.\nEs wird nach einer Lösung für das Problem gesucht.". Ich kenne diese Fehlermeldung von Situationen in denen der Inhalt zwar stimmte, aber ein interner Fehler entstand. Zudem gibt mir der Compiler auch eine Fehlermeldung aus, die sich vermutlich auf den Dateipfad bezieht (ich vermute, dass der Compilermit dem Backslash nicht zurechtkommt).
Ich habe diesen Quellcodeteil aus einem Lehrbuch für C, den ich zum vertiefen der Materie etwas abgeändert habe. Dieser ging bei mir manchmal auch nicht ausführen (es kam wieder die selbe Fehlermeldung). Das originale Beispielprogramm werde ich auchnoch anhängen.
Zu meinem derzeitigen Wissensstand: Ich arbeitemich derzeit in die Grundlagen von C ein und habe mit dem auslesen von Textdateien erst vor kurzem angefangen. Falls es hilfreich ist: Ich benutze den Compiler Dev-Cpp von Bloodshed Software.
Ich bin für jede Hilfe offen und bedanke mich schon einmal im Vorraus,
mfG B0N3
Mein Programm:
[/cpp]#include <stdio.h>
#include <stdlib.h>
main(){
FILE *stream;
char dateipfad[10];
int ch[5000], x=0;
strcpy(dateipfad,"F:\C2.txt");
ch[x]=fgetc(stream);
while(!feof(stream)){
putchar(ch[x]);
x++;
ch[x]=fgetc(stream);
}
fclose(stream);
system("Pause");
}Damit es auch für euch ausführbar ist: [cpp]#include <stdio.h> #include <stdlib.h> main(){ FILE *stream; char dateipfad[60]; int ch[5000], x=0; printf("Dateipfad eingeben: "); gets(dateipfad); ch[x]=fgetc(stream); while(!feof(stream)){ putchar(ch[x]); x++; ch[x]=fgetc(stream); } fclose(stream); system("Pause"); }
Und das originale Beispielprogramm:
/* bspl0072.c */ #include <stdio.h> #include<stdlib.h> main() { FILE *stream; char dateiname[67]; int ch; printf("\nWelche Datei wollen Sie lesen? >"); gets(dateiname); if((stream = fopen(dateiname,"r")) == NULL) { /*(1)*/ printf("\nFehler beim Öffnen!"); exit(1); /*(2)*/ } ch=fgetc(stream); /*(3)*/ while(!feof(stream)) { /*(4)*/ putchar(ch); ch=fgetc(stream); } fclose(stream); system("Pause"); }
-
Entschuldigt mich für den falsch markierten Quellcode. Hiernochmal richtig:
[code] #include <stdio.h> #include <stdlib.h> main(){ FILE *stream; char dateipfad[10]; int ch[5000], x=0; strcpy(dateipfad,"F:\C2.txt"); ch[x]=fgetc(stream); while(!feof(stream)){ putchar(ch[x]); x++; ch[x]=fgetc(stream); } fclose(stream); system("Pause"); }[/code]
-
Wo ist denn in deinem Programm das
fopen
?
-
Das habe ich wohl versehentlich gelöscht. Das war ein Anfängerfehler... Tut mir Leid und danke für die Hilfe. Au man, das ist mir jetzt peinlich.
-
Der Compiler gibt auch Warnungen aus.
In deinem Fall in etwa:"Benutzung einer nicht initialisierten Variablen"
Solche Warnungen musst du entfernen.
Warum ist
ch[]
vom Typint
?
-
DirkB schrieb:
Solche Warnungen musst du entfernen.
Das ist einfach, das kann ich! Man braucht bloß mit den richtigen Optionen zu compilieren.
-
So einen Spruch habe ich befürchtet.
-
Also ich habe diese Fehlermeldungen nicht,ich habe nur die Fehlermeldung: '7:22 C:\Users\*****\Desktop\main.c [Warning] unknown escape sequence '\C' ' Ist diese Fehlermeldung schlimm? Ich denke, dass der das schon annimmt, nur weil das Backslash meistens für Befehle benutzt wird, etwas meckert. Oder etwa doch nicht?
Ich habe Integer genommen, weil der größte Teil des Textinhaltes aus Zahlen besteht und nur durch Kommas getrennt wird, die C dann automatisch als ASCII-Code annimmt. Dadurch wird das Programm etwas effektiever.
-
B0N3 schrieb:
Also ich habe diese Fehlermeldungen nicht,ich habe nur die Fehlermeldung: '7:22 C:\Users\*****\Desktop\main.c [Warning] unknown escape sequence '\C' ' Ist diese Fehlermeldung schlimm? Ich denke, dass der das schon annimmt, nur weil das Backslash meistens für Befehle benutzt wird, etwas meckert. Oder etwa doch nicht?
Nein, der Backslash wird vor allem für Escape-Sequenzen verwendet, um nicht darstellbare Zeichen zu symbolisieren. Wenn du ihn als Zeichen in einer String-Konstante verwenden willst, mußt du ihn auch escapen als "\\C..."
Ich habe Integer genommen, weil der größte Teil des Textinhaltes aus Zahlen besteht und nur durch Kommas getrennt wird, die C dann automatisch als ASCII-Code annimmt. Dadurch wird das Programm etwas effektiever.
Das, was du da einliest, hat aber herzlich wenig mit der Zahlendarstellung zu tun, die der Computer für int's verwendet.
-
SeppJ schrieb:
Das ist einfach, das kann ich! Man braucht bloß mit den richtigen Optionen zu compilieren.
Quatsch. Man muss dem Compiler nur ein mal zeigen wer der Herr im Haus ist.
-
CStoll schrieb:
Nein, der Backslash wird vor allem für Escape-Sequenzen verwendet, um nicht darstellbare Zeichen zu symbolisieren. Wenn du ihn als Zeichen in einer String-Konstante verwenden willst, mußt du ihn auch escapen als "\\C..."
Ok, werde ich mir merken.
CStoll schrieb:
Das, was du da einliest, hat aber herzlich wenig mit der Zahlendarstellung zu tun, die der Computer für int's verwendet.
Warum denn das?
-
B0N3 schrieb:
Also ich habe diese Fehlermeldungen nicht,
Compilier immer mit allen Warnoptionen die dein Compiler anbietet.
-
B0N3 schrieb:
Warum denn das?
Weil
fgetc()
ein Zeichen einliest.
Das kann eine Ziffer sein, oder ein Buchstabe oder auch Steuerzeichen.
Stichwort dazu ist ASCIIZu einlesen von Zahlen gibt es andere Funktionen.
-
DirkB schrieb:
Weil
fgetc()
ein Zeichen einliest.
Das kann eine Ziffer sein, oder ein Buchstabe oder auch Steuerzeichen.
Stichwort dazu ist ASCIIJa, ok.
DirkB schrieb:
Zu einlesen von Zahlen gibt es andere Funktionen.
Welche denn z.b.? In meinen Lehrmaterialien habe ich nur Befehle zum einlesen von Zeichen,Zeilen und Blöcken gefunden..
-
ich würde ja fscanf() vorschlagen.
-
Ok, danke. Ich werde es gleich einmal austesten.
Auch einen großen Dank an den Rest, der mir geholfen hat.