Forum: Compiler & IDEs Code Problem: Fehler im Code? Compiler will nicht


von Christian R. (bqzero)


Lesenswert?

Halli Hallo

Habe ein Problem mit meinem Code. Finde den Fehler nicht. Meiner Meinung
nach stimmt der Code so wie er ist, aber der compiler ist anderer 
Meinung. Bin noch nicht sehr erfahren mit C und Micro's. wäre für jede 
Hilfe dankbar.
übrigends ich verwende das myAVR Workpad. Einen Atmega8515
1
#include <avr/io.h> //Controllerspezifikationenen
2
#include <stdlib.h> //Standard Library
3
#ifndef F_CPU
4
#define F_CPU 3686400UL // Quarz mit 3.6864 Mhz
5
#endif
6
#include <util/delay.h> //Verzögerungen
7
//-------------------------------------------------------------------------
8
//Diverses
9
//-------------------------------------------------------------------------
10
int anzahllichter;//Anzahl muss durch 8 teilbar sein, dann -1 rechnen zB. 16-->15
11
int reihenfolge[31];//Gleicher Wert wie anzahllichter
12
int licht[31];//Gleicher Wert wie anzahllichter
13
DDRA=0b11111111;//Ausgaenge
14
DDRB=0b11111111;//Ausgaenge
15
DDRC=0b11111111;//Ausgaenge
16
DDRD=0b11111111;//Ausgaenge
17
DDRE=0b00000000;//Eingaenge
18
licht[0]=(1<<PA0);
19
licht[1]=(1<<PA1);
20
licht[2]=(1<<PA2);
21
licht[3]=(1<<PA3);
22
licht[4]=(1<<PA4);
23
licht[5]=(1<<PA5);
24
licht[6]=(1<<PA6);
25
licht[7]=(1<<PA7);
26
licht[8]=(1<<PB0);
27
licht[9]=(1<<PB1);
28
licht[10]=(1<<PB2);
29
licht[11]=(1<<PB3);
30
licht[12]=(1<<PB4);
31
licht[13]=(1<<PB5);
32
licht[14]=(1<<PB6);
33
licht[15]=(1<<PB7);
34
licht[16]=(1<<PC0);
35
licht[17]=(1<<PC1);
36
licht[18]=(1<<PC2);
37
licht[19]=(1<<PC3);
38
licht[20]=(1<<PC4);
39
licht[21]=(1<<PC5);
40
licht[22]=(1<<PC6);
41
licht[23]=(1<<PC7);
42
licht[24]=(1<<PD0);
43
licht[25]=(1<<PD1);
44
licht[26]=(1<<PD2);
45
licht[27]=(1<<PD3);
46
licht[28]=(1<<PD4);
47
licht[29]=(1<<PD5);
48
licht[30]=(1<<PD6);
49
licht[31]=(1<<PD7);
50
//-------------------------------------------------------------------------
51
//Zufallsfunktion
52
//-------------------------------------------------------------------------
53
int zufall(int zahlenrange)
54
{
55
  //Funktion liefert ganzzahlige Werte zwischen 0 und zahlenrange
56
  //Werte sind einmalig. Und lassen sich als Zufallszahl verwenden.
57
  int rand1;
58
  int rand2;
59
  int rand3=0;
60
  int randz;
61
  int randy=0;
62
  int werte[zahlenrange];
63
  int nr[zahlenrange];
64
  //Zufallszahlen generieren
65
  for(rand1=0;rand1<=zahlenrange;rand1++)
66
  {
67
    srand(TCNT0);
68
    werte[rand1]=rand()%100;
69
    for(randz=0;randz<=zahlenrange;randz++)
70
    {
71
      if(nr[randz]!=werte[rand1])
72
      {
73
        randy++;
74
      }
75
    }
76
    if(randy<1)
77
    {
78
      nr[rand1]=werte[rand1];
79
    }
80
  else
81
    {
82
      rand1--;
83
    }
84
  }
85
  //Reihenfolge festlegen.
86
  for(rand1=0;rand1<=zahlenrange;rand1++)
87
  {
88
    for(rand2=0;rand2<=zahlenrange;rand2++)
89
    {
90
      if(rand1!=rand2)
91
      {
92
        if(nr[rand1]<nr[rand2])
93
        {
94
          rand3+=1;
95
        }
96
      }
97
    }
98
    reihenfolge[rand1]=rand3;
99
    rand3=0;
100
  }
101
}
102
//-------------------------------------------------------------------------
103
//Hauptprogramm
104
//-------------------------------------------------------------------------
105
int main(void)
106
{
107
  int z;
108
  int y;
109
  int licht[anzahllichter];
110
  int tag=10; //Sekunden
111
  int uebergang=3; //Sekunden
112
  int nacht=10; //Sekunden
113
  TCCR0|=(1<<CS00);
114
  TCCR0|=(1<<CS02); //Countergeschwindigkeit 1/1024 der CPU Frequenz ca 3600Hz
115
116
  while(1)
117
  {
118
    //TAG
119
    for(z=0;z<=1;z++)
120
    {
121
      PORTA=0b11111111;
122
      _delay_ms(10*tag);
123
    }
124
    //Uebergang
125
    for(z=0;z<=1;z++)
126
    {
127
      zufall(anzahllichter);
128
      for(y=0;y<=anzahllichter;y++)
129
      {
130
        if(y<=7)
131
        {
132
          PORTA=licht[reihenfolge[y]];
133
        }
134
        if(7<y<=15)
135
        {
136
          PORTB=licht[reihenfolge[y]];
137
        }
138
        if(15<y<=23)
139
        {
140
          PORTC=licht[reihenfolge[y]];
141
        }
142
        if(23<y<=31)
143
        {
144
          PORTD=licht[reihenfolge[y]];
145
        }
146
        _delay_ms(10*uebergang/(anzahllichter+1));
147
      }
148
    }
149
    //Nacht
150
    for(z=0;z<=1;z++)
151
    {
152
      PORTA=0b00000000;
153
      _delay_ms(10*nacht);
154
    }
155
  }
156
}

