Abbruch bei Speichern in Array



  • Hallo ich habe (hoffentlich) ein eher simples Problem.

    wie speicher ich daten in ein "leeres" Array.
    Ich habe Das openbook von Galileo Computing als Quelle, doch leider sind da nur Beispiele von Arrays, welche im VOrfeld mit einer bestimmten Größe belegt sind.

    Also Hier mal zum Code:

    deklaration des Arrays:

    int xarray[]= {0};
    

    (da bin ich mir nicht sicher ob man das so macht??)

    und zum befüllen des Arrays:

    for (i=0;i<n;i++){
    
    		zaehler = i+1;
    
    		do{
    		printf("\nBitte geben Sie den %d. Wert ein: ", zaehler);
    		scanf ("%d", &xarray[i]);
    		}while (xarray[i]<0);
    	}
    

    so und bei der eingabe des lerten array-wertes springt das Programm raus.

    weiß jemand was ich falsch gemacht habe?



  • Zwei Möglichkeiten:
    1. wenn du weisst wie viele eingaben du machen willst dann kannst du das array gleich initialisieren. (was für mich mit dem n so aussieht)

    // 20 werte einlesen
    int x[20];
    

    2. du liest weiter bis du was über malloc findest.



  • gast0815 schrieb:

    wie speicher ich daten in ein "leeres" Array.
    ...

    int xarray[]= {0};
    

    leere arrays gibt's nicht. das da ist ein array bestehend aus nur einem element 'int', das mit 0 initialisiert wird. arrays können auch nicht 'wachsen'. guck' dir mal malloc/realloc usw. an.
    🙂



  • okay.

    ich wollte eigentlich das der benutzer vorher eingibt wie viele zahlen wer eingeben will (berechung eines harmonischen mittels)

    und dann soll das array entsprechend der n-stellen befüllt werden.

    kann ich nicht nahc der eingabe von n

    do{
    		printf("Bitte n eingeben: ");
    		scanf ("%d", &n);
    	}while (n<1);
    

    einfach das aray auf die n stellen initialisieren?

    vllt mit

    xarray[n];
    


  • sollte gehen, wenn dein compiler C90 fähig ist.
    🙂



  • das heißt?



  • also ich habe das mal mit einen festen array wert ausprobiert.

    aller dings springt das programm nach eingabe des letzten array-betrages raus.

    #include <stdio.h>
    #include <conio.h>
    
    void main (void){
    
    	int n = 0;
    	int i = 0;
    	int xarray[100];
    	int zaehler = 0;
    	int summe = 0;
    
    	do{
    		printf("Bitte n eingeben (1 bis 100): ");
    		scanf ("%d", &n);
    	}while (n<1 || n>100);
    
    	for (i=0;i<n;i++){
    
    		zaehler = i+1;
    
    		do{
    		printf("\nBitte geben Sie den %d. Wert ein: ", zaehler);
    		scanf ("%d", xarray[i]);
    		}while (xarray[i]<0);
    	}
    
    	for (i=0;i<n;i++){
    
    		summe = summe + (1/xarray[i]);
    	}
    
    	summe = n/summe;
    
    	printf("\nHarm. Mittel = %d",summe);
    
    	getch();
    
    }
    


  • C99...

    Das heisst, dass der Compiler den Sprachstandard C99 (oder länger ISO/IEC 9899:1999) versteht.

    Die Anforderung "ich möchte dass der Benutzer entscheidet wieviele" ist übrigens eine ganz klassische Einstiegsaufgabe wenn man erstmals in Kontakt mit dynamischem Speicher kommt 😃



  • 🙂 gut erkannt.

    Das Nächste Kapitel sind Zeiger. das Hatte ich aber noch nicht also muss diese aufgabe ja auch irgendwie ohne das ganze gehen. damit habe ich auch noch garkeine erfahrungen.



  • ach so und wegen dem Compiler ich nutze MS VS 2005



  • ach so habe noch was geändert:

    do{
    		printf("\nBitte geben Sie den %d. Wert ein: ", zaehler);
    		scanf ("%d", &xarray[i]);
    		}while (xarray[i]<0);
    

    naja aber ich erhalte beim letzten wert nach n "Integer division by zero"

    kann es sein das beim speichern aufs array irgendwas nicht ganz passt?



  • Hast Du irgendwo eine 0 eingegeben als Wert? Dann ist "Division durch Null" völlig normal...



  • gast0815 schrieb:

    ach so und wegen dem Compiler ich nutze MS VS 2005

    ja, schade. der ist nicht C99-fähig. musste malloc nehmen oder wechseln.
    --> http://www.christian-heffner.de/index.php?page=download
    ..........................
    ..........................
    ..........................
    ..........................
    ..........................
    ..........................
    ..........................
    ..........................
    ..........................



  • so ich habe mal einwenig gelesen und das problem mit dem array mit malloc gelöst.

    hier mal mein code:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    void main (void){
    
    	int i = 0;
    	int zaehler = 0;
    	double summe = 0.0;	
    	int *xarray;
        int n = 0;
    
    	do{
    		printf("Bitte n eingeben : ");
    		scanf("%d", &n);	
       }while (n<1);
    
       xarray = (int *)malloc(n*sizeof(int));
    
    	for (i=0;i<n;i++){
    
    		zaehler = i+1;
    
    		do{
    			printf("\nBitte geben Sie den [%d]. Wert ein: ", zaehler);
    			scanf ("%d", &xarray[i]);
    		}while (xarray[i]<0);
    	}
    
    	for (i=0;i<n;i++){
    
    		summe = summe + (1 / xarray[i]);
    	}
    
    	summe = n/summe;
    
    	printf("\nHarm. Mittel = %lf",summe);
    
    	getch();
    
    }
    

    allerdings ist irgendwo ein fehler bei der berechnung mit der summe

    wenn ich das programm ausführe erhalte ich folgendes:

    Bitte n eingeben : 3

    Bitte geben Sie den [1]. Wert ein: 12

    Bitte geben Sie den [2]. Wert ein: 34

    Bitte geben Sie den [3]. Wert ein: 45

    Harm. Mittel = 1.#INF00

    der wert ist mir seltsam. sieht jemand den fehler?


Anmelden zum Antworten