Problem z wyświetleniem Enuma

0
#include <stdio.h>
#include <stdlib.h>
   
int main()
{
    enum dni_tyg{poniedzialek, wtorek, sroda, czwartek, piatek, sobota, niedziela};
    enum dni_tyg day;
    printf ("Podaj dzien tygodnia: \n ");
    scanf ("%d", day);
    switch (day)
    {  
        case poniedzialek:
            printf("Bedziemy grali w pilke nozna.");
            break;
        case wtorek:
            printf("Bedziemy grali w koszykowke.");
            break;
        case sroda:
            printf("Bedziemy grali w squasha.");
            break;
        case czwartek:
            printf("Bedziemy grali w ping-ponga.");
            break;
        case piatek:
            printf("Bedziemy grali w siatkowke.");
            break;
        case sobota:
            printf("Bedziemy odpoczywac.");
            break;
        case niedziela:
            printf("Bedziemy biegac.");
            break;
        default:
            printf("Podaj dzien tygodnia!");
    }
        return 0;
}

Cześć, powyższy kod źródłowy działa bardzo dziwnie, jakąkolwiek wartość bym nie podał niestety podaje zawsze wartość z pierwszego Case, nie wiem już o co zahaczyć.
Macie jakieś pomysły?

0

Jest gorzej, u mnie na przykład wygląda tak:

Podaj dzien tygodnia: 
 1
Segmentation fault

Czyli mas zgdzieś słynne UB. Chyba dlatego, że day próbujesz wczytać jako int, a to nie jest int...

1

A nie, brak ci & -- powinno być scanf ("%d", &day); -- aczkolwiek co do typu nadal mam jakieś wątpliwości...

1

Enumów nie można wczytywać bezpośrednio w taki sposób - IMHO najlepiej byłoby podejść tak:

int main()
{
    enum Weekdays { MONDAY = 1, TUESDAY, WEDNESDAY, ... };
    int weekday;

    printf ("Podaj dzien tygodnia: \n ");
    scanf ("%d", &weekday);

    switch (weekday) {
        case MONDAY:
            /* ... */
    }

Btw, pamiętaj o prawidłowym nazewnictwie :-)

2

Po prostu:
scanf ("%d", day); powinno mieć adres zmiennej day: scanf ("%d", &day);

1

No i poza tym, kompiluj z włączonymi ostrzeżeniami, u mnie gcc -Wall enum.c daje dla Twojej wersji:

enum.c: In function ‘main’:
enum.c:8:5: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘unsigned int’ [-Wformat=]
     scanf ("%d", day);
     ^
enum.c:8:5: warning: ‘day’ is used uninitialized in this function [-Wuninitialized]

A w mojej wersji (z dodanym jedynie &):

enum.c: In function ‘main’:
enum.c:8:5: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘enum dni_tyg *’ [-Wformat=]
     scanf ("%d", &day);
     ^
0

@Patryk27: Też zapomniałeś o &. :) Ale poza tym ta wersja kompiluje się bez ostrzeżeń...

0

Dziękuje wszystkim serdecznie za pomoc :)

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