Danke schon mal für jede Hilfe

von Johannes M. (johnny-m)


Lesenswert?

1
int licht[31]
legt ein Array von 31 Integer-Variablen an, und zwar 
licht[0]...licht[30].
licht[31] gibt es nicht! Immer dran denken: Bei der Deklaration wird die 
Anzahl der Array-Elemente angegeben. Die Zählung beginnt aber mit 
dem Index 0.

von Johannes M. (johnny-m)


Lesenswert?

1
if(7<y<=15)
Und sowas geht in C gar nicht! Wenn überhaupt, dann
1
if((y > 7) && (y <= 15))

von Johannes M. (johnny-m)


Lesenswert?

Auweia! Da ist aber einiges im Argen. Bitte schau Dir mal ein C-Tutorial 
an. Ein Array kann nicht zur Laufzeit mit variabler Länge deklariert 
werden! Das da geht gar nicht:
1
int werte[zahlenrange];
2
int nr[zahlenrange];

Abgesehen davon ist es bei solchen Anfragen unsinnig, zu erzählen, dass 
der Compiler Fehlermeldungen ausgibt, ohne den Wortlaut der 
Fehlermeldungen ebenfalls anzugeben. Oder willst Du uns hier mit 
heiteren Ratespielchen beglücken?

von Christian R. (bqzero)


Lesenswert?

Sorry hab die Fehlermeldung vergessen.
Hier:
test.cc:35  35: error: expected unqualified-id before "volatile"
 35: error: expected `)' before "volatile"
 35: error: expected `)' before "volatile"
test.cc:36  36: error: expected unqualified-id before "volatile"
 36: error: expected `)' before "volatile"
 36: error: expected `)' before "volatile"
test.cc:37  37: error: expected unqualified-id before "volatile"
 37: error: expected `)' before "volatile"
 37: error: expected `)' before "volatile"
