Zeiger und Array in Funktionen



  • Moin,
    ich experimentiere gerade ein wenig mit Zeigern und Arrays heruem.
    In diesemProgramm möchte ich den Nutzer dazu auffordern 10 Noten einzugeben.
    Aus diesen soll dann der Notendurchschnitt berechnet werden.

    Dabei habe ich nun das Problem, dass ich die Zeiger und Arrays offensichtlich völig falsch gesetzt habe. Dem bin ich mir bewusst.
    Darum wäre es nett wenn ihr mich zu einem Tutorial weiter leiten könntet wo Zeiger in Kombination mit Arrays und Funktionen verwendet werden.
    In meinem momentanen Tutorial ist dies leider nicht der Fall.
    Warum ich das nicht einfach googel? Vor kurzem habt ihr mir hier noch berichtet, dass die meisten Tutorials im Internet Schrott sind. Darum frage ich lieber gleich euch ob es da eben was brauchbares gibt. 🙂

    Der Vollständigkeit halber, habt ihr hier nochmal meinen bisherigen Code.
    Wie gesagt, ich weis das er Schrott ist. 😃

    #define _CRT_SECURE_NO_WARNINGS	
    #include<stdio.h>
    #include<stdlib.h>
    
    void notenabfrage();
    void notenausgabe();
    
    int main() {
    
    	int notenarrayvk[10];
    	int notenarraynk[10];
    	notenabfrage();
    	notenausgabe();
    
    }
    
    void notenabfrage() {
    
    	int i = 1, c = 0, temp1, temp2;
    	int *notenarrayvk[10];
    	int *notenarraynk[10];
    
    	for (c = 0; c <= 9; c++) {
    
    		printf("\nGeben Sie bitte Ihre %d. Note ein: ", i);
    		scanf("%d.%d", &temp1, &temp2);
    		notenarrayvk[c] = temp1;
    		notenarraynk[c] = temp2;
    		i++;
    
    	}
    }
    
    void notenausgabe() {
    
    	int c = 0, i = 1;
    	int *notenarrayvk[10];
    	int *notenarraynk[10];
    
    	for (c = 0; c <= 9; c++) {
    
    		printf("\nIhre %d. Note ist: %d.%d", i, notenarrayvk[c], notenarraynk[c]);
    		i++;
    
    	}
    	getchar();
    	getchar();
    }
    


  • Bitt kaufe dir ein gutes C Buch. Denn so wird das nie was.. So schrecklichen Code habe ich selten gesehen.



  • Oder leih dir ein C-Buch in der Bibliothek aus.

    Da die meisten hier kein C-Kurs mehr benötigen, suchen sie auch nicht nach Tutorials. Also kennen si auch keine. 😞

    Wenn der Zusammenhang von Zeiger und Arrays in deinem Tutorial nicht beschrieben ist, ist es nicht nur "nicht gut" sondern Schrott.
    Dann fehlen da auch noch andere grundegende Dinge - oder es wird später behandelt.

    http://de.wikibooks.org/wiki/C-Programmierung ~Der Link stellt keine Bewertung dar, da ich mir das nicht durchgelesen habe.~
    Bei http://de.wikibooks.org/wiki/C-Programmierung:_Arrays wird zumindest dein Kriterium "wo Zeiger in Kombination mit Arrays und Funktionen verwendet werden." erfüllt.



  • Ein C Buch will ich mir auch kaufen.
    Aber erstmal muss ich ein gutes finden und das nötige Kleingeld haben.
    Als Schüler kann ich nunmal nicht einfach 50€ aus dem Hut zaubern. 🙄

    In meinem Tutorial werden durchaus Arrays in Kombination mit Zeigern verwendet.
    Allerdings in nur einen Funktion.

    EDIT:
    In meiner örtlichen Bibliothek gibt es leider keine Bücher zum programmieren.

    Danke für die Links.
    Die schaue ich mir gleich mal an.



  • Lowbyte-loff schrieb:

    Bitt kaufe dir ein gutes C Buch. Denn so wird das nie was.. So schrecklichen Code habe ich selten gesehen.

    Na. So schlimm ist es nicht - Nowaepon kann halt noch kein C, aber arbeitet sauber. Wenn ich daran denke was mancher anderer hier hinklatscht.
    👍

    @Nowaepon:
    Deine Funktionen kennen die Arrays aus main() nicht. Die musst Du schon als Argumente übergeben.
    Da dabei "nur ein Zeiger aufs erste Element" ankommt musst Du in einem weiteren Argument auch noch die Länge mitteilen.

    #include <stdio.h>
    
    // liest maximal nmemb Elemente in das Array von int base
    // gibt die Anzahl der gelesenen Elemente zurueck
    int input(int* base, int nmemb){
      int count = 0;
      while(nmemb--)
        if(scanf(" %d", base) == 1){
          ++base; // Zeiger aufs naechsten speicherort schalten
          ++count;
        }
        else
          return count;
      return count;
    }
    
    // gibt nmemb Elemente des Array von int base aus
    // veraendert nix: darum const int*
    void print(const int* base, int nmemb){
      while(nmemb--){
        printf("%d ", *base);
        ++base; // Zeiger aufs naechste Element schalten
      }
    }
    
    int main(void){
      int arr[5];
      puts("5 ints bitte:");
      int read = input(arr, 5);
      printf("%d ints eingeben: ", read);
      print(arr, read);
    }
    

    Das ich nicht per [] auf die Elemente zugreife ist Geschmacksache, Du kannst input() und print() leicht dahingehend ändern.



  • Danke Furble. 🙂
    Ich werde dann mal mein bestes geben und mich durchbeißen.


Log in to reply