Fehlersuche in einem C-Programm
-
hallo, ich lern grad c und da hatte ich in einem Übungsbuch die Fehler in einem Code zu korriegieren. das habe ich soweit auch (fast) geschafft, allerdings fehlen mir 2 Fehler, die ich noch zu korriegieren habe. Aus den Fehlermeldungen des Compilers kann ich nicht viel entnehmen.
hier der ursprüngliche Code:
#include <stdio.h> struct Student { char name[200]; unsigned int matrikelnummer; }; Student informatiker[3] = { {"Karl Koch", 0}, {"Kevin Mitnick", 0}, {"Linus Torvalds", 0} }; int n_students = 0; void immatrikuliere(int anzahl) { for(i=0; i<anzahl; i++) { informatiker[i].matrikelnummer = ++n_students; } } int main(int argc, char **argv) { immatrikuliere(3); int i; for (i=0; i<3; i++) { struct Student *s = informatiker[i]; printf("Student '%s' hat Matrikelnummer %06d\n", s.name, s.matrikelnummer); } printf("Es wurden %f Studenten eingeschrieben.\n", n_students); return 0; }
die mehrzahl der fehler habe ich wie folgt elimiert. aus dem ursprünglichen code habe ich das hier gemacht:
#include <stdio.h> struct Student { char name[200]; unsigned int matrikelnummer; } Student_informatiker[3] = { {"Karl Koch", 0}, {"Kevin Mitnick", 0}, {"Linus Torvalds", 0} }; int n_students = 0; void immatrikuliere(int anzahl) { int i; int informatiker[anzahl]; for(i=0; i<anzahl; i++) { unsigned int matrikelnummer; informatiker[i] = matrikelnummer; ++n_students; } } int main(int argc, char **argv) { immatrikuliere(3); int i; for (i=0; i<3; i++) { int informatiker[3]; unsigned int *s = &informatiker[i]; printf("Student '%s' hat Matrikelnummer %06d\n", s.name, s.matrikelnummer); } printf("Es wurden %d Studenten eingeschrieben.\n", n_students); return 0; }
so und jetzt spuckt mir der compiler nur noch 2 Fehler aus. Diese wären:
In function 'main'
33: error: request for member 'name' in something not a structure or union
33: error: request for member 'matrikelnummer' in something not a structure or uniondas ist die zeile mit :
printf("Student '%s' hat Matrikelnummer %06d\n", s.name, s.matrikelnummer);
das kapitel über Zeiger hatte ich nicht ganz durchlesen können, aber ich vermute mal dass die notation s.name und s.matrikelnummer falsch ist, oder?
weil diese notation kenn ich aus JAVA, wo mit referenzvariablen auf objekte zugegriffen werden kann etc.
gibts das auch in C ? wenn nein, dann ist das ja falsch, aber wie kann ich das korrigieren?da ich gerade C lerne, wäre ich für jede hilfe dankbar....;)
-
Das Kapitel Strukturen und Zeiger (nochmal) durchlesen. -> da werden Sie geholfen.
Im übrigen hast du das Programm nur noch schlimmer gemacht.
Was soll Zeile 8?
Und was sollen die lokalen informatiker?
-
ähm....ich weiß selbst nicht, was die lok. informatiker zu bedeuten haben. auf jdn. fall konnte ich damit die fehlermeldung beseitigen.
ich dachte auch, dass man mir auch vtl. helfen könnte. Dass ich das programm noch schlimmer gemacht haben soll, kann als C-Anfänger akzeptieren, aber das hilft mir nicht weiter.edit:
Ich habe grad auf ner seite gelesen, wofür das struct steht. damit kann man einen nutzerdefinierten typ einbauen. und v.a. mit dem . auf elemente zugreifen.
davon wusste ich ja gar nichts...
-
Wenn das Buch Übungen zu Themen macht, die noch nicht behandelt wurden, schmeiß es weg.
Ansonsten lies dir die Kapitel richtig durch. Durchaus mehrmals.
Diese Arbeit nimmt dir hier keiner ab.Und wenn du nicht weißt was du tust, dann lass es sein.
Betrchte auch die Warnungen des Compilers als Fehler.s ist auch ein Zeiger auf eine Struktur. Da wird der Zugriff auf die Elemente noch anders geschrieben.
-
pac89 schrieb:
#include <stdio.h> struct Student { char name[200]; unsigned int matrikelnummer; }; Student informatiker[3] = { {"Karl Koch", 0}, {"Kevin Mitnick", 0}, {"Linus Torvalds", 0} }; /* ^^^ wenn das hier durchgeht, arbeitest du mit einem C++ Compiler, nicht mit einem C Compiler */
Warum benutzt du keine Code-Tags?
Warum liest du die FAQ nicht, die ist genau für solche Leute wie dich, nämlich Forumsneulinge da?
-
okay. ich schlage mich da selber durch. vielen dank für die hilfe.