test.cc:38  38: error: expected unqualified-id before "volatile"
 38: error: expected `)' before "volatile"
 38: error: expected `)' before "volatile"
test.cc:39  39: error: expected unqualified-id before "volatile"
 39: error: expected `)' before "volatile"
 39: error: expected `)' before "volatile"
test.cc:40  40: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:41  41: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:42  42: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:43  43: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:44  44: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:45  45: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:46  46: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:47  47: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:48  48: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:49  49: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:50  50: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:51  51: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:52  52: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:53  53: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:54  54: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:55  55: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:56  56: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:57  57: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:58  58: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:59  59: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:60  60: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:61  61: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:62  62: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:63  63: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:64  64: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:65  65: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:66  66: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:67  67: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:68  68: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:69  69: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:70  70: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:71  71: error: expected constructor, destructor, or type 
conversion before '=' token
=' token
test.cc:61  61: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:62  62: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:63  63: error: expected constructor, destructor, or type 
conversion before '=' token
test.cc:64  64: error: e

von Johannes M. (johnny-m)


Lesenswert?

1
_delay_ms(10*nacht);
Und das geht auch schief. Schau Dir die Dokumentation der 
Bibliotheksfunktionen an! Da steht, dass die _delay_XX-Funktionen 
erstens in ihrer maximalen Verzögerungszeit begrenzt sind (ion 
Abhängigkeit vom CPU-Takt) und außerdem, dass sie nur dann korrekt 
funktionieren, wenn die übergebenen Werte zur Compilezeit bekannt 
(konstant) sind und wenn die Optimierung des Compilers eingeschaltet 
ist!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Nun, C ist nicht BASIC.  Ausführbarer Code kann in C nur innerhalb
einer Funktion erscheinen, nicht ,,einfach so'' auf globaler Ebene.

Wenn du vor all deine Initialisierungen ein
1
static void init(void){
und dahinter eine
1
}
schreibst und als erstes in main()
1
init();
aufrufst, dann compiliert das Ganze anstandslos.

Du hast die Benutzungshinweise zu _delay_ms() aber nicht beachtet,
das wird so nicht sinnvoll funktionieren (sondern viel zu langsam
werden): diese Funktion kann nur mit einer zur Compilezeit bekannten
Anzahl von Millisekunden sinnvoll arbeiten.  Besser noch, nimm einen
Timer für die Verzögerung.

Die Erzeugung eines random seed durch Auslesen eines Zählers allein
bringt dir keinen Zufall, sondern mit hoher Wahrscheinlichkeit stets
wieder dasselbe.  Der Controller ist halt eine Maschine, und wenn er
sonst durch nichts beeinflusst wird, arbeitet er die gleiche
Befehlssequenz halt auch immer in der gleichen Zeit ab.  Du brauchst
folglich für echten Zufall noch irgendein anderes physikalisches
Ereignis, das nicht vorhersagbar ist.  Das kann eine Bediener-
Interaktion sein, es kann aber auch von der Taktfrequenz eines zweiten
Timers abgeleitet sein, der nicht starr mit dem Hauptoszillator
gekoppelt ist.  Wenn du den ATmega8515 von einem Quarz betreibst (so
klingt dein F_CPU), dann könntest du dafür indirekt den
1-MHz-RC-Oszillator benutzen.  Dieser wird für das Timing der
EEPROM-Schreibfunktion herangezogen.  Wenn du also misst, wie viele
CPU-Takte (Quarz) das Schreiben einer EEPROM-Zelle benötigt, so wird
diese Zahl geringfügig variieren (Betriebsspannung, Temperatur), das
kannst du dann als random seed benutzen.  Vorsicht aber, eine
EEPROM-Zelle hat nur eine begrenzte Lebensdauer, wenn du das zu häufig
machst, machst du sie damit kaputt (was aber natürlich für den
gewünschten Zweck egal wäre).

von Johannes M. (johnny-m)


