Hallo,
ich habe, wie man der Topic entnehmen kann, ein kleines Problem beim
Einlesen von Daten.
In meinem Programverzeichnis liegen zwei .txt Datein (real.txt und
imag.txt), welche ich gerne in die beiden Arrays re[laenge] und
imag[laenge] einlesen würde. Nachfolgend mein kleiner Programmcode:
#include <stdio.h>
#define laenge 4096
void main()
{
FILE *preal;
FILE *pimag;
char buf1[laenge];
char buf2[laenge];
float re[laenge];
float im[laenge];
preal = fopen("real.txt","r");
fgets(buf1,laenge,preal);
fscanf(preal,"%f",&re[laenge]);
fclose(preal);
pimag = fopen("imag.txt","r");
fgets(buf2,laenge,pimag);
fscanf(pimag,"%f",&im[laenge]);
fclose(pimag);
}
Ich hoffe ihr habt eine Idee wo der Fehler sein könnte. Vermutlich habe
ich da was bei den Funktionen durcheinander geworfen, die ich aus der
Hilfe vom Complier genommen habe. Aber leider komme ich nicht drauf!
Gruß Michael
Michael wrote:
> preal = fopen("real.txt","r");> fgets(buf1,laenge,preal);
Das liest nur die erste Zeile ein. Das ist dir hoffentlich bewusst.
> fscanf(preal,"%f",&re[laenge]);
Ein Array der Länge 4, hat als gültige Indizes 0 bis 3
0, 1, 2, 3
zähl nach, das sind 4 Stück. Ein ArrayElement mit dem Index 4
existiert schlicht und ergreifend nicht.
Aber warum liest du in den letzten deiner 4096 float Variablen
ein? Warum nicht in den ersten?
fscanf(preal,"%f",&re[0]);
>> pimag = fopen("imag.txt","r");> fgets(buf2,laenge,pimag);> fscanf(pimag,"%f",&im[laenge]);
Hier noch mal
> fclose(pimag);> }>>> Ich hoffe ihr habt eine Idee wo der Fehler sein könnte.
Welcher Fehler?
Bisher hast du nur Code gezeigt und kein Wort darüber verloren
was denn so passiert.
In deinem Code gibt es noch einen anderen Stolperstein.
Was passiert eigentlich, wenn die Datei nicht geöffnet werden konnte?
Merke: Den Returnwert von fopen immer auf Gültigkeit prüfen!
1
#include<stdio.h>
2
3
#define BUF_LEN 4096
4
5
intmain()
6
{
7
FILE*preal;
8
FILE*pimag;
9
10
charbuf1[BUF_LEN];
11
charbuf2[BUF_LEN];
12
13
floatre
14
floatim
15
16
preal=fopen("real.txt","r");
17
if(preal==NULL){
18
printf("Konnte Datei 'real.txt' nicht öffnen!\n");
19
return1;
20
}
21
fgets(buf1,laenge,preal);
22
fscanf(preal,"%f",&re);
23
fclose(preal);
24
25
pimag=fopen("imag.txt","r");
26
if(pimag==NULL){
27
printf("Konnte Datei 'imag.txt' nicht öffnen!\n");
28
return1;
29
}
30
fgets(buf2,laenge,pimag);
31
fscanf(pimag,"%f",&im);
32
fclose(pimag);
33
34
return0;
35
}
PS: Du willst nicht wirklich den Datentyp 'float' benutzen.
float macht nur in ganz bestimmten Situationen Sinn. Auf einem
PC benutzt man heutzutage praktisch immer double (es sei denn
du brauchst tatsächlich mehrere Milliarden davon). Alles andere
ist Masochismus.
Danke Karl Heinz ich werde Deine Tipps in meinen Code einbauen, aber ich
muss gestehen, dass mir noch gewaltig der Durchblickt fehlt.
Theoretisch ist es mir vollkommen klar was ich machen muss, nur macht
mir die Umsetzung in C-Code Probleme. "Softwareentwicklung" ist nicht
wirklich mein Ding, um es mal diplomatisch auszudrücken.
Was später im Programm passieren soll?!
Nun ja zu allererst sollen Daten aus einer Textdatei eingelesen und in
einem Array gespeichert werden. Anschliessend wird dieses Array dann mit
einem anderen Array multipliziert. Das Produkt wird dann entsprechend
weiter verarbeitet.
Gruß Michael
Michael wrote:
> Danke Karl Heinz ich werde Deine Tipps in meinen Code einbauen, aber ich> muss gestehen, dass mir noch gewaltig der Durchblickt fehlt.> Theoretisch ist es mir vollkommen klar was ich machen muss, nur macht> mir die Umsetzung in C-Code Probleme. "Softwareentwicklung" ist nicht> wirklich mein Ding, um es mal diplomatisch auszudrücken.>> Was später im Programm passieren soll?!>> Nun ja zu allererst sollen Daten aus einer Textdatei eingelesen und in> einem Array gespeichert werden. Anschliessend wird dieses Array dann mit> einem anderen Array multipliziert. Das Produkt wird dann entsprechend> weiter verarbeitet.
Du solltest eventuell mal mit einfacheren Dingen ein paar Vorübungen
machen. Beim File-Handling kann schon so einiges schief gehen.
Besorg dir einen Kernighan&Ritchie und arbeite darin die ersten
paar Kapitel durch. Solange du mit Arrays auf Kriegsfuss stehst,
hat es keinen Sinn sich um File Handling Gedanken zu machen.
Da gebe ich Dir voll und ganz recht, werde morgen mal mein C-Buch
konsultieren, welches ich leider nicht zur hand hatte und mich etwas
einlesen.
Hatte vorhin einfach nur versucht die Funktionen, welche ja in der Hilfe
beschrieben sind, auf meine Variablen/Gegebenheiten anzupassen. Wenn das
auf Anhieb gepasst hatte, wäre das auch zu schön gewesen ... ;)
Vielen Dank nochmal für die Ratschläge, ich denke man schreibt sich
morgen nochmal ;)
Gruß Michael