Funktions Pointer



  • Hallo @razor.

    Bist du mit deinem Programm fertig geworden?



  • @Semmel92 Er wird wohl https://www.c-plusplus.net/forum/topic/352507/funktions-pointer/8 genommen haben.

    Funktionierte ja nach eigener Aussage (hat aber -wie angemerkt - trotzdem Fehler)



  • @DirkB

    Hmm. Alles Klar. Wäre interessant zu wissen wie ich die Fehler umgehen könnte. Ich Versuch mich mal daran.



  • @Semmel92 Ich hatte die Fehler benannt.
    Wenn du die Anmerkungen nicht verstehst, kannst du fragen.



  • @DirkB Danke für dein Feedback. Ich meinte wie ich das in C so schreibe das die Fehler nicht mehr passieren.

    LG



  • @Semmel92 sagte in Funktions Pointer:

    Ich meinte wie ich das in C so schreibe das die Fehler nicht mehr passieren.

    @DirkB sagte in Funktions Pointer:

    Der Formatspecifier für unsigned int bei scanf ist %u
    (Da sollte der Compiler eine Warnung geben)

    %u statt %d schreiben (auch bei printf), wenn es um eine unsigned Variable geht.

    Du hast fast jede Variable initialisiert, auch bei denen es nicht nötig wäre.
    Bist du dir sicher, das summe in jedem erdenklichen Fall auch Null ist?
    (Nein, das verlangt der Standard nicht)

    summe vor dem Aufruf auf 0 setzen oder besser innerhalb der Funktion
    Ähnlich wie bei produkt

    Beim Aufruf von prosum gehört bei vektor kein Adressoperator hin.

    Adressoperator & bei vektor weglassen

    Hat Zeile 25 nicht funktioniert?
    Was lief da nicht?

    Ist ja mit while gelöst, hustbaer hat es aber auch erklkärt.

    Und warum läuft deine Funktion zweimal über den vektor?

    Beide Berechnungen in einer Schleife machen.

    Was ist, wenn der Nutzer für len Werte über 50 eingibt?

    Eingabewert überprüfen.

    if (len > 50) {
      puts("Wert zu groß, Maximal 50! Bye!");
      return;
    }
    


  • hallo ich habe es so gmacht

    #include <stdio.h>
    #include <stdint.h>
    
    void prosum(int len, double *vektor, double *summe, double *produkt)
    {
        int i;
        vektor;
        *produkt =1;
        
        for (i=0; i<len; i++)
        {
        *summe +=  vektor[i];
        (*produkt) *=  vektor[i];
        }
      }
    
    int main()
    {
        double vektor[10];
        double summe, produkt;
        int i=0;
        unsigned int len=0;
    
        printf("Wieviele Zahlen wollen Sie eingeben: ");
    	scanf("%u", &len);		forum)
    	if (len > 10)
    	{
      		printf("Wert zu gross, Maximal 10!");
      	}
    	
        do{
    		printf("\nBitte geben sie eine Zahl ein: ");
    		scanf("%lf", &vektor[i]);
    		i++;
        }while (i<len);
    
        prosum(len, vektor, &summe, &produkt);
        printf("Summe:%.2f\nProdukt:%.2f\n", summe, produkt);
    
    	return 0;
    }
    


  • @razor sagte in Funktions Pointer:

    hallo ich habe es so gmacht

    Bleibt noch das Problem, das summe (oder *summe) nicht initialisiert wird.

    Automatische Variablen (die werden innerhalb einer Funktion definiert) werden nicht automatisch initialisiert (mit einem Wert vorbesetzt).

    Es wird einfach der Müll an der Speicherstelle genommen.
    Das kann 0 sein, muss es aber nicht.

    Globale und static Variablen werden - wenn nichts anderes angegeben wird - mit 0 initialisiert.



  • #include <stdio.h>
    #include <stdint.h>
    
    void prosum(int len, double *vektor, double *summe, double *produkt)
    {
        int i;
        vektor;
        *produkt =1;
        *summe=0;
        
        for (i=0; i<len; i++)
    	{
        *summe +=  vektor[i];
        (*produkt) *=  vektor[i];
        }
      }
    
    int main()
    {
        double vektor[10];
        double summe=0, produkt=0;
        int i=0;
        unsigned int len=0;
    
        printf("Wieviele Zahlen wollen Sie eingeben: ");
    	scanf("%u", &len);		//Der Formatspecifier für unsigned int bei scanf ist %u (c++ forum)
    	if (len > 10)
    	{
      		printf("Wert zu gross, Maximal 10!");
      	}
    	
        do{
    		printf("\nBitte geben sie eine Zahl ein: ");
    		scanf("%lf", &vektor[i]);
    		i++;
        }while (i<len);
    
        prosum(len, vektor, &summe, &produkt);
        printf("Summe:%.2f\nProdukt:%.2f\n", summe, produkt);
    
    	return 0;
    }
    

    ok die variablen habe ich jetzt initalisiert



  • This post is deleted!

Log in to reply