• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Prosiłbym o pomoc w przypadku tego kodu, czy dobrze zdefiniowałem tablice ?

Object Storage Arubacloud
0 głosów
193 wizyt
pytanie zadane 31 października 2022 w C i C++ przez jks777 Nowicjusz (120 p.)

Prosiłbym o pomoc z tym kodem, a konkretnie chcę to zrobić tak żeby gościu sobie wpisywał liczby do tablicy, potem mógł sizeof albo zmienną c odczytać ilość indeksów a potem wyswietlić całość. Natomiast w ponizszych programie przerywa wpisywanie po 5 liczbach i nie wiem za bardzo o co chodzi ;/ Byłbym bardzo wdzięczny za wskazówki

#include <stdio.h>

int main()
{
	int a,b,c,d,n,rozmiar;
	int tab[rozmiar];
	n = 100000;
	printf("Podaj liczby ciagu, natomiast jeśli bedziesz chcial zakonczyc ciag wpisz 00: \n");
	for(b=0;b<n;b++)
	{
		scanf("%d", &tab[b]);
			if(tab[b]==00)
		{
			break;
		}
	
	}
	d = sizeof(tab[rozmiar]);
	printf("Ilosc elemntow tablicy wynosi %d", d);
	
	for(b=0;b<d;b++)
	{
		printf("%d", tab[b]);
	}
	

	
	return 0;

 

1 odpowiedź

+1 głos
odpowiedź 31 października 2022 przez j23 Mędrzec (194,920 p.)
edycja 31 października 2022 przez j23
int ..., rozmiar;
int tab[rozmiar];

Chyba zapomniałeś rozmiar przypisać jakąś wartość, bo teraz tablica ma przypadkową wielkość.

d = sizeof(tab[rozmiar]);

Jeśli już, to d = sizeof(tab) / sizeof(int);, ale to wyświetli całą tablicę jak leci. Skoro b po wykonaniu pierwszej pętli będzie zawierać ilość wczytanych liczb, użyj tej wartości w pętli wyświetlającej.

komentarz 31 października 2022 przez jks777 Nowicjusz (120 p.)
hmmm teraz to zmienia postać rzeczy, ale rozmiar tablicy w jaki sposób mogę określić ? Skoro chce wpisywać liczby z konsoli a następnie mieć ilosc indeksów, chyba, że tak nie można i muszę wprowadzić ilosc elementów wcześniej a dopiero potem zapisywać liczby poszczególnym indeksom.
komentarz 31 października 2022 przez j23 Mędrzec (194,920 p.)

Jeśli to ma być w C, to użyj funkcji realloc:

int *tab = NULL;
int v, rozmiar = 0;

while(scanf("%d", &v) == 1 && v != 0) {
    tab = realloc(tab, sizeof(int) * (rozmiar + 1));
    tab[rozmiar] = v;
    ++rozmiar;
}

rozmiar będzie zawierać ilość liczb podanych przez użytkownika.

komentarz 31 października 2022 przez jks777 Nowicjusz (120 p.)
edycja 31 października 2022 przez Arkadiusz Waluk

Dziękuję :) W sumie zrobiłem to sam po twoich uwagach i rozkminiłem, że jak tab[rozmiar] w tym rozmiar przyjmuje wartosci losowe to w sumie ograniczymy to po pętli, gdzie wpiszemy liczby do tabeli. tab[rozmiar] = tab[b] i w sumie ładnie wypisuje wszystko :)

Napisałem to tak:, ale spróbuję jeszcze twoją wersje :)

#include <stdio.h>

int main()
{
    int a,b,c,d,n,rozmiar;
    int tab[rozmiar];
    n = 100000;
    printf("Podaj liczby ciagu, natomiast jeśli bedziesz chcial zakonczyc ciag wpisz 00: \n");
    for(b=0;b<n;b++)
    {
        scanf("%d", &tab[b]);
            if(tab[b]==00)
        {
            break;
        }
    }
    printf(" Podales %d elementow do tablicy.\n", b);
    d = b;
    tab[rozmiar] = tab[b];
    for(b=0;b<d;b++)
    {
        printf("%d\n", tab[b]);
    }
    
    
    

    

    
    return 0;
}
komentarz 31 października 2022 przez Oscar Nałogowiec (29,290 p.)
Sizeof zwraca wielkość obiektu (znaną w trakcie kompilacji) w bajtach, a nie liczbę elementów tablicy.
komentarz 31 października 2022 przez j23 Mędrzec (194,920 p.)
edycja 31 października 2022 przez j23

Napisałem to tak:,

I błąd nieokreślonego rozmiaru tablicy pozostał. Zrozum jedną rzecz, że jak deklarujesz tablice:

int tab[rozmiar];

to zmienna rozmiar musi mieć ustawioną wartość, by kompilator/program wiedział, jak duża powinna być ta tablica. Skoro pierwsza pętla kręci się n razy, to wypadałoby stworzyć tablicę n-elementową.

komentarz 31 października 2022 przez j23 Mędrzec (194,920 p.)

@Oscar, słuszna uwaga, poprawione.

komentarz 1 listopada 2022 przez jks777 Nowicjusz (120 p.)
No sprawdziłem, racja totalna po twojej stronie ;/ Dzięki za pomoc

Podobne pytania

0 głosów
1 odpowiedź 180 wizyt
0 głosów
1 odpowiedź 579 wizyt
0 głosów
1 odpowiedź 273 wizyt

92,565 zapytań

141,418 odpowiedzi

319,602 komentarzy

61,951 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...