Problem bei Struktur-Programm (Beschreibung im Thread)
-
Hey ihrs,
ich muss ein Programm schreiben, bin auch fast fertig, aber eine sache funktioniert noch nicht.
Das Programm soll mehrere Datensätze (Klausurergebnis) einlesen können und dann nach Abfrage der Minimalpunktzahl diejenigen auflisten, die die Mindestpunktzahl erreicht haben.
Diese Bedingung klappt bei mir nicht. Alles ausgeben geht, aber nicht das, was ich brauche.. er nimmt die if-Bedingung in Zeile 37 irgendwie nicht so an, wie ich mir das vorstelle, woran könnte das liegen?
würd mich freuen, wenn mir jemand helfen könnte,
lg#include <stdio.h> #define MAX 30 struct adres { char fname[MAX]; char vname[MAX]; long matrikel[MAX]; int punktzahl; } klausur, liste[50]; int insert (int n) { printf("\nFamilienname : "); scanf("%s", &klausur.fname); printf("Vorname : "); scanf("%s", &klausur.vname); printf("Matrikel-Nr. : "); scanf("%ld", &klausur.matrikel); printf("Punktzahl : "); scanf("%2d", &klausur.punktzahl); liste [n] = klausur; return n+1; } void ausgabe (struct adres x) { int j; if (x.punktzahl>=j) { printf("\n"); printf("%s", x.fname); printf("%\t%\t%s", x.vname); printf("%\t%\t%ld", x.matrikel); printf("%\t%\t%d", x.punktzahl); } } int main() { int n=0, i, a; do { printf("\nH a u p t m e n u e\n"); printf("\n***********************\n\n"); printf("1%\tinsert\n"); printf("2%\tlist\n"); printf("3%\texit\n"); printf("\n***********************\n"); printf("\nIhre Auswahl: "); scanf("%d",&a); switch (a) { case 1: n=insert(n); break; case 2: { int j; printf("Minimal-Punktzahl: "); scanf("%d", &j); for (i=0; i<n; i++) { klausur=liste[i]; ausgabe(klausur); } printf("\n\n"); } break; case 3: break; default: break; } } while (a != 3); printf("\nSie haben exit (3) gewaehlt\n\n"); return 0; }
-
Was denkst du denn hat j für einen Wert in Zeile 37? Tip: Es ist nicht der in Zeile 75 eingelesene.
Warum das +1 in Zeile 27?
-
ja, j hat keinen wert.. aber wie krieg ich denn den wert dahin, den ich vorher in zeile 71 gescannt hab?
das +1 ist, damit das n jedesmal, nachdem die schleife durchlaufen wurde, sein wert erhöht, damit jeder datensatz in einem neuen feld gespeichert wird.
-
Mampf23 schrieb:
ja, j hat keinen wert.. aber wie krieg ich denn den wert dahin, den ich vorher in zeile 71 gescannt hab?
"Keinen Wert" ist nicht richtig. Es wird nicht initialisiert, das heisst, dass j jeden darstellbaren Wert haben kann.
Du kannst j den Funktion einfach zusätzlich übergeben. Funktionen können ja mehr als einen Parameter habenMampf23 schrieb:
das +1 ist, damit das n jedesmal, nachdem die schleife durchlaufen wurde, sein wert erhöht, damit jeder datensatz in einem neuen feld gespeichert wird.
Das habe ich falsch gelesen, sorry.
-
So:
indem du einfach j als Parameter übergibst
... void ausgabe (struct adres x,int j) { //int j; ist ja schon ein Parameter if (x.punktzahl>=j) { //Und so weiter ...
Und das was du vorher eingelesen hast kommt als Parameter hinzu
... int j; printf("Minimal-Punktzahl: "); scanf("%d", &j); for (i=0; i<n; i++) { klausur=liste[i]; ausgabe(klausur,j); //Hier wird j als Parameter übergeben } ...
Weiterhin noch ein paar Vorschläge von mir:- Wenn bei der default-Block bei switch nichts machen soll kann er weggelassen werden
- in for-Schleifen initialisiere kann man auch deklarieren:
statt
int i; for(i=0;i<...
besser
for(int i=0;i<...
-
super, vielen dank, jetzt funktioniert's!