Funktion: Student + Matrikelnr eingeben in Struktur... Hilfe
-
Das liegt nicht nur an Zeile 21/22
...\main.c||In function 'main':| ...\main.c|15|warning: format '%i' expects type 'int *', but argument 2 has type 'int'| ...\main.c|17|warning: format '%i' expects type 'int *', but argument 2 has type 'int'| ...\main.c|20|error: incompatible types when assigning to type 'struct koord *[10]' from type 'char *'| ...\main.c|21|error: incompatible types when assigning to type 'struct koord *' from type 'struct Punkt'| ...\main.c|24|error: request for member 'x' in something not a structure or union| ...\main.c|24|error: request for member 'y' in something not a structure or union| ...\main.c|24|error: request for member 'name' in something not a structure or union| ||=== Build finished: 6 errors, 2 warnings ===|
Das
struct koord*punkte[10];
bedeutet "declare punkte as array 10 of pointer to struct koord"Mach doch (erstmal) punkte als Array von
struct Punkt
-
Hab mal ein wenig weiter dran gebastelt: jetzt spuckt mein Compiler nurnoch eine Fehlermeldung in Zeile 11 aus:
#include <stdlib.h> #include <conio.h> #include <stdio.h> int main (){ struct Punkt { int x,y; char name[20]; }koord, *punkte; struct koord*punkte[10]; for (int i=0; i < 10; i++){ //punkte = (struct koord*)malloc(sizeof(koord)); printf ("Bitte geben Sie X ein:\n"); scanf ("%i", koord.x); printf ("Bitte geben Sie Y ein:\n"); scanf ("%i", koord.y); printf ("Bitte geben Sie einen Namen ein:\n"); scanf ("%s", koord.name); punkte[i] = koord; i++; } for (int i = 0; i <10; i++){ printf ("X:%i\tY:%i\tName:%s\n", punkte[i].x, punkte[i].y, punkte[i].name); } _getch (); return 0; }
-
Versuchst du die Fehlermeldung auch zu verstehen?
Es scheint als dokterst du solange daran rum bis kein Fehler mehr kommt, ohne darüber nachzudenken.
...\main.c||In function 'main':| ...\main.c|11|error: conflicting types for 'punkte'| ...\main.c|9|note: previous declaration of 'punkte' was here| ...\main.c|16|warning: format '%i' expects type 'int *', but argument 2 has type 'int'| ...\main.c|18|warning: format '%i' expects type 'int *', but argument 2 has type 'int'| ...\main.c|22|error: incompatible types when assigning to type 'struct koord *' from type 'struct Punkt'| ...\main.c|26|error: request for member 'x' in something not a structure or union| ...\main.c|26|error: request for member 'y' in something not a structure or union| ...\main.c|26|error: request for member 'name' in something not a structure or union| ||=== Build finished: 5 errors, 2 warnings ===|
Oder auf Deutsch: Du hast ein Variable Namens
punkte
schon definiert.Und auch die Warnungen sind böse Fehler, die dafür sorgen, dass dein Programm nicht funktionieren wird.
-
Ich sags ehrlich ich steht einfach aufm Schlauch
prinzipiell will ich einfach nur, dass die ganzen Werte in ein Array (welches aus den Strukturelementen besteht) gespeichert wird.
Sprich dass in meinem Fall
z.B.an der Stelle
punkte[2] --> 3(X-wert), 2 (Y-Wert), Punktname1 steht.
etc.Ich peil einfach nicht wie ich das mache.
Dass das Array punkte schon definiert ist, hab ich mir schon gedacht, jedoch wenn ich das erste *punkte (hinter dem }koord) wegnehme, zeigt mein Compiler sofort einen Fehler an.
Deine Warnungen zeigt er bei mir nicht an (und ich hab Warnungen an).
...\main.c|16|warning: format '%i' expects type 'int *', but argument 2 has type 'int'|
...\main.c|18|warning: format '%i' expects type 'int *', but argument 2 has type 'int'|Das hier versteht ich z.B. auch nicht so ganz .... hab jetzt mal das %i durch %d ersetzt.
-
Eines meiner Lieblingszitate:
c.rackwitz schrieb:
Wenn du selber Code schreibst, musst du ihn auch verstehen. Code ist kein Haufen von wahllos zusammengeschmissenen Buchstaben und Zeichen, Code ist Logik pur. Du musst genau wissen, warum du wo und welches Zeichen setzt.
Passt mal wieder perfekt.
Bevor du weiter rumdoktorst:
Setz mal all dein Wissen ein, bzw. versuche selber zu recherchieren, wenn du es nicht weißt, und erkläre, was folgede Codes genau tun und, falls es Unterschiede gibt, welche genau dies sind. Oder wenn du wirklich nicht weiter weißt, dann frag nochmal nach:
a:struct Punkt { int x,y; char name[20]; };
b:
int i;
c:
struct Punkt { int x,y; char name[20]; } koord;
d:
struct Punkt { int x,y; char name[20]; }; struct Punkt koord;
f:
typedef int foo; foo i;
g:
typedef struct { int x,y; char name[20]; } Punkt; Punkt koord;
h:
int *i;
i:
int j[5]
;
k:int i,*j;
l:
int *i, j;
m:
int* i,j;
n:
int *i, j[5];
o:
int i, *j[5];
p:
int (*i)[5];
q:
struct { int x,y; char name[20]; } koord;
r:
struct Punkt{ int x,y; char name[20]; } koord;
s:
struct Punkt{ int x,y; char name[20]; } koord; struct Punkt punkt;
t:
struct Punkt{ int x,y; char name[20]; } koord; struct Punkt punkte[5];
u:
struct Punkt{ int x,y; char name[20]; } koord, punkte[5];
v:
struct { int x,y; char name[20]; } koord, punkte[5];
-
Aaalso:
a)
Es wird eine Struktur mit dem Namen Punkt deklariert.
Die Struktur hat 2 int Datentypen und ein char Feld mit der Länge 20.b)
i wird als Integer deklariert.c)/d)
wie a), nur dass zusätzlich noch eine Strukturvariable defniert wird.f)
= int i
g)
eine neue Variable von Typ Punkt wird eingeführt
h)
deklaration auf einen Zeiger, der auf einen Integer zeigt
i)
Feld mit 5 Integersboah das sind mir zu viele für heute ...
aber ein kleiner Zwischenbericht wär nett
-
C-Schüler 2012 schrieb:
a)
Es wird eine Struktur mit dem Namen Punkt deklariert.
Die Struktur hat 2 int Datentypen und ein char Feld mit der Länge 20.Falsch. Es wird eine Struktur mit dem Namen
struct Punkt
eingeführt.b)
i wird als Integer deklariert.Ja.
c)/d)
wie a), nur dass zusätzlich noch eine Strukturvariable defniert wird.Korrekt.
f)
= int iJa.
g)
eine neue Variable von Typ Punkt wird eingeführtNicht ganz. Es wird ein Typ Punkt eingeführt. Dieser ist ein anderer Name für die Struktur, die oben noch
struct Punkt
hieß. Dann wird eine Variable namenskoord
von diesem Typ deklariert.h)
deklaration auf einen Zeiger, der auf einen Integer zeigtJa.
i)
Feld mit 5 IntegersJa.
-
Ok ein paar gehen noch
q)
wie c), nur dass die Struktur keinen Namen hat (muss sie nicht haben, weil Strukturvariable vorhanden)r)
= c)s)
wie r), nur dass noch zusaätzlich eine neue Strukturvariable ergänzt wird.t/u)
wie s), nur dass die Strukturvariable jetzt ein Feld aus Strukturvariablen ist ?
v)
ist wie u) oder?
-
ah seh grad, dass bei
v) der Strukturname fehlt.ändert aber grundsätzlich nichts an der deklaration (in diesem Beispiel)
-
C-Schüler 2012 schrieb:
Ok ein paar gehen noch
q)
wie c), nur dass die Struktur keinen Namen hat (muss sie nicht haben, weil Strukturvariable vorhanden)r)
= c)s)
wie r), nur dass noch zusaätzlich eine neue Strukturvariable ergänzt wird.t/u)
wie s), nur dass die Strukturvariable jetzt ein Feld aus Strukturvariablen ist ?
v)
ist wie u) oder?Korrekt.
C-Schüler 2012 schrieb:
ah seh grad, dass bei
v) der Strukturname fehlt.ändert aber grundsätzlich nichts an der deklaration (in diesem Beispiel)
Auch richtig.
Du kannst das ja anscheinend doch. Kannst du nun eine Verbindung zu den Fehlern in deinem Programm herstellen?
-
Ei bin ja auch fleißig am lernen
Aber trotzdem verwirrt mich dieses blöde koord*punkte[10]....
wie gesagt, ich steh voll augm Schlauch.
-
C Schüler 2012 schrieb:
Aber trotzdem verwirrt mich dieses blöde koord*punkte[10]....
Eben. Das ist ja auch Unsinn.
Aber ich dachte, du hattest es selbst geschrieben, wie kann dich das verwirren?
-
nee das hier ist die aufgabenstellung:
C/C++ Code:
struct Punkt {
int x,y;
char name[20];
}koord;10 solcher Koordinatenpunkte sollen mit der Tastatur eingegeben und in ein Array koord*punkte[10]gespeichert werden. Schreib ein Programm dazu.
-
Tja, dann ist die Aufgabenstellung falsch. Wäre nicht der erste schlechte C-Lehrer dessen unsinnige Aufgabenstellungen hier im Forum landen.