Problem ze strukturami w C

0

mam taki kod:

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <conio.h>

main()
{
   int numer =0;
   int numer2 =0;
    struct plyta
    {
        char artysta[15];
        char tytul[25];
        int ilosc;
        float czas;
        float srczas;
    }
    plyta[numer];
    
    for(numer=0;numer<=3;numer++)
    {
        //wczytywanie danch
        printf("podaj nazwe artysty: \n");
        gets(plyta[numer].artysta);
        
        printf("podaj tytul albumu: \n");
        gets(plyta[numer].tytul);
         
        printf("podaj ilosc utworow: \n");
        scanf("%d", &plyta[numer].ilosc);
        
        printf("podaj czas trwania utworow: \n");
        scanf("%f", &plyta[numer].czas);
    
        plyta[numer].srczas = (plyta[numer].czas / plyta[numer].ilosc);
        
    }
    
    //wyswietlanie
    for(numer2 ==0; numer2<3; numer2++)
    {   
        printf("artysta: %s \n", plyta[numer2].artysta);
        printf("tytul: %s \n", plyta[numer2].tytul);
        printf("ilosc: %d \n", plyta[numer2].ilosc);
        printf("czas: %f \n", plyta[numer2].czas);
        printf("sredni czas to : %f \n", plyta[numer2].srczas);
    }
    printf("Wcisnij \"q\" aby zakonczyć program");
    getch();
    return 0;
    
}

Za pierwszym działaniem pętli for wszystko jest ok, ale kiedy pętla wykonuje sie następny raz, to juz ort! podac nazwy autora, bo ta linijka jest "przeskakiwana" i od razu prosi o nazwe albumu. Możecie pomóc mi sie z tym uporać??

0

Po linijce :
plyta[numer].srczas = (plyta[numer].czas / plyta[numer].ilosc);

daj linijke :
flush();

i juz powinno byc ok - programu praktycznie w ogole nie przegladalem, tylko na podstawie objawu wnioskuje .

0

niestety wywala jakis błąd
a bez tej linijki

plyta[numer].srczas = (plyta[numer].czas / plyta[numer].ilosc);
tez niedziała.
Pomocy bo potrzeba mi to do szkoły 8-0

0

ja myśle, że chodzi o ten fragment:

}plyta[numer];
for(numer=0;numer<=3;numer++)

zauważ że w zmiennej "numer" podczas wywołania plyta[numer]; (po deklaracji struktury) ma wartość 0

0

No troszke sie pomyliłem bo nie ten kod wkleilem:). tam powinno być plyta[3], ale nawet jak jest plyta[3] to mimo to tez przeskakuje artyste za drugim razem;(. POMOCY

0

W tym kodzie co wkleiles w drugiej petli masz tez porownanie numer2 == 0 zamiast podstawienia (chyba).

0

po co gets? z tym tylko problemy z synchronizacją... możesz zrobić
scanf("%s", (char *) )
powinno pomóc...
http://www.cplusplus.com/ref/cstdio/scanf.html

0

po co gets? z tym tylko problemy z synchronizacją... możesz zrobić
scanf("%s", (char *) )

A nie na odwrót ? :> gets jest proste, wręcz banalnie... Wciąga linie do char*. Potem to tylko kwestia jednej/dwóch linijek, żeby wyciągnąć z tego liczbe. Albo nawet fgets(bufor,bufor_dlugosc,stdin), w sumie jeszcze bezpiecznijesze. Nie trzeba flusha używać, jak przy scanf.

0

jesli do tej pory nie rozwiazales tego problemu to pod

plyta[numer].srczas = (plyta[numer].czas / plyta[numer].ilosc);

// dopisz
while(getchar() != '\n')
continue;

powinno działac(probowalem)

//radze pisac int main (void) a nie main() dla swientego spokoju
// w drugiej petli "for" zamiast numer2==0 powinno byc numer2=0
// moze pomyliles sie w pisaniu ale spraw

0

Tak teraz działa[jupi]. Wielkie dzięki [soczek]

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