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

Enum w C ... jak używać?

42 Warsaw Coding Academy
0 głosów
989 wizyt
pytanie zadane 28 grudnia 2019 w C i C++ przez Hubertius Bywalec (2,970 p.)
edycja 28 grudnia 2019 przez Hubertius

Cześć

Muszę wykorzystać enum przy wyborze przez użytkownika sortowania tabeli w sposób rosnący i malejący.

Sam projekt składa się oprócz main.c jeszcze z header-a i pliku .c opisującego pewne funkcje z danego header-a.

Tak więc zadeklarowałem enum-a w headerze:

#ifndef sort
#define sort
int bubble_sort_asc(int tab[], int size);
int bubble_sort_desc(int tab[], int size);
int bubble_sort(int tab[], int size, enum direction dir);

#endif
enum direction {ASCENDING=1,DESCENDING=2};

, a tutaj kod z pliku main.c

#include <stdio.h>
#include <stdlib.h>
#include "vector_utils.h"
#include  "sort.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) 
{
	
    int stop_value=0;
    int vec1[50]={0};
    int size=50;
    int newsize;
    int temp=0;
    //printf("Twoj pierwszy dzialajacy projekt.\n Wprowadz dane swojej tablicy\n UWAGA! Pamietaj, ze tablica zakonczy wczytywanie danych przy wprowadzeniu zera!\n");
    printf("Podaj wektor:\n");
    newsize=read_vector(vec1,size,stop_value);
    if(newsize==-2)
    {
        printf("Incorrect input");
        return 1;
    }
    if(newsize==-1 && vec1[0]==0)
    {
        printf("Not enough data available");
        return 3;
    }
    printf("Podaj kierunek:");
    enum direction wybor;
    if(scanf("%d",&wybor)!=1)
    {
    	printf("Incorrect input");
        return 1;	
    }
    if(wybor==ASCENDING)
    {
    	
	}
	else if(wybor==DESCENDING)
	{
		
	}
	else
	{
		printf("Incorrect input data");
		return 2;
	}
	bubble_sort(vec1,newsize,direction wybor);
    //display_vector(vec1,newsize);
    return 0;
}

Niestety, przy próbie wywołania funkcji  pojawia mi się komunikat o tym, ze enum nie zostało zadeklarowane. Co zrobiłem źle? Wcześniej np. Incorrect input data wyświetla się poprawnie dla złych danych.   :/

EDIT

Obecnie przy takim zastosowaniu dla header-a:

#ifndef sort
#define sort
typedef enum{
	ASCENDING=1,DESCENDING=2
}direction;
#endif
int bubble_sort_asc(int tab[], int size);
int bubble_sort_desc(int tab[], int size);
int bubble_sort(int tab[], int size, enum direction dir);

W mian-ie wyświetla mi się komunikat:"storage size of wybor isn't know". Bardzo proszę o pomoc, to ważne bym mógł popchnąć to zadanie do przodu.   :/

 

2 odpowiedzi

0 głosów
odpowiedź 28 grudnia 2019 przez pcalus Użytkownik (920 p.)
wybrane 28 grudnia 2019 przez Hubertius
 
Najlepsza

Usuń direction z wywołania:

bubble_sort(vec1,newsize,direction wybor);

 

Możesz użyć takiej konstrukcji:

typedef enum direction {ASCENDING=1,DESCENDING=2} direction;

Dzięki temu możesz uzywać direction jako typu, zamiast enum direction.

komentarz 28 grudnia 2019 przez Hubertius Bywalec (2,970 p.)
@pcalus Bardzo dziękuję. Miałbym jeszcze jedno pytanie. Jaki łańcuch formatujący jest poprawny dla enum?
0 głosów
odpowiedź 28 grudnia 2019 przez mokrowski Mędrzec (158,440 p.)

Po pierwsze nagłówek. Pierwotnie:

#ifndef sort
#define sort
int bubble_sort_asc(int tab[], int size);
int bubble_sort_desc(int tab[], int size);
int bubble_sort(int tab[], int size, enum direction dir);
 
#endif
enum direction {ASCENDING=1,DESCENDING=2};

Pierwszy błąd to nazywanie makra strażniczego tak jak funkcja. Tak więc poprawka:

#ifndef SORT_H_
#define SORT_H_
int bubble_sort_asc(int tab[], int size);
int bubble_sort_desc(int tab[], int size);
int bubble_sort(int tab[], int size, enum direction dir);
 
#endif /* SORT_H_ */
enum direction {ASCENDING=1,DESCENDING=2};

Drugi błąd to brak definicji typu enum direction w ramach ciała nagłówka. Tak więc poprawka:

#ifndef SORT_H_
#define SORT_H_

enum direction {ASCENDING=1,DESCENDING=2};

int bubble_sort_asc(int tab[], int size);
int bubble_sort_desc(int tab[], int size);
int bubble_sort(int tab[], int size, enum direction dir);
 
#endif /* SORT_H_ */

To na początek. W linii 47 main(), masz błąd składni. Powinno być:

bubble_sort(vec1, newsize, wybor);

 

komentarz 28 grudnia 2019 przez Hubertius Bywalec (2,970 p.)
Tak, dosłownie paręnaście minut temu to ogarnąłem i zadanie zostało mi zaliczone. Jednak na analizie statycznej pokazuje mi błąd z łańcuchem formatującym w scanf. Jaki jest poprawny dla enum?
1
komentarz 28 grudnia 2019 przez mokrowski Mędrzec (158,440 p.)
Oczywiście że "%u". I tu pojawia się inny problem (w prawdziwych aplikacjach). Możesz równie dobrze wprowadzić 20 i scanf(...) to przyjmie. No ale takie przypadki sprawdza się w logice programu co nie jest potrzebne w sprawdzarkach typu SPOJ czy podobnych.

Podobne pytania

0 głosów
2 odpowiedzi 1,487 wizyt
pytanie zadane 29 sierpnia 2016 w Inne języki przez niezalogowany
0 głosów
2 odpowiedzi 2,337 wizyt
0 głosów
1 odpowiedź 709 wizyt
pytanie zadane 23 grudnia 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)

93,381 zapytań

142,380 odpowiedzi

322,535 komentarzy

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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...