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

błąd kompilacji

Cloud VPS
0 głosów
401 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ź 241 wizyt
pytanie zadane 10 marca 2016 w JavaScript przez ormu16 Gaduła (4,980 p.)
0 głosów
3 odpowiedzi 776 wizyt
pytanie zadane 19 listopada 2015 w C i C++ przez RoXoR Początkujący (280 p.)
0 głosów
2 odpowiedzi 330 wizyt

93,485 zapytań

142,417 odpowiedzi

322,765 komentarzy

62,898 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

Kursy INF.02 i INF.03
...