Funkcja zwracająca tablicę

0

Witam, wie może któryś z forumowiczów dlaczego ta funkcja nie zwraca tablicy tylko jakieś krzaczki?

char* B128toBin(BigUnsigned x) 
{
    char tablica[127];
    int i;

    for(i=0;i<126;i++)
    {
        int k= (x%2).toInt();
        tablica[126-i]='0'+k;
        x=x/2;
    }

    tablica[127]=0;
    return tablica;
}

i ewentualnie jak rozszerzyć tą funkcję aby robiła reprezentację binarną o zadanej długości, a nie statecznej jak tu czyli 128b?

0

static char tablica[127];

0

Rzeczywiście działa tylko zamiast 128b ciągu mam 127bitów coś jest gubione - gdzie?

0

W tych wierszach gubisz:

  1. char tablica[127];
  2. for(i=0;i<126;i++)
  3. tablica[126-i]='0'+k;
  4. tablica[127]=0;
0
char* B128toBin(BigUnsigned x)
{
    static char tablica[128];
    int i;

    for(i=0;i<128;i++)
    {
        int k= (x%2).toInt();
        tablica[127-i]='0'+k;
        x=x/2;
    }

    return tablica;
}

Tak powinno być dobrze i i tak nie działa...

0

Może zacznij od prostych rzeczy, to na razie cię przerasta.

char *B128toBin(BigUnsigned x)
  {
   static char tablica[129]={0};
   for(int i=0;i<128;++i,x/=2) tablica[127-i]='0'+(x%2).toInt();
   return tablica;
  } 
0

Witam, pisze w tym temacie gdyż nie chce zakładać nowego a potrzebuje napisać funkcję, która będzie wykonywała się podczas działania programu:

Funkcja ma na celu pobranie od użytkownika 5 liter i wpisać do tablicy a następnie tą tablice musi zwrócić, tak abym mógł z niej później korzystać w celu różnych operacji na niej. Na przykład po to aby funkcja pobrała od 3 użytkowników po 5 liter do różnych tablic i abym później te tablice mógł ze sobą porównać. Na razie udało mi się napisać coś takiego ale za bardzo to nie działa. Będę wdzięczny za jakąkolwiek podpowiedź.

#include <stdio.h>
#include <time.h>
char *gracz2(int rozmiar);

int main () {

int j,rozmiar=5;

char *seria2=gracz2(rozmiar); //wskaznik na tablice elementow gracza2

for(j=0;j<4;j++)
printf("%c\n",seria2++);

	return 0;
}

 char *gracz2(int rozmiar) {

	char *tablica_gracz2 = (char*)malloc(rozmiar *sizeof(char));
	char i;
	int j=0;
	int licznik=1;
	while((i = getchar())  && i!='.' && licznik <= 4) {

	*tablica_gracz2=i;
    licznik++;

	}
return tablica_gracz2;

 }


 
0
 
 char *gracz2(int rozmiar) {
 
    char *tablica_gracz2 = (char*)malloc((rozmiar+1) *sizeof(char));
    int licznik=0;
    while(licznik <= 3) {
 
    tablica_gracz2[licznik]=getchar();
    if(tablicza_gracz2[licznik]=='.') {licznik++; break; } //Jesli bez kropy ma byc tablica to usun licznik++
    licznik++;
 
    }
tablica_gracz2[licznik] = 0;
return tablica_gracz2;
 
 }

Nie sprawdzałem czy działa

0

Pozwoliłem sobie przerobić Twoją poprawkę do mojego kodu - zamienić na notację wskaźnikową w pętli while ale to niestety dalej nie działa

char *gracz2(int rozmiar) {
    char *tablica_gracz2 = (char*)malloc((rozmiar+1) *sizeof(char));
    int licznik=0;
    while(licznik <= 3)

        {

    *tablica_gracz2=getchar();

    if(*tablica_gracz2=='.')
        {
            licznik++;
            break;
        } //Jesli bez kropy ma byc tablica to usun licznik++
    tablica_gracz2++;
    licznik++;

        }

tablica_gracz2[licznik] = 0;
return tablica_gracz2;

 }
 
0

Nie pozwalaj sobie na poprawki dopóki się nie nauczysz programować.

#include <stdio.h>

char *read(char buf[],size_t size)
  {
   char format[10];
   sprintf(format,"%%%d[^.]s",size+1);
   scanf(format,buf);
   return buf;
  }

int main ()
  {
   char A[6],B[6];
   printf("%s\n",read(A,5)), // można od razu dać: scanf("%6d[^.]s",A);
   printf("%s\n",read(B,5)),
   return 0;
  }

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