Array erstellen

Gast #4100881
Lesenswert?

Nach meinem C-Buch, Kapitel 11, (C von a bis z) kann ich ein Array 
folgender massen erstellen:
1
Datentyp Arrayname[Anzahl_der_Elemente];  (Syntax)

als Programm Stück:
1
int i[5];

... und als konkretes Beispiel:
1
int main(void) {
2
   int i[5];     /* Array mit 5 int-Elementen */
3

4
   /* Wertzuweisungen des Arrays */
5
   i[0] = 5;
6
   i[1] = 100;
7
   i[2] = 66;
8
   i[3] = 77;
9
   i[4] = 1500;
Verwende AVR Studio 6.2
Bekomme leider ein paar Fehlermeldungen dazu, das es falsch ist.
Im Netz finde ich Hinweise auf {}. Auch im Wiki steht nichts zu dieser 
Sache drin. Was stimmt den nun?
achim
#4100886
Lesenswert?

achim schrieb:
> Bekomme leider ein paar Fehlermeldungen dazu, das es falsch ist.

Diese Fehlermeldungen sagen aber normalerweise etwas mehr als "der Code 
ist falsch". Anders als machen zu glauben scheinen, ist ihr Inhalt und 
die Zeile, auf die sie sich beziehen, essenziell.
Der einzige Fehler, den ich in deinem obigen Programm finden kann, ist 
das Fehlen der schließenden geschweiften Klammer am Ende von main(). 
Bist du sicher, daß der obige Code tatsächlich der ist, den du durch den 
Compiler hast laufen lassen und nicht etwa welcher, den du extra für's 
Posting nochmal neu geschrieben hast?
Gast #4101024
Lesenswert?

Hallo Rolf
bin mir sicher, habe den Code 1:1 aus dem Buch genommen bzw. mit kopie 
geholt. Als Fehler wurde nur die Zeile angegeben mit dem Hinweis 
"mismatch", waren nur so ca. 3 Worte.
Gibt es Unterschied dabei, wenn das Buch zu Zeiten Studio 4 erstellt 
wurde und ich jetzt AVR Studio 6 nehme?
Leider komme ich erst heute abend an die konkreten Infos ran.
In einigen Tuts im Netz wird der Syntax aber immer mit geschweiften 
Klammern angegeben.
Werde es testen
achim
Gast #4101159
Lesenswert?

achim schrieb:
> bin mir sicher, habe den Code 1:1 aus dem Buch genommen bzw. mit kopie
> geholt.

Einmal für den Compiler und einmal für das Posting abgetippt, oder hast 
du wirklich den Inhalt der Datei, die du compiliert hast, per copy/paste 
ins Posting kopiert? Ich will vermeiden, daß irgendein 
Flüchtigkeitsfehler zu einen Unterschied führt zwischen dem, was der 
Compiler sieht und dem, was du postest. Sowas hab ich nämlich schon oft 
genug erlebt, und das führt meist dazu, daß man Phantome sucht.

achim schrieb:
> Als Fehler wurde nur die Zeile angegeben mit dem Hinweis "mismatch",
> waren nur so ca. 3 Worte.

Das reicht nicht. Umd dir helfen zu können, brauchen wir die genaue und 
vollständige Fehlermeldung (copy/paste) und die Info darüber, auf 
welche Zeile sie sich bezieht. Am besten hängst du dann noch gleich das 
File an, das du versucht hast zu compilieren.

> Gibt es Unterschied dabei, wenn das Buch zu Zeiten Studio 4 erstellt
> wurde und ich jetzt AVR Studio 6 nehme?

Keinen, der dein Problem erklären würde.
Gast #4101174
Lesenswert?

Hallo Rolf
hatte danach verschieden Versionen versucht. Alle mit dem gleichen 
Ergebniss. Bei den Klammern geht wa damit. Trotzfdem steht es im WIKI 
ohne Klammern {} und in einigen Tuts mit {} drin.
Hatte schon geschrieben, bin heute abend erst an meinen PC und den 
Daten. kann es dir dann schicken. Möchte auch wissen was ich falsch 
mache.
achim
(Firma: Schweigstill IT) Persönliche Seite #4101179
Lesenswert?

achim schrieb:
> hatte danach verschieden Versionen versucht. Alle mit dem gleichen
> Ergebniss. Bei den Klammern geht wa damit. Trotzfdem steht es im WIKI
> ohne Klammern {} und in einigen Tuts mit {} drin.

Hier interessiert kein Prosa-Geschwafel, sondern nur FAKTEN, FAKTEN, 
FAKTEN. Wenn Du über Prosatexte diskutieren willst, dann besuche ein 
Literaturforum.
Gast #4101226
Lesenswert?

achim schrieb:
> Als Fehler wurde nur die Zeile angegeben mit dem Hinweis
> "mismatch", waren nur so ca. 3 Worte.

Hihi, die Zeile wurde angegeben, aber ich sage sie euch nicht bäätsch!

Wenn ein Integer bei dir >1 Byte ist und du main eine schließende 
Klammer spendierst ist der obige Code 100% korrekt.
#4101312
Lesenswert?

> Wenn ein Integer bei dir >1 Byte ist

Was immer der Fall sein müsste, da in C ein Mindestwertebereich für 
einen int gefordert wird, der sich mit nur 1 Byte nicht abdecken lässt 
...

> und du main eine schließende
> Klammer spendierst

... und das ist eigentlich etwas, was jeder C-Lernende nach ca. 10 
Minuten C lernen intus haben sollte.
Wenn man natürlich immer nur Code aus Online-Tutorien (oder 
Online-Büchern) mittels Copy/Paste kopiert und laufen lässt, dann lernt 
man die üblichen Tippfehler-Fallen nicht. Lernen geht nicht so, dass man 
Code per Copy&Paste von irgendwo herkopiert, compiliert, laufen lässt 
und sich am Ergebnis freut. Dabei lernt man genau 0. Zum lernen gehören 
auch die typischen Tippfehler am Anfang dazu und das interpretieren der 
typischen Fehlermeldungen, die daraus folgen.
Gast #4101359
Lesenswert?

achim schrieb:
> hatte danach verschieden Versionen versucht. Alle mit dem gleichen
> Ergebniss. Bei den Klammern geht wa damit. Trotzfdem steht es im WIKI
> ohne Klammern {} und in einigen Tuts mit {} drin.

Die Klammern benutzt man, wenn man das ganze Array bei seiner Erstellung 
gleich initialisiert. Bei den Zuweisungen an einzelne Elemente, wie du 
es oben machst, haben sie nichts zu suchen.

Karl Heinz schrieb:
>> Wenn ein Integer bei dir >1 Byte ist
>
> Was immer der Fall sein müsste, da in C ein Mindestwertebereich für
> einen int gefordert wird, der sich mit nur 1 Byte nicht abdecken lässt
> ...

Ein Byte kann auch 16 oder 32 oder 27 Bit breit sein. Das  ist hier sehr 
unwahrscheinlich, aber nicht unmöglich. Allerdings sehe ich nicht, warum 
der Code dann nicht funktionieren sollte.
Gast #4101858
Lesenswert?

Hallo Achim,

mir fällt auf, dass der gezeigte Code nicht zu den Fehlermeldungen passt 
(schon in Bezug auf die Zeilennummern der Fehlermeldungen nicht). So 
kann/wird Dir niemand helfen ...

Gruß
Dieter
#4101900
Lesenswert?

Es gibt nur diese beiden Fehlermeldungen. Allerdings für jede Zeile. 
Insgesamt 2 x 8.
Es ist korrekt, bin am HT16K33 dran. Er läuft schon, bin nur mit der 
Anzeige und den Aufwand der Programmierung noch nicht zu frieden. 
Deshalb der Array.
In der ersten Zeile steht
1
int8_t g [8] ;
Der gesamte andere Code läuft sehr gut ohne Fehler
achim
#4101916
Lesenswert?

<Glaskugelmode on>

Der TO hat die Zuweisungen vielleicht nicht innerhalb einer Funktion, 
sondern ausserhalb stehen, da wo auch die Deklaration ist.

Ausserhalb von Funktionen sind nämlich keine Statements, und eine 
Zuweisung ist ein Statement, sondern allenfalls Deklarationen erlaubt!

Das muesste dann so aussehen:
1
int8_t g [8] = {
2
5,
3
05,
4
05,
5
05,
6
05,
7
05,
8
05,
9
05
10
};

Warum eigentlich oktale Zahlen, die erste dann aber doch dezimal ???

Vielleicht aber auch was ganz anderes, k.A. - wir kennen ja den 
Originalcode immer noch nicht.

<Glaskugelmode off>


Standardvorgehen wenn man den ganzen Code nicht teilen möchte ist 
übrigens ihn so lange einzudampfen, bis nur noch das minimale übrig 
bleibt, das den selben Fehler erzeugt. Manchmal findet man auf diese 
Weise sogar schon den Fehler.

ZigZeg
#4101924
Lesenswert?

Der ori Code macht viele Sachen. Das Stück was suchst besteht fast nur 
aus void und so. Habe dein Stück reingesetzt. Jetzt wird alles korrekt 
gemacht, ohne Fehler.
Verstehe ich nicht so richtig, da im Buch nichts darüber steht, mit 
Klammern und so. Bin ein bischen verwirrt dadurch.
Egal, danke für die Hilfe. Wenn alles fertig ist, kommt der Coder und 
alles andere hier rein
achim
#4101953
Lesenswert?

Achim Seeger schrieb:
> Verstehe ich nicht so richtig, da im Buch nichts darüber steht, mit
> Klammern und so.

Kai S. schrieb:
> Der TO hat die Zuweisungen vielleicht nicht innerhalb einer Funktion,
> sondern ausserhalb stehen, da wo auch die Deklaration ist.

Du hast Zuweisungen gemacht. Die sind aber nur innerhalb von Funktionen 
erlaubt.
Die Variable wurde vorher definiert und dann willst du sie beschreiben.

Das was Kai geschrieben hat ist einen Definition mit initialisierung.
Die Variable wird angelegt und gleichzeitig mit den Werten vorbelegt.
Das geht auch außerhalb von Funktionen.

Hättest du von Anfang an den vollständigen (oder einen reduzierten, 
compilierbaren, noch fehlerbehafteten) Code gepostet, wäre die Sache 
schnell geklärt gewesen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren