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.