A
A
Написал программу, правда вся реализация в функции main(). Все работает. Хочу перенести теперь все в отдельные функции. У меня получается в функции работа с двойным указателем, а с ними у меня сложновато. Вобщем, когда добавляю элементы, например в начало, последний добавленный элемент выводится нормально, а вместо остальных элементов ерунда. Посмотрите пожалуйста что не так. Пишу в среде BC31
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <malloc.h>
#include <string.h>
#define N 10
void AddToDeck(int **mas, int *kol, int value, int f)
{
if (f==1) //добавление в начало
{
printf("\n Enter value to add in deck: ");
scanf("%d",&value);
if ((*kol)==0)
{
*mas=(int *)malloc( (*kol)*(sizeof(int)) );
*(mas[0])=value;
(*kol)++;
}
else
{
int *temp,i=0;
temp=(int *) malloc( (*kol)*(sizeof(int)) );
while(i<(*kol))
{
temp[i]=*(mas[i]);
i++;
}
free(mas);
++(*kol);
*mas=(int *)malloc( (*kol)*(sizeof(int)) );
i=1;
while(i<(*kol))
{
*(mas[i])=temp[i-1];
i++;
}
free(temp);
*(mas[0])=value;
}
}
if (f==2) //добавление в конец
{
printf("\n Enter value to add in deck: ");
scanf("%d",&value);
if ((*kol)==0)
{
*mas=(int *)malloc( (*kol)*(sizeof(int)) );
*(mas[0])=value;
(*kol)++;
}
else
{
int *temp,i=0;
temp=(int *)malloc( (*kol)*(sizeof(int)) );
while(i<(*kol))
{
temp[i]=*(mas[i]);
i++;
}
free(mas);
++(*kol);
*mas=(int *)malloc( (*kol)*(sizeof(int)) );
i=0;
while(i<(*kol)-1)
{
*(mas[i])=temp[i];
i++;
}
free(temp);
*(mas[((*kol)-1)])=value;
}
}
}
/*void PrintDeck(int *mas, int kol)
{
int i=0;
while(i<kol)
{
printf(" %d ", mas[i]);
i++;
}
} */
int main()
{ clrscr();
int *mas, kol, choose, value;//, *startptr, *endptr, *endptr;
kol=0;//start=0;//=end=0;
for(;;)
{
printf("\n1.Dobavlenie elemena\n2.Delete n\n3.Vivod deck\n4.Exit\n:");
scanf("%d",&choose);
switch(choose)
{
case 1:
{
clrscr();
int f;
printf("\n 1.Dobavlenie elemena v nachalo\n 2.Dobavlenie elemena v konec\n:");
scanf("%d",&f);
AddToDeck(&mas,&kol,value,f);
printf("\n kol = %d",kol);
break;
}
case 2:
{
clrscr();
int f;
if (kol==0)
{
printf("\n Deck is empty!");
}
else
{
printf("\n 1.Delete elemen iz nachala\n 2.Delete elemen iz konca\n:");
scanf("%d",&f);
if (f==1)
{
int *temp,i=1;
temp=(int *)malloc( (kol-1)*(sizeof(int)) );
while(i<(kol))
{
temp[i-1]=mas[i];
i++;
}
free(mas);
--(kol);
mas=(int *)malloc( (kol)*(sizeof(int)) );
//mas=(int *)realloc( mas,(kol)*(sizeof(int)) );
i=0;
while(i<(kol))
{
mas[i]=temp[i];
i++;
}
free(temp);
}
if (f==2)
{
int *temp,i=0;
temp=(int *)malloc( (kol-1)*(sizeof(int)) );
while(i<(kol-1))
{
temp[i]=mas[i];
i++;
}
free(mas);
--(kol);
mas=(int *)malloc( (kol)*(sizeof(int)) );
//mas=(int *)realloc( mas,(kol)*(sizeof(int)) );
i=0;
while(i<(kol))
{
mas[i]=temp[i];
i++;
}
free(temp);
}
}
break;
}
case 3:
{
if (kol==0)
{
printf("\n Deck is empty!");
}
else
{
int i=0;
while(i<kol)
{
printf(" %d ", mas[i]);
i++;
}
}
//vivod_stack(mas,n,start);
break;
}
case 4:return 0;
}
}
}