funktion und arry



  • kann eine funktion ein arry zurückgeben ?

    long feld(void)
    {
    	long zahlen[4],i,a;
    	printf("bitte vermutung eingebn");
    	scanf("%ld",&a);
    	for (i=0;i<4;i++)
    	{
    		zahlen[i]=a%10;
    		a=a/10;
    	}
    	return zahlen[];
    }
    

    mit andern worten wie bekomme ich zahlen[] zurück 🙂



  • ich würde es so machen, daß ich der Fkt schon einen Zeiger auf das array mitgeben würde und innerhalb der Fkt direkt auf dem Original arbeiten würde (caution: only imho)



  • Man kann keine Arrays zurückgeben, schon gar keine lokalen Arrays.



  • @bashar: true (habe schon ge-edited;-)



  • habe es nun ohne zurückgabe von array gemacht 🙂
    neben bei das prog is fertig (SCHANDE ÜBER MEIN HAUPT !!!! SCHLECHTER PROG STIEL ICH WEISS HABE ABER KEINE LUST MEHR UND WOLLTE ES FERTIG HABEN ...)

    /* habe hier das spiel Mastermind geschrieben
    man muss eine zahl erraten die 4 ställig ist, am ende wird ausgegben wieviele versuche man gebraucht hat ...
    */
    #include <stdio.h> 
    #include <time.h> 
    #include <stdlib.h> 
    
    long mind ( long ); 
    
    int main () 
    { 
    long a;
    char b;	
    srand(time(NULL)); 
    printf(" Das Spiel MOO! \n ############## \nFinde die 4 richtigen Zahlen\nSie haben die Wahl zwische 2 Schwierigkeitsgrade: \n (1) Die gesuchte Zahl Besteht aus vier verschiedenen Ziffern.\n (2) Es koennen 2 gleiche Ziffern oder mehrere enthalten sein.\n\n Ihre Wahl?"); 
    
    scanf("%ld",&a); 
    
    	do
    	{	
    		mind(a); 
    		do
    		{
    		printf("wollen sie nochmal spielen ? j/n");
    		scanf("%c",b);
    		if (b=='n')
    			return 0;
    		}
    		while (b!='j');
    
    	}
    	while (b=='j');
    return 0; 
    } 
    
    long mind (long a) 
    { 
    long  zahlen[4],uzahlen[4],i=0,b,c,bullen=0,vers=0,kuh;;
    
    	if (a==1 ||a==2)
    	{	if(a==1)// flupt nicht ... mh 
    		{
    			do
    			{
    				zahlen[i]=rand()%10; 
    				for (i=1;i<4;i++) 
    				{
    					zahlen[i]=rand()%10; 
    					while ( zahlen[i]==zahlen[i-1])
    					zahlen[i]=rand()%10; 
    
    				}
    			}
    			while(zahlen[0]!=zahlen[1]&&zahlen[0]!=zahlen[2]&&zahlen[0]!=zahlen[3]&&zahlen[1]!=zahlen[2]&&zahlen[1]!=zahlen[3]&&zahlen[2]!=zahlen[3]);
    
    				while (bullen<4)
    			{
    				bullen=0;
    				kuh=0;
    			printf("bitte vermutung eingeben");
    			scanf("%ld",&b);
    				for (i=0;i<4;i++)
    				{
    					uzahlen[i]=b%10;
    					b=b/10;
    				}
    				for (i=0;i<4;i++)
    				{	
    					for (	c=0;c<4;c++)
    					{	if(zahlen[i]==uzahlen[c])
    							bullen++;
    						if(bullen>(c))
    							uzahlen[c]=uzahlen[c]+11;						
    					}
    				}
    				for (i=0;i<4;i++)
    				{	for (	c=0;c<4;c++)
    					{	if(zahlen[i]==uzahlen[c]||zahlen[i+1]==uzahlen[c]||zahlen[i+2]==uzahlen[c]||zahlen[i+3]==uzahlen[c])
    							kuh++;
    						uzahlen[c]=uzahlen[c]+11;
    					}
    
    				}
    				vers++;
    				printf("bullen %ld\n",bullen);
    				printf("Kuehe %ld\n",kuh);
    
    			}	
    		printf("versuche :%ld\n",vers);
    		}
    		if(a==2)
    		{		for (i=0;i<4;i++) 
    					zahlen[i]=rand()%10; 
    			while (bullen<4)
    			{
    				bullen=0;
    				kuh=0;
    			printf("bitte vermutung eingeben");
    			scanf("%ld",&b);
    				for (i=0;i<4;i++)
    				{
    					uzahlen[i]=b%10;
    					b=b/10;
    				}
    				for (i=0;i<4;i++)
    				{	
    					for (	c=0;c<4;c++)
    					{	if(zahlen[i]==uzahlen[c])
    							bullen++;
    						if(bullen>(c))
    							uzahlen[c]=uzahlen[c]+11;						
    					}
    				}
    				for (i=0;i<4;i++)
    				{	for (	c=0;c<4;c++)
    					{	if(zahlen[i]==uzahlen[c]||zahlen[i+1]==uzahlen[c]||zahlen[i+2]==uzahlen[c]||zahlen[i+3]==uzahlen[c])
    							kuh++;
    						uzahlen[c]=uzahlen[c]+11;
    					}
    
    				}
    				vers++;
    				printf("bullen %ld\n",bullen);
    				printf("Kuehe %ld\n",kuh);
    
    			}		
    			printf("versuche :%ld\n",vers);
    		}
    	}
    	else
    		printf("Falsche eingabe !");
    	//for(i=0;i<4;i++) 
    	//	printf("\n %ld",zahlen[i]);//zum prüfen ob feld voll ...
    
    return 0; 
    }
    

    da is viel scheisse drin ... ich weiss aber wie gesagt wollte die aufgabe fertig habe und ich glaube das prog geht auch so wie es soll
    ps: wenn es nicht das macht was es soll bitte sagen
    THX für die hilfe



  • Eine Funktion kann über Umwege Arrays zurückgeben: (Structures)

    #include<conio.h>
    #include<stdio.h>
    #include<string.h>
    
    typedef struct
    {
    	char text[100];
    }string;
    
    string change(string a) //Tauscht alle Variablen um!
    {
    	string b=a;
    	int laenge=strlen(b.text);
    	char help;
    	for(int i=0;i<(laenge/2);i++)
    	{
    		help=b.text[i];
    		b.text[i]=b.text[laenge-i-1];
    		b.text[laenge-i-1]=help;
    	}
    	return(b);
    }
    
    void main()
    {
    	string a;
    	strcpy(a.text,"Das ist ein Test");
    
    	puts(a.text);
    	a=change(a);
    	puts(a.text);
    
    	getch();
    }
    


  • WudyCool schrieb:

    kann eine funktion ein arry zurückgeben ?

    long feld(void)
    {
    	long zahlen[4],i,a;
    	printf("bitte vermutung eingebn");
    	scanf("%ld",&a);
    	for (i=0;i<4;i++)
    	{
    		zahlen[i]=a%10;
    		a=a/10;
    	}
    	return zahlen[];
    }
    

    mit andern worten wie bekomme ich zahlen[] zurück 🙂

    So geht es nicht, weil wenn feld verlassen wird, dann ist *zahlen nicht mehr gültig. Du musst ein long* zahlen erstellen, der mit malloc alloziert wird und das zurückgeben.


Anmelden zum Antworten