C, problem med pekare, konstigt problem!
Har skrivit ett program som ska fungera som spelet Yatzy, ungefär i alla fall. Man ska kunna kasta tärningarna 3 gånger samt få ett resultat på vad man har. (Endast Yatzy, Stege, Kåk). Har skapat en funktion som heter int *throwDice() som har i uppgift att kasta tärningarna och sedan ta upp information om vilka som ska sparas etc. men i regel så skickar den bara tillbaka en adress till en array av de 5 slutgiltiga tärningsvärdena.
showResult(int *t2) ska få med sig en int *t2. Denna skall ha adressen till arrayen av tärningarna. Detta fungerar skitbra tills det att jag ska använda showResult. Får inte min pekare att skriva ut tärningstalen inuti showResult men det fungerar skitbra precis innan jag anropar den. Förstår inte varför :S Har ni tid så vore det snällt om ni tog er en titt! Problemet är alltså inte själva resultatet, utan jag förstår inte varför jag inte får en korrekt utskrift på det stället jag markerat med //HÄR FUNGERAR DET INTE
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int *throwDice();
void showResult(int *t2);
int main()
{
int *ptr1,i;
ptr1=throwDice(); //får adress till arrayen!
for(i=0;i<5;i++) //går skitbra att skriva ut array här!
{
printf("%d", ptr1[i]);
}
showResult(ptr1); //men inte i denna funktionen! :S varför inte??
return 0;
}
int *throwDice()
{
char svar[100],svar2[100], result;
int i,
j,
check,
turn=0,
t[5],
*ptr;
srand((unsigned int)time(NULL));
for( i = 0; i < 5; i++ )
{
t[i]=(rand()%6)+1;
printf("Taerning nr. %d :%d\n", (i+1),t[i]);
}
while(turn!=2) //kollar efter vilka man vill spara
{
printf("Vilka vill du spara?");
gets(svar);
j=0;
for(i=0;i<strlen(svar);i++) // tar bort alla mellanslag om så finns
{
if((svar[i]!=' '))
{
svar2[j]=svar[i];
svar2[j+1]='\0';
j++;
}
}
for(j=1;j<6;j++) //kastar om tärningar om man inte vill spara
{
check=0;
for(i=0;i<strlen(svar2);i++)
{
if(j==((int)(svar2[i]-'0')))
{
check=1;
}
}
if(check==0)
{
t[(j-1)]=(rand()%6)+1;
}
}
for( i = 0; i < 5; i++ )
{
printf("Taerning nr. %d :%d\n", (i+1),t[i]);
}
turn++;
}
ptr=t;
return ptr; //skickar iväg adress till arrayen!
}
void showResult(int *t2)
{
int i,
j,
temp,
isYatzy,
isStraight,
isFullHouse;
for(i=0;i<5;i++)
{
if(t2[i+1]<t2[i])
{
temp=t2[i];
t2[i]=t2[i+1];
t2[i+1]=temp;
i=-1;
}
}
// HÄR FUNGERAR DET INTE!!! av nån anledning som jag inte kommer på!
for(i=0;i<5;i++) //försöker skriva ut array men går ej, får massa konstiga värden!
{
printf("\n%d", t2[i]);
}
isStraight=1;
for(i=1;i<5;i++) // kolla efter stege
{
if(t2[i-1]!=t2[i]-1)
isStraight=0;
}
isYatzy=1;
for(i=0;i<1;i++) // kolla efter yatzy
{
for(j=1;j<5;j++)
{
if(t2[i]!=t2[j])
isYatzy=0;
}
}
isFullHouse=0;
if(t2[0]==t2[1] && t2[1]==t2[2] && t2[3]==t2[4] && t2[2]!=t2[3]) //kolla efter kåk
isFullHouse=1;
if(t2[2]==t2[3] && t2[3]==t2[4] && t2[0]==t2[1] && t2[1]!= t2[2])
isFullHouse=1;
if(isStraight==1)
printf("Du har stege!");
if(isYatzy==1)
printf("Du har Yatzy!");
if(isFullHouse==1)
printf("Du har Kaak!");
}