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

błąd kompilacji

VPS Starter Arubacloud
0 głosów
246 wizyt
pytanie zadane 10 czerwca 2018 w C i C++ przez WhizzKid Początkujący (400 p.)
#include <stdio.h>
#include <stdlib.h>

struct DaneOsob_typowe
{
    size_t *nrAlbumu;
    char cImie[15];
    char cNazw[40];
    float fOceny[6];
};

struct ocena
{
    unsigned oc1: 3;
    unsigned oc2: 3;
    unsigned oc3: 3;
    unsigned oc4: 3;
    unsigned oc5: 3;
    unsigned oc6: 3;

};

struct DaneOsob_polaBitowe
{
    size_t nrAlbumu;
    char cImie[15];
    char cNazw[40];
    struct ocena bitOceny;
};

int main()
{
    int n;
    puts("Ile osob chcesz dodac?:\n");
    scanf("%d",&n);
    struct DaneOsob_typowe str[n];
    puts("Dane dla stuktury DaneOsob_typowe:\n" );
    for(int i=0; i<n; i++)
    {
        puts("Podaj nrAlbumu:\n");
        scanf("%zu",str[i].nrAlbumu);
        puts("Podaj imie:\n");
        scanf("%s",str[i].cImie);
        puts("Podaj nazwisko:\n");
        scanf("%s",str[i].cNazw);
        for(int j=0; j<6; j++)
        {
            puts("Podaj 1 ocene:\n");
            scanf("%f",str[j].fOceny);
        }
    }
}
return 0;


W ostatniej linijce wyświetla mi się błąd "expected unqualified-id before return" nie mam pojęcia co jest nie tak .. Za wszelkie uwagi będę wdzięczny.

1 odpowiedź

+1 głos
odpowiedź 10 czerwca 2018 przez Hiskiel Pasjonat (22,830 p.)
Return poza mainem.
komentarz 10 czerwca 2018 przez WhizzKid Początkujący (400 p.)

rzeczywiście ;) dzięki

mam jednak nowy kłopot, mianowicie po odpaleniu programu samoistnie wychodzi z pętli. Najczęściej pytając tylko o numer albumu, a następnie koncząc program mimo dlaszych instrukcji. Piszę że najczęsciej bo czasem zdarza sie że uda mi się wgrać dane 1 studenta, lecz potem znowu po wpisaniu numeru albumu kolejnego studenta program nie wiedzieć czemu kończy się.

tu jest kod:

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

struct DaneOsob_typowe
{
    size_t *nrAlbumu;
    char cImie[15];
    char cNazw[40];
    float fOceny[6];
};

struct ocena
{
    unsigned oc1: 3;
    unsigned oc2: 3;
    unsigned oc3: 3;
    unsigned oc4: 3;
    unsigned oc5: 3;
    unsigned oc6: 3;

};

struct DaneOsob_polaBitowe
{
    size_t nrAlbumu;
    char cImie[15];
    char cNazw[40];
    struct ocena bitOceny;
};

int main()
{
    int n;
    printf("Ile osob chcesz dodac?:");
    scanf("%d",&n);
    struct DaneOsob_typowe str[n];
    printf("Dane dla stuktury DaneOsob_typowe:\n" );
    for(int i=1; i<=n; i++)
    {
        printf("Podaj nrAlbumu %d studenta:",i);
        scanf("%zu",str[i].nrAlbumu);
        printf("Podaj imie %d studenta:",i);
        scanf("%s",str[i].cImie);
        printf("Podaj nazwisko %d studenta:",i);
        scanf("%s",str[i].cNazw);
        for(int j=1; j<=6; j++)
        {
            printf("Podaj %d ocene:",j);
            scanf("%f",str[j].fOceny);
        }
    }
return 0;
}

 

komentarz 10 czerwca 2018 przez WhizzKid Początkujący (400 p.)
?...?
komentarz 11 czerwca 2018 przez Hiskiel Pasjonat (22,830 p.)
edycja 11 czerwca 2018 przez Hiskiel
Witaj. Przyznam szczerze, że zapomniałem o tym i przepraszam Cię za to. I tak nie mogłem Ci wczoraj odpowiedzieć, ponieważ analiza kodu, nawet prostego wieczorem jest dla mnie katorgą. Jeszcze dzisiaj postaram się Ci odpowiedzieć.
komentarz 11 czerwca 2018 przez Eryk Andrzejewski Mędrzec (164,260 p.)
struct DaneOsob_typowe str[n];

Wiem, że C wspiera VLA, ale myślę, że lepiej z tego nie korzystać. Możesz chociażby zaalokować pamięć przy użyciu funkcji malloc.

Nie wiem czy to jest problemem (choć na pewno jakimś jest), ale nieprawidłowo poruszasz się po tablicy - tablice indeksujemy od zera, a nie od jedynki. Ty wyjeżdżasz w ten sposób poza zakres tablicy. Jeżeli tablica ma N elementów, to ostatni element będzie miał indeks N - 1

komentarz 11 czerwca 2018 przez WhizzKid Początkujący (400 p.)
struct DaneOsob_typowe *str;
    str=(struct DaneOsob_typowe*)malloc(n*sizeof(struct DaneOsob_typowe));

zaalokowana :)

Jednak dalej mam problem zprzedwczesnym końcem programu.

scanf("%zu",str[i].nrAlbumu);

i wydaje mi się że tu leży problem w głownej mierze. Z racji tego format %zu oczekuje argumentu typu size_t* a ma size_t... Nie wiem jak to zmienić żeby było dobrze

komentarz 11 czerwca 2018 przez Hiskiel Pasjonat (22,830 p.)

Podobne pytania

0 głosów
1 odpowiedź 173 wizyt
pytanie zadane 10 marca 2016 w JavaScript przez ormu16 Gaduła (4,980 p.)
0 głosów
3 odpowiedzi 324 wizyt
pytanie zadane 19 listopada 2015 w C i C++ przez RoXoR Początkujący (280 p.)
0 głosów
2 odpowiedzi 193 wizyt

92,454 zapytań

141,262 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...