Błąd przy funkcji void z tablicą

2018-11-05 20:33
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])
    }
edytowany 3x, ostatnio: furious programming, 2018-11-05 20:45

Pozostało 580 znaków

2018-11-05 20:38
kq
0

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


Pozostało 580 znaków

2018-11-05 20:41
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
edytowany 2x, ostatnio: furious programming, 2018-11-05 20:43

Pozostało 580 znaków

2018-11-05 20:43
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.

edytowany 1x, ostatnio: john_klamka, 2018-11-05 20:56
mogłbyś rozwinąć? Bo jak patrzę to w wiekszości wątków tak deklaruje się fukcję void - Kamila Nowak 2018-11-05 20:50
dodałem edit, ale na posty odpowiadamy w postach, a nie w komentarzach - john_klamka 2018-11-05 20:56

Pozostało 580 znaków

2018-11-05 21:00
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])
    }
edytowany 1x, ostatnio: furious programming, 2018-11-05 22:18

Pozostało 580 znaków

2018-11-05 21:03
kq
1

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


Pozostało 580 znaków

2018-11-05 21:04
0

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

edytowany 1x, ostatnio: Kamila Nowak, 2018-11-05 21:04

Pozostało 580 znaków

2018-11-05 21:04
kq
0

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


Pozostało 580 znaków

2018-11-05 21:06
0

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

Pozostało 580 znaków

2018-11-05 21:07
kq
0

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


Pozostało 580 znaków

2018-11-05 21:08

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;
}

edytowany 6x, ostatnio: lion137, 2018-11-05 22:29
To jest C, są VLA. - kq 2018-11-05 21:09
Yhm, no tak , tak też można, mnie osobiście malloc bardziej przekonuje:) - lion137 2018-11-05 21:12
jak jyz uczysz alokowac, to ucz tez zwalniac! - kaczus 2018-11-05 21:52
Słuszna uwaga, EDIT:) - lion137 2018-11-05 22:26

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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