[C] struktura i użycie jej w funkcji

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Lolu9
Piegowaty Guziec
Piegowaty Guziec
Posty: 6
Rejestracja: 09 mar 2010, 15:47
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

[C] struktura i użycie jej w funkcji

Post autor: Lolu9 »

Witam.

Jestem początkującym programistą i prosze pomoc w takim problemie. Jak wywołać strukturę w funkcji? Szukałem w google i nic nie moge znaleźć. Mam poczatek programu i chce zadeklerować funkcję, jednak kompilator wywala mi błąd w linijce w której jest deklaracja funkcji:

Kod: Zaznacz cały

bazadanychstruktury.c:14: error: expected ?)? before ?pole?
KOD PROGRAMU

Kod: Zaznacz cały

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

struct rekord
{
	char marka[15];
	char model[15];
	int rocznik;
	int cena;
	int przebieg;
	char wlasciciel[20];
};

short int dodaj_rekord(rekord pole);
cb1986ster
Sędziwy Jeż
Sędziwy Jeż
Posty: 66
Rejestracja: 10 cze 2008, 20:59
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: Inne
Architektura: x86

Odp: [C] struktura i użycie jej w funkcji

Post autor: cb1986ster »

Zmień:

Kod: Zaznacz cały

short int dodaj_rekord(rekord pole);
na:

Kod: Zaznacz cały

short int dodaj_rekord(struct rekord pole);
Każdy młody masochista
instaluje \/\/indows \/ista!
Awatar użytkownika
mario_7
Administrator
Administrator
Posty: 8655
Rejestracja: 30 sie 2006, 13:11
Płeć: Mężczyzna
Wersja Ubuntu: 20.04
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: [C] struktura i użycie jej w funkcji

Post autor: mario_7 »

Ewentualnie zadeklaruj typ danych (typedef) na bazie tej struktury, aby nie dodawać później wszędzie słówka struct.
Lolu9
Piegowaty Guziec
Piegowaty Guziec
Posty: 6
Rejestracja: 09 mar 2010, 15:47
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: [C] struktura i użycie jej w funkcji

Post autor: Lolu9 »

Dzięki serdeczne! :)

EDIT:
Zmagam sie z moim programem i mam kolejny problem. Dlaczego gdy podaje jakąś wartość typu int podczas proszenia o rok i potem chce zeby mi wyswietlił tą wartość, to program pokazuje cos w stylu -1634820193? Prosze o pomoc.

Kod: Zaznacz cały

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

struct rekord
{
	char marka[15][500];
	char model[15][500];
	int rocznik[15][500];
	int cena[15][500];
	int przebieg[15][500];
	char wlasciciel[15][500];
};

short int dodaj_rekord(struct rekord *pole, int *n);

int main()
{
	struct rekord pole;
	int lwierszy=0;
	
	printf(" \033[2J"); //czyszczenie ekranu
	printf("\t\t\t\t>> MENU <<");
	printf("\n\n1.Dodaj | 2.Edytuj | 3.Usun | 4.Sortuj | 5.Wyswietl | 6.Usun baze | 0.Wyjscie\n");
	
	char a;
	do
	{
		printf("\nCo chcesz zrobic: ");
		scanf("%s",&a);
	
		switch(a)
		{
			case '1':
				dodaj_rekord(&pole,&lwierszy);
			break;
			
			case '0':
				printf("\nKoncze program...\n");
			break;
	
			default:
				printf("\nWybierz wlasciwy numer z MENU.\n");
			break;
		}
	}
	while (a!='0');
		
return 0;
}

short int dodaj_rekord(struct rekord *pole, int *n)
{	
	printf("\n\tDodaj pola w rekordzie: \n\n");
	
		printf("przed %d\n",*n);
		
		printf("Podaj marke:          | ");
		scanf("%s",(*pole).marka[*n]);
		
		printf("Podaj model:          | ");
		scanf("%s",(*pole).model[*n]);
		
		printf("Podaj rok produkcji:  | ");
		scanf("%d",(*pole).rocznik[*n]);

                //sprawdzanie
                printf("rok: %d\n",(*pole).rocznik[*n]);
		printf("model: %s\n",(*pole).model[*n]);
		
	(*n)++;
	
	printf("po %d\n",*n);
	return 0;
}
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [C] struktura i użycie jej w funkcji

Post autor: beluosus »

Podpowiedź kompilatora raczej czytelna:

Kod: Zaznacz cały

warning: format '%d' expects type 'int', but argument 2 has type 'int *'
Dajesz wskaźnik do inta, a powinna być wartość inta:

Kod: Zaznacz cały

printf("rok: %d\n",*(*pole).rocznik[*n]);
Ponadto w C nie ma komentarzy rozpoczynających się od //, są tylko między /* i */. Zgodnie z ISO C90 deklaracje zmiennych umieszcza się na początku bloku, przed jakimkolwiek kodem.
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
Lolu9
Piegowaty Guziec
Piegowaty Guziec
Posty: 6
Rejestracja: 09 mar 2010, 15:47
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: [C] struktura i użycie jej w funkcji

Post autor: Lolu9 »

Myślałem nad tymi wskaźnikami, ale nie wpadłem na pomysł, że to trzeba dać * przed całą nazwą zmiennej strukturalnej. Dziękuje.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 9 gości