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 | int main() |
6 | {
|
7 | FILE *preal; |
8 | FILE *pimag; |
9 | |
10 | char buf1[BUF_LEN]; |
11 | char buf2[BUF_LEN]; |
12 | |
13 | float re |
14 | float im |
15 | |
16 | preal = fopen("real.txt","r"); |
17 | if( preal == NULL ) { |
18 | printf( "Konnte Datei 'real.txt' nicht öffnen!\n" ); |
19 | return 1; |
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 | return 1; |
29 | }
|
30 | fgets(buf2,laenge,pimag); |
31 | fscanf(pimag,"%f",&im); |
32 | fclose(pimag); |
33 | |
34 | return 0; |
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.