Lesenswert?

Christian Rutschmann wrote:
> Sorry hab die Fehlermeldung vergessen.
Neee, jetzt korrigier erst mal die o.g. Sachen. Dann compilierst Du das 
neu und schickst dann nochmal das was übrig bleibt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Johannes M. wrote:

>
1
> if(7<y<=15)
2
>
> Und sowas geht in C gar nicht!

Der Compiler beklagt sich nicht darüber, also geht es. ;-)  Es wird
aber sehr wahrscheinlich nicht das tun, was der Dichter uns damit
sagen wollte...  Es wird zuerst 7 mit y verglichen.  Das Ergebnis ist
entweder 0 oder 1, das wird dann auf <= 15 verglichen.  Das Ergebnis
ist dann immer wahr.

Wenn man die Warnungen einschaltet, sagt der Compiler das auch:
1
foo.c: In function 'zufall':
2
foo.c:104: warning: no return statement in function returning non-void
3
foo.c: In function 'main':
4
foo.c:138: warning: comparisons like X<=Y<=Z do not have their mathematical meaning
5
foo.c:142: warning: comparisons like X<=Y<=Z do not have their mathematical meaning
6
foo.c:146: warning: comparisons like X<=Y<=Z do not have their mathematical meaning

von Christian R. (bqzero)


Lesenswert?

