[C] Einlesen von Daten aus Textdokumenten

Also bei mir kompiliert das ganze ohne Probleme.
Welchen Compiler verwendest du denn?

PS: if ist keine Schleife.
Schleifen wiederholen sich, also while, dowhile, for
 
Stimmt, if ist keine Schleife.

Ich benutze Visual Studio 2008.

Wenn ich meine Quelldatei mit der Endung .cpp versehe,
dann compiliert er mir das Programm fehlerfrei.

Benutze ich aber die Endung .c (ich programmiere ja c) dann bringt er mir folgende Fehlermeldungen:
error C2275: 'FILE': Ungültige Verwendung dieses Typs als Ausdruck / Zeile 16
error C2065: 'pDatei1': nichtdeklarierter Bezeichner / Zeile 16, 25, 27, 29, 39
error C2143: Syntaxfehler: Es fehlt ';' vor 'Typ' / Zeile 19
error C2065: 'line': nichtdeklarierter Bezeichner / Zeile 20, 23
(Hab die Zeilennummern an den etwas weiter oben geposteten code angepasst)

Habt ihr eine Ahnung, warum ich dann diese Fehlermeldungen bekomme?
 
Zuletzt bearbeitet:
Moin,

die Endung muss schon ".cpp" sein, damit das VS resp. der Compiler sie erkennt (!)
Wenn Dein Code reiner C-Code ist, ist das kein Problem, da dies mit einem C++-Compiler problemlos compiliert werden kann!

Gruß
Klaus
 
Dann ist ja alles klar.
Ich kenn mich mit den Versionen des C-Standart zwar nicht sonderlich aus,
aber wenn ich mich richtig erinnere dürfen Variablen nur am Anfang eines Blocks deklariert werden.

Also gleich nach { alle Variablen rein, dann den ganzen Code.
Durchmischen ist nur bei C++ erlaubt.

Und dein pDatei1 steht ja irgendwo in der Mitte.
 
sheel hat Recht - Du musst natürlich ggf. alle Konventionen für C-Programme einhalten!

Nur - warum belässt Du es dann nicht einfach bei C++ :confused:

Gruß
Klaus
 
Eine Frage zu deinem Quellcode:
C++:
if (sscanf(line, "%d %d", &a, &b) == 2)
Bedeutet diese 2, dass die Zeile sozusagen nur gültig ist, wenn sich 2 Argumente, sprich Zahlen, in dieser befinden?
Die Funktion sscanf gibt die Anzahl der erfolgreich zugewiesenen Werte zurück. Wenn du also 2 Werte einlesen willst und sscanf gibt etwas anderes zurück als 2, dann hat irgendwas nicht geklappt und du kannst die Werte in a und b nicht verwenden weil sie gar nicht verändert wurden.

Die Idee die ganze Geschichte zeilenweise abzuarbeiten finde ich eine klasse Idee,
woltte diese auch in mein Programm einbauen, aber da bringt er mir die Fehlermeldung, dass
fgets nicht genügend Argumente für den Aufruf besitzt.
Sorry, der Fehler ist mir so untergekommen (hab ich berichtigt). Aber wenn der Compiler schon eine so klare Fehlermeldung ausgbit, dann schau doch in eine Referenz wie die Funktion aufgerufen werden muss.

Gruß
 
Dankeschön für eure Hilfen,
jetzt funktioniert das Programm wunderbar. :)

Eine Frage hätte ich noch,
welche Anweisung in der while Schleife gewährleistet,
dass jede Zeile separat abgearbeitet wird und nachdem die while-Schleife einmal durchlaufen wurde die nächste Zeile bearbeitet wird?

Mit freundlichen Grüßen
 
Guten Morgen

Folgende Frage, ich will mit fgets eine zeile einlesen und diese dann mit einer nummer in einem array speichern. heißt
1. xxx,dddd,
2. yyy,ffff,
...

wie würde ich da vorgehen?
C:
while(fgets(buffer[i],sizeof(buffer),srcfile) != NULL) // so?
 
Hi.
Folgende Frage, ich will mit fgets eine zeile einlesen und diese dann mit einer nummer in einem array speichern. heißt
1. xxx,dddd,
2. yyy,ffff,
...

wie würde ich da vorgehen?
C:
while(fgets(buffer[i],sizeof(buffer),srcfile) != NULL) // so?
Nein, nicht ganz. Ungefähr so:
C:
const int max_lines = 40;
char lines[max_lines][200];
int i = 0;
while (i < max_lines && fgets(lines[i], sizeof(lines[i]), srcfile) != NULL) {
  ++i;
}
Allerdings solltest du dann evtl. drüber nachdenken kein Array sondern z.B. eine Liste zu verwenden und den Speicher für die Zeile dynamisch zu allozieren und ggf. zu vergrößern falls fgets nicht die komplette Zeile einlesen konnte.

Gruß
 
Zurück