C: Int-Wert für struct angeben



  • Guten Abend,

    ich versuche derzeit eine Liste zu erstellen. Die Anzahl der Personen soll zuerst eingegeben werden und dann soll die Eingabe eines Nachnamens, einem Gehalt und einer Personalnummer für jede Person erfolgen.

    Folgender Code steht bereits:

    #include <stdio.h>
    #include <stdlib.h>
    
    struct person
    {
    	char *Nachname;
    	int Gehalt;
    	unsigned int PerNr;
    };
    
    void main() {
    	struct person *pdaten;
    	int pNr, f;
    
    	printf("Bitte Anzahl der Personen eingeben:\n");
    	scanf_s("%d", &pNr);
    	pdaten = (struct person *)malloc(sizeof(struct person)*pNr);
    
    	for (f = 0; f < pNr; f++)
    	{
    		printf("Bitte Nachnamen der %d. Person eingeben:\n", f+1);
    		scanf_s("%s", pdaten[f].Nachname);
    
    		printf("Bitte Gehalt der %d. Person eingeben:\n", f+1);
    		scanf_s("%d", pdaten[f].Gehalt);
    
    		printf("Bitte Personalnummer der %d. Person eingeben:\n", f+1);
    		scanf_s("%d", pdaten[f].PerNr);
    	}
    
    	getchar();
    }
    

    Der Name lässt sich ohne Probleme einlesen. Warum aber kann ich pdaten[f].Gehalt nicht so angeben? Wie muss ich es ändern, damit ich Int-Werte eingeben kann?

    Mit freundlichen Grüßen



  • scanf_s("%d", &pdaten[f].Gehalt); // beachte das &
    
    scanf_s("%u", &pdaten[f].PerNr); // hier ebenfalls. Außerdem musst du %u nicht %d nehmen
    

  • Mod

    Ist die Syntax von scanf_s so überhaupt korrekt? Ich erinnere mich, dass die anders ist als bei scanf, aber ich merke mir diesen proprietären Kram nicht so genau. Wer das benutzen möchte, muss selber nachschlagen, wie das richtig geht.



  • Klar ist das syntaktisch richtig. Ist schliesslich vararg, da kompiliert jeder Mist 😉


  • Mod

    SG1 schrieb:

    Klar ist das syntaktisch richtig. Ist schliesslich vararg, da kompiliert jeder Mist 😉

    Ähh, ja. So hab ich das ganz bestimmt gemeint 😃



  • SeppJ schrieb:

    Ist die Syntax von scanf_s so überhaupt korrekt? Ich erinnere mich, dass die anders ist als bei scanf, aber ich merke mir diesen proprietären Kram nicht so genau. Wer das benutzen möchte, muss selber nachschlagen, wie das richtig geht.

    Das erfordert bei Zeicheneingaben (c, s, [ ) einen extra Paramter.



  • ..



  • Ups, darauf habe ich überhaupt nicht geachtet 😃
    Moment mal, wenn ich mir den Code jetzt mal richtig anschaue, muss ich aber auch feststellen, dass für char *Nachname; auch kein Speicher reserviert wird. Von daher stimmt der Code so wie er ist vorne und hinten nicht.



  • Danke für die schnellen Antworten. Das mit dem "&" vor "pdaten..." macht Sinn und funktioniert 👍

    Das ich bei scanf_s noch zusätzlich aufpassen muss, war mir nicht bewusst (das muss ich mir wohl nochmal anschaun) - habs nur verwendet da Visual Studios immer meckerte, wenn ich nur scanf benutzte und mir scanf_s vorschlug.

    Biolunar schrieb:

    Ups, darauf habe ich überhaupt nicht geachtet 😃
    Moment mal, wenn ich mir den Code jetzt mal richtig anschaue, muss ich aber auch feststellen, dass für char *Nachname; auch kein Speicher reserviert wird. Von daher stimmt der Code so wie er ist vorne und hinten nicht.

    Das ist mir auch schon aufgefallen. Hab den Code in char Nachname [20]; geändert was dann auch in Code-Blocks zumindest einwandfrei funktioniert 😉



  • Dosenfutter schrieb:

    Das ich bei scanf_s noch zusätzlich aufpassen muss, war mir nicht bewusst (das muss ich mir wohl nochmal anschaun) - habs nur verwendet da Visual Studios immer meckerte, wenn ich nur scanf benutzte und mir scanf_s vorschlug:

    Deaktiviere lieber die Warnung.


Log in to reply