Hab nun die Dinge korrigiert.
1
#include <avr/io.h> //Controllerspezifikationenen
2
#include <stdlib.h> //Standard Library
3
#ifndef F_CPU
4
#define F_CPU 3686400UL // Quarz mit 3.6864 Mhz
5
#endif
6
#include <util/delay.h> //Verzögerungen
7
//-------------------------------------------------------------------------
8
//Diverses
9
//-------------------------------------------------------------------------
10
static void init(void)
11
{
12
  int anzahllichter=32;//Anzahl muss durch 8 teilbar sein
13
  int reihenfolge[32];//Gleicher Wert wie anzahllichter
14
  int licht[32];//Gleicher Wert wie anzahllichter
15
  DDRA=0b11111111;//Ausgaenge
16
  DDRB=0b11111111;//Ausgaenge
17
  DDRC=0b11111111;//Ausgaenge
18
  DDRD=0b11111111;//Ausgaenge
19
  DDRE=0b00000000;//Eingaenge
20
  licht[0]=(1<<PA0);
21
  licht[1]=(1<<PA1);
22
  licht[2]=(1<<PA2);
23
  licht[3]=(1<<PA3);
24
  licht[4]=(1<<PA4);
25
  licht[5]=(1<<PA5);
26
  licht[6]=(1<<PA6);
27
  licht[7]=(1<<PA7);
28
  licht[8]=(1<<PB0);
29
  licht[9]=(1<<PB1);
30
  licht[10]=(1<<PB2);
31
  licht[11]=(1<<PB3);
32
  licht[12]=(1<<PB4);
33
  licht[13]=(1<<PB5);
34
  licht[14]=(1<<PB6);
35
  licht[15]=(1<<PB7);
36
  licht[16]=(1<<PC0);
37
  licht[17]=(1<<PC1);
38
  licht[18]=(1<<PC2);
39
  licht[19]=(1<<PC3);
40
  licht[20]=(1<<PC4);
41
  licht[21]=(1<<PC5);
42
  licht[22]=(1<<PC6);
43
  licht[23]=(1<<PC7);
44
  licht[24]=(1<<PD0);
45
  licht[25]=(1<<PD1);
46
  licht[26]=(1<<PD2);
47
  licht[27]=(1<<PD3);
48
  licht[28]=(1<<PD4);
49
  licht[29]=(1<<PD5);
50
  licht[30]=(1<<PD6);
51
  licht[31]=(1<<PD7);
52
}
53
//-------------------------------------------------------------------------
54
//Zufallsfunktion
55
//-------------------------------------------------------------------------
56
int zufall(int zahlenrange)
57
{
58
  init();
59
  //Funktion liefert ganzzahlige Werte zwischen 0 und zahlenrange
60
  //Werte sind einmalig. Und lassen sich als Zufallszahl verwenden.
61
  int rand1;
62
  int rand2;
63
  int rand3=0;
64
  int randz;
65
  int randy=0;
66
  int werte[32];//Gleicher Wert wie anzahllichter
67
  int nr[32];//Gleicher Wert wie anzahllichter
68
  //Zufallszahlen generieren
69
  for(rand1=0;rand1<zahlenrange;rand1++)
70
  {
71
    srand(TCNT0);
72
    werte[rand1]=rand()%100;
73
    for(randz=0;randz<zahlenrange;randz++)
74
    {
75
      if(nr[randz]!=werte[rand1])
76
      {
77
        randy++;
78
      }
79
    }
80
    if(randy<1)
81
    {
82
      nr[rand1]=werte[rand1];
83
    }
84
  else
85
    {
86
      rand1--;
87
    }
88
  }
89
  //Reihenfolge festlegen.
90
  for(rand1=0;rand1<zahlenrange;rand1++)
91
  {
92
    for(rand2=0;rand2<zahlenrange;rand2++)
93
    {
94
      if(rand1!=rand2)
95
      {
96
        if(nr[rand1]<nr[rand2])
97
        {
98
          rand3+=1;
99
        }
100
      }
101
    }
102
    reihenfolge[rand1]=rand3;
103
    rand3=0;
104
  }
105
}
106
//-------------------------------------------------------------------------
107
//Hauptprogramm
108
//-------------------------------------------------------------------------
109
int main(void)
110
{
111
  init();
112
  int z;
113
  int y;
114
  int tag=10; //Sekunden
115
  int uebergang=3; //Sekunden
116
  int nacht=10; //Sekunden
117
  TCCR0|=(1<<CS00);
118
  TCCR0|=(1<<CS02); //Countergeschwindigkeit 1/1024 der CPU Frequenz ca 3600Hz
119
120
  while(1)
121
  {
122
    //TAG
123
    for(z=0;z<=1;z++)
124
    {
125
      PORTA=0b11111111;
126
      _delay_ms(10);
127
    }
128
    //Uebergang
129
    for(z=0;z<=1;z++)
130
    {
131
      zufall(anzahllichter);
132
      for(y=0;y<=anzahllichter;y++)
133
      {
134
        if(y<=7)
135
        {
136
          PORTA=licht[reihenfolge[y]];
137
        }
138
        if((7<y)&&(y<=15))
139
        {
140
          PORTB=licht[reihenfolge[y]];
141
        }
142
        if((15<y)&&(y<=23))
143
        {
144
          PORTC=licht[reihenfolge[y]];
145
        }
146
        if((23<y)&&(y<=31))
147
        {
148
          PORTD=licht[reihenfolge[y]];
149
        }
150
        _delay_ms(10);
151
      }
152
    }
153
    //Nacht
154
    for(z=0;z<=1;z++)
155
    {
156
      PORTA=0b00000000;
157
      _delay_ms(10);
158
    }
159
  }
160
}

Bekomme nun einige Meldungen. Habe das Gefühl das diese Sache mit
1
static void init(void)
nicht funktioniert.
Meldungen wie folgt:
1
test.cc  In function `int zufall(int)': 
2
test.cc:124  124: error: `reihenfolge' was not declared in this scope 
3
test.cc  In function `int main()': 
4
test.cc:153  153: error: `anzahllichter' was not declared in this scope 
5
test.cc:158  158: error: `licht' was not declared in this scope 
6
 158: error: `reihenfolge' was not declared in this scope 
7
test.cc:162  162: error: `licht' was not declared in this scope 
8
 162: error: `reihenfolge' was not declared in this scope 
9
test.cc:166  166: error: `licht' was not declared in this scope 
10
 166: error: `reihenfolge' was not declared in this scope 
