[Anfänger] Fehler: has incompatible type...



  • Hi @ all,

    ich lerne gerade C und bekomme bei meinem Beispiel immer den Fehler
    "left operand of . has incompatible type 'array 100 of stuct Lagerverwaltung"
    Das ganze gilt für die Zeilen 50, 52, und 54. Vielleicht könnt ihr mir helfen.
    Der Code lautet:

    /*Strukturbeispiel zur Lagerverwaltung*/
    
    #include<stdio.h>
    #include<string.h>
    
    struct datum
    {
    	int Tag;
    	int Monat;
    	int Jahr;
    };
    
    struct lagerverwaltung
    {
    	long art_nummer;
    	char artikelname[100];
    	int anz_artikel;
    	struct datum artikeleingang;
    };
    
    int count = 0;
    
    int main()
    {
    
    	int abfrage, nummer;
    
    	struct lagerverwaltung artikel[100];
    
    	do{
    		printf("\nLagerverwaltung\n\n");
    		printf("<1> Neuen Artikel eingeben\n");
    		printf("<2> Artikel anzeigen\n");
    		printf("<3> Ende\n\n");
    		printf("Ihre Eingabe: < >\b\b");
    		scanf("%d",&abfrage);
    		fflush(stdin);
    
    		switch(abfrage)
    		{
    			case 1:artikel[count].art_nummer=count;
    				   printf("Artikelbezeichnung: ");
    				   fgets(artikel[count].artikelname, 100, stdin);
    				   printf("Anzahl der Artikel: ");
    				   scanf("%d", &artikel[count].anz_artikel);
    				   printf("\nDatum:    Tag: ");
    				   scanf("%d",artikel.artikeleingang.Tag);
    				   printf("\n        Monat: ");
    				   scanf("%d",artikel.artikeleingang.Monat);
    				   printf("\n         Jahr: ");
    				   scanf("%d",artikel.artikeleingang.Jahr);
    				   fflush(stdin);
    				   printf("\nDaten wurden aufgenommen.\n");
    				   printf("Artikelnummer lautet: %d\n\n",count);
    				   count++;
    			break;
    
    	   		case 2:printf("\nDie Artikelnummer lautet: ");
    				   scanf("%d",&nummer);
    				   if( (nummer>count) || (nummer<0))
    				   printf("Kein Eintrag gefunden.\n\n");
    				   else
    					  {
    						 printf("\n\nArtikelnummer lautet: %ld\n", artikel[nummer].art_nummer);
    						 printf("Es handelt sich um den Artikel: %s\n", artikel[nummer].artikelname);
    						 printf("\nNoch lagernde Anzahl: %d\n", artikel[nummer].anz_artikel);
    
    					}
    			break;
    
    			default:break;
    
    	   }
         }while(abfrage != 3);
    
    	return 0;
    }
    


  • ist doch sonnenklar

    du erzeugst ein array auf lagerverwaltung
    und dann greifst du ohne index darauf zu

    schreib mal:

    int i = 0;        // das vor der schleife
    scanf("%d",artikel[i++].artikeleingang.Tag); // das in der schleife, in deinem switch...
    


  • Hab das gemacht. jetzt lässt sich das ganze auch compilieren. Doch beim Ausführen wenn ich den Tag eingib, kommt ein runtime Fehler:

    Exeption 0xc0000005
    segment violation
    Adress: ox40523b
    

    Wie kann ich das beheben?



  • also du hast schon nur eine zahl eingegeben und nicht irgendwie diesn tag doer sowas?!?!

    also es scheint als ob der ausserhalb eines arrays schreiben will...

    aber ich sehe jetzt so nicht wo

    geh mal mit dem debugger druch



  • Der Debugger bleibt schon bei der ersten geschweiften Klammer der Main-Funktion steen. Wie kann ich den oben genannten Fehler aber beheben?



  • Hallo,

    petecoolbelab schrieb:

    Wie kann ich den oben genannten Fehler aber beheben?

    Da fehlt immer ein "&" vor den Argumenten für scanf ab der Tageseingabe, ausserdem wurde count hier nicht mehr berücksichtigt.

    MfG,

    Probe-Nutzer



  • Hi,
    hab gar nicht gewusst, dass das "struct" in den Zeilen 19 und 30 zulässig
    ist.



  • Chuck schrieb:

    hab gar nicht gewusst, dass das "struct" in den Zeilen 19 und 30 zulässig ist.

    Das ist nicht nur zulässig, sondern sogar notwendig. Zumindest in C.


Anmelden zum Antworten