Problem ze zmiana danych w tablicy

0
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <stdio.h>
#include <cgi.h>

#define HTML_HEAD "<html>\n<head><title>Memory Game CGI</title></head>\n<body>"
#define HTML_FOOT "<hr>Marta Nowak</body></html>"
#define HTML_SUBMIT "<input type=submit value='Strzelaj'>"
s_cgi *cgi;

int my_itoa(int val, char* buf)
{
    const unsigned int radix = 10;

    char* p;
    unsigned int a;        //every digit
    int len;
    char* b;            //start of the digit char
    char temp;
    unsigned int u;

    p = buf;

    if (val < 0)
    {
        *p++ = '-';
        val = 0 - val;
    }
    u = (unsigned int)val;

    b = p;

    do
    {
        a = u % radix;
        u /= radix;

        *p++ = a + '0';

    } while (u > 0);

    len = (int)(p - buf);

    *p-- = 0;

    //swap
    do
    {
        temp = *p;
        *p = *b;
        *b = temp;
        --p;
        ++b;

    } while (b < p);

    return len;
}

void formularz(char* wyb1, char* wyb2, char plansza[], char* zakonczone) {
	printf("<form method='GET' action=''>WYBOR 1: <input type='text' size='110' name='wyb1' value='%s'></br>WYBOR 2: <input type='text' size='110' name='wyb2' value='%s'><input type='hidden' name='plansza' value='%s'><input type='hidden' name='zakonczone' value='%s'>", wyb1,wyb2,plansza,zakonczone);
	printf(HTML_SUBMIT);
	printf("</form>");
}
void formularz_wyp(char* wyb1, char* wyb2, char* plansza, char* zakonczone) {
	printf("<form method='GET' action=''>WYBOR 1: <input type='text' size='110' name='wyb1' value='%s'></br>WYBOR 2: <input type='text' size='110' name='wyb2' value='%s'><input type='hidden' name='plansza' value='%s'><input type='hidden' name='zakonczone' value='%s'>", wyb1,wyb2,plansza,zakonczone);
	printf(HTML_SUBMIT);
	printf("</form>");
}

int sprawdz_czy_puste(int num, int tablica[])
{
   if(tablica[num]==-1)
   return 1;
    else
    return 0;
}
int wypelnij_plansze(char* plan) // funkcja losuje nam obrazek i wstawia go do naszej tablicy z polami
{
}
void sprawdz_pare(int a, int b, int tablica[], int complete[])
{
    if(a>10 || b>10) return;
 		if(tablica[a-1]==tablica[b-1])
    			{complete[a]=1;
    			complete[b]=1;
    			}
    else return;
}
int main(void)
{
int plansza[10];
int complete[10];
cgi=cgiInit();
cgiHeader();
char* wybor1 = cgiGetValue(cgi,"wyb1");
char* wybor2 = cgiGetValue(cgi,"wyb2");
char* plan = cgiGetValue(cgi,"plansza");
char* zakonczone = cgiGetValue(cgi,"zakonczone");
char full[100]="\0";
char cyfra[3];

if(wybor1==NULL)
{
	wybor1="";
	int i;
	for(i=0; i<10; i++)
	{
	plansza[i]=-1;
	}
	
}
if(wybor2==NULL)
{
	wybor2="";
}
srand( time( NULL ) );
if(plan==NULL)
{
printf("PRZEPROWADZAM LOSOWANIE KART \n");
	plan="";
    int karty[]={1,1,2,2,3,3,4,4,5,5};
    int los=rand()%10;
    int ok=1;
    int i;
    for(i=0; i<10; i++)
    {
        ok=0;
        do
        {
        los=rand()%10;
        }while(sprawdz_czy_puste(los,plansza)!=1);
        plansza[los]=karty[i];
	
    }
    int x;
    for(x=0; x<10; x++)
    {
    my_itoa(plansza[x],cyfra);
    strcat(full,cyfra);
    if(x!=9) strcat(full,"-");
    }int j;
    printf("WYLOSOWALEM\n");
    for(j=0;j<10; j++)
    {        
printf("%d",plansza[j]);
printf("\n");
}
printf(HTML_HEAD);
formularz(wybor1,wybor2,full,zakonczone);
}
else
{
printf("DOSTALEM: %s\n",plan);
char delims[] = "-";
char *result = NULL;
result = strtok( plan, delims );
int k=0;
while( result != NULL ) {
    plansza[k]=atoi(result);
    result = strtok( NULL, delims );
}
int x;
for(x=0; x<10; x++)
{
my_itoa(plansza[x],cyfra);
strcat(full,cyfra);
if(x!=9) strcat(full,"-");
}
int j;    
for(j=0;j<10; j++)
{        
printf("%d",plansza[j]);
printf("\n");
}
    printf(HTML_HEAD);
    printf("TO ZAMIERZAM WYSLAC GETEM: %s",full);
    formularz(wybor1,wybor2,full,zakonczone);
}   
/*
if(wybor1!="" && wybor2!="")
{
 sprawdz_pare(atoi(wybor1), atoi(wybor2));
 printf("CHECKING");
}
int i;
for(i=0; i<10; i++)
{
  printf("%d: %d",i,complete[i]);
  printf("\n");
}
*/
    printf(HTML_FOOT);
    return 0;
}

Witam serdecznie, piszę taką o to grę w nieszczesnym Cgi, w czystym C i pojawia się pewien problem otóż za każdym razem aby zapamietac raz wylosowane dane musze je sobie przesłac postem czy tam Getem sparsowac stringa i powstawiac do tablicy i tutaj dzieje sie dziwna rzecz wynik poza petla

while( result != NULL ) {
    plansza[k]=atoi(result);

// TU JEST OK PLANSZA[k] zawiera odpowiednie dane
    result = strtok( NULL, delims );
}

int x;
for(x=0; x<10; x++)
{
my_itoa(plansza[x],cyfra); // TO TU JUŻ JEST ZLE DANYCH NIE MA ;(
strcat(full,cyfra);
if(x!=9) strcat(full,"-");
}

wartosci z tablicy plansza nagle cudownie znikaja i pozostaja smieci niezaincjowanej tablicy.... Co jest w czym problem ??

0

Zgaduję, że plansza ma w sobie "śmieci" dopiero od elementu plansza[1] ?

Nie zwiększasz indeksu:

while( result != NULL ) {
    plansza[k]=atoi(result);
    result = strtok( NULL, delims );
    k++;
} 

Zabrakło Ci k++.

0
resow123 napisał(a)
/* [SNIP] */

char cyfra[3];

/* [SNIP] */

result = strtok( plan, delims );
int k=0;
while( result != NULL ) {
    plansza[k]=atoi(result);
    result = strtok( NULL, delims );
}
int x;
for(x=0; x<10; x++)
{
my_itoa(plansza[x],cyfra);

/* [SNIP] itd... */

Droga Marto, świat jest naprawdę okrutnym miejscem. Egzystują w nim osobniki, które nie chcą podporządkowywać się ustalonym regułom. Bezgraniczne zaufanie jest błędem, za który często ponosimy wielkie koszta. Pisząc program w C, który pobiera dane od użytkowników, trzeba pamiętać o tych nonkonformistycznych osobnikach, które bardzo chętnie sprawdzą co się stanie, gdy jako liczbę prześlą coś, co nie zmieści się w twojej błyszczącej nowością, trójelementowej tablicy znaków... np. "18263", albo "-10". Traktuj userów jak złośliwe, szalone małpy tłukące klawiaturami o kamienie przy wpisywaniu danych wejściowych. Userom nie można nigdy ufać.

BTW, masz bajzel w kodzie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1