11
test.cc:170  170: error: `licht' was not declared in this scope 
12
 170: error: `reihenfolge' was not declared in this scope

von Johannes M. (johnny-m)


Lesenswert?

Jörg Wunsch wrote:
> Johannes M. wrote:
>
>>
1
>> if(7<y<=15)
2
>>
>> Und sowas geht in C gar nicht!
>
> Der Compiler beklagt sich nicht darüber, also geht es. ;-)  Es wird
> aber sehr wahrscheinlich nicht das tun, was der Dichter uns damit
> sagen wollte...
Das meinte ich eigentlich damit. Ich bin eben kein Compiler und sehe 
auch Fehler, die nicht syntaktischer Natur sind;-) Aber wie ein Gedicht 
sieht das ganze eigentlich nicht aus...

von Johannes M. (johnny-m)


Lesenswert?

Christian Rutschmann wrote:
> Hab nun die Dinge korrigiert.

> Bekomme nun einige Meldungen. Habe das Gefühl das diese Sache mit
>
1
static void init(void)
> nicht funktioniert.
Jörg hat ja auch geschrieben, Du sollst die Initialisierungen (also 
die Zuweisungen) mit static void init(void) Klammern und nicht die 
Variablendklarationen! So wie Du es jetzt da stehen hast, sind all die 
Variablen funktionslokal in init() und dementsprechend in den anderen 
Funktionen unbekannt. Die Deklarationen müssen natürlich global bleiben!

von Christian R. (bqzero)


Lesenswert?

Habe mit deiner Beschreibung einwenig mühe. Wie sollte das dann 
aussehen?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

1
int anzahllichter=32;//Anzahl muss durch 8 teilbar sein
2
int reihenfolge[32];//Gleicher Wert wie anzahllichter
3
int licht[32];//Gleicher Wert wie anzahllichter
bleiben vor init() auf globaler Ebene stehen.

Du solltest dir ein gutes C-Buch zulegen oder einen Einsteigerkurs
C im Internet aufsuchen.

von Johannes M. (johnny-m)


Lesenswert?

Christian Rutschmann wrote:
> Habe mit deiner Beschreibung einwenig mühe. Wie sollte das dann
> aussehen?
Meinst Du meinen Beitrag?

Also, Langversion:
Jede Variable hat einen Gültigkeitsbereich (Scope). Außerhalb des 
Gültigkeitsbereiches ist die Variable unbekannt und kann demzufolge dort 
nicht verwendet werden. Wenn eine Variable innerhalb einer Funktion 
deklariert wird, dann ist sie auch nur innerhalb der Funktion gültig. 
Wenn eine Variable mehreren Funktionen zur Verfügung stehen soll, dann 
muss sie global deklariert werden, also außerhalb jeglicher Funktion 
(und Deklarationen sind praktisch das einzige, was in C außerhalb von 
Funktionen erlaubt ist!). Du hattest ZUweisungen an Variablen 
außerhalb einer Funktion stehen, und das ist in C nicht zulässig! Das 
war das, worauf Jörg Dich hingewiesen hat. Mit Deiner "Lösung" hast Du 
allerdings nicht nur die Zuweisungen, sondern auch die 
Variablendeklarationen in die Funktion init() verfrachtet, mit dem 
Effekt, dass die Variablen jetzt nur noch innerhalb der Funktion init() 
bekannt sind, und nicht mehr da, wo Du sie verwenden willst. Wenn Du 
init() aufrufst, werden die Variablen deklariert und initialisiert, aber 
mit der schließenden Klammer "}" am Ende von init() hören die Variablen 
schon wieder auf, zu existieren.

von Christian R. (bqzero)


Lesenswert?

okay jetzt funktionierts. danke für eure hilfe. weisst du einen kurs den 
du empfehlen kannst? oder ein buch. wie gesagt bin anfänger auf 
unterster stufe.

von Johannes M. (johnny-m)


Lesenswert?

Kernighan & Ritchie: Programmieren in C

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.