Forum: Mikrocontroller und Digitale Elektronik Problem beim Einlesen von Daten


von Michael (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.