Błąd przy funkcji void z tablicą

0

Oto fragment programu, który ma za zadanie pobrać liczbe elementow tablicy, potem ja wypelnic, a na koncu wyswietlic, jednak w linijkach void wypelnij i void wyswietl pojawia sie taki:

[Error] variable or field 'wypelnij' declared void

Nie rozumiem, czy w nawiasie trzeba coś dodać?

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
	int n;
	printf("wprowadz wartosci do tablicy\n");
	printf("podaj rozmiar tablicy!: ");
	scanf("%d",&n);
	int tab[n];
	
	void wypelnij(tab[n])
	{
		for(int i=0;i<n ;i++)
		scanf("%d",&tab[n])
	}
	void wyswietl(tab[n])
	{
		for(i=0;i<n;i++)
		printf("%d",tab[n])
	}
0

W C nie wolno definiować funkcji wewnątrz innych funkcji. Zdefiniuj je poza main()

0

tak, mam rozumieć?

#include <stdio.h>
#include <stdlib.h>

	void wypelnij(tab[n])
	{
		for(int i=0;i<n ;i++)
		scanf("%d",&tab[n])
	}
	void wyswietl(tab[n])
	{
		for(i=0;i<n;i++)
		printf("%d",tab[n])
	}

int main(void)
{
	int n;
       int tab[n];
	printf("wprowadz wartosci do tablicy\n");
	printf("podaj rozmiar tablicy!: ");
	scanf("%d",&n);
wypelnij(tab[n]);
	wyswietl(tab[n]);
	return 0;
}

dalej ten sam error, a nawet więcej:

[Error] variable or field 'wypelnij' declared void
[Error] 'tab' was not declared in this scope
[Error] 'n' was not declared in this scope
[Error] variable or field 'wyswietl' declared void
2

Brakuje typów argumentów Twoich funkcji. Dotyczaj o deklarowaniu funkcji.

edit:
ogólna postać definicji funkcji wygląda tak:

typ_zwracany nazwa_funkcji(typ_argumentu nazwa_argumentu)
{
   ciało_funkcji
}

W Twoim kodzie brakuje typów argumentów.

0

Dodałam typy, w ten sposób?

int void wypelnij(int tab[n])
	{
		for(int i=0;i<n ;i++)
		scanf("%d",&tab[n])
	}
int void wyswietl(int tab[n])
	{
		
		for(int i=0;i<n;i++)
		printf("%d",tab[n])
	}
1

n jako wielkość tablicy w parametrze nie ma sensu. Powinno być osobnym parametrem.

0

chcę aby rozmiar n tablicy był pobrany z klawiatury, dlatego taki zapis.

0

Jeśli jednak chcesz aby się kompilowało proponowałbym zapis z dwoma parametrami.

0

W jaki sposób mam to zapisać, jeśli mozesz wytłumaczyć?

0

Przekazywanie parametrów do funkcji jest w każdym kursie. void foo(int arr[], int size)

2

Podstawowa rzecz, rozmiar tablicy (jak ją Próbujesz zaalokować, na stosie) musi być znany podczas kompilacji, jeśli nie jest, to tablica musi być zaalokowana dynamicznie na stercie, przy użyciu malloc. Przestudiuj ten kod (jakoś tam nie za ładnie, ale drukuje:)):

#include <stdio.h>
#include <stdlib.h>
 
    void wypelnij(int tab [], int n) // n też trzeba przekazać
    {
        for(int i=0;i<n ;i++)
        scanf("%d",&tab[i]);
    }
    void wyswietl(int tab [], int n)
    {
        printf("[");
        for(int i=0;i<n;i++)
        printf(" %d",tab[i]);
        printf("]");
    }
 
int main(void)
{
    int n;
    printf("wprowadz wartosci do tablicy\n");
    printf("podaj rozmiar tablicy!: ");
    scanf("%d",&n);
    int * tab = (int *) malloc(sizeof(int));
    wypelnij(tab, n);
    wyswietl(tab, n);
    free(tab);
    tab = NULL;
    return 0;
}
3

No i jeszcze mała niedoróbka w funkcjach:

        printf("[");
        for(int i=0;i<n;i++)
        printf(" %d",tab[n]); //<---- O TU
        printf("]");

Będzie n-razy wypisywać nie wiadomo co, ponieważ mamy czytanie poza rozmiar tablicu, a to UB :)
Trzeba by zmienić na:

        printf("[");
        for(int i=0;i<n;i++)
        printf(" %d",tab[i]);
        printf("]");

Analogicznie wczytywanie.

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