Zadanie C - błąd nierozpoznany zewnętrzny symbol

0

Witam, mam problem ze znalezieniem błędów w kodzie. prosiłbym bardzo o pomoc. W załączniku jest treść zadania. Z góry dziękuję :)

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


int *wczytaj(int n)
{
	int *tab = NULL;
	int x, i;

	tab = (int*)malloc(n * sizeof(int));

	for (i = 0; i < n; i++)
	{
		while (scanf("%d", &x), x > 0);
		scanf("%d", tab + i);

	}
	
	return tab;
}

void drukuj(int *tab, int n, char zn)
{
	int i;

	if (zn == 'p')
	{
		for (i = 0; i < n; i++)
		{
			if (tab[i] % 2 == 0)
			{
				printf("%d", tab[i]);
			}

		}
	}
	else if (zn == 'np')
	{
		for (i = 0; i < n; i++)
		{
			if (tab[i] % 2 == 1)
			{
				pritnf("%d", tab + i);
			}
		}
	}
	else
	{
		for (i = 0; i < n; i++)
		{
			printf("%d", tab[i]);
		}
	}
}


int *utorz(int *tab, int n, int ktora, int *n1)
{
	int i;
	int *tab1 = NULL;


	if (ktora >= 1 && ktora < n)
	{
		for (i = 0; i < n; i += ktora)
		{
			tab1 = (int*)realloc(tab1, i * sizeof(int));
			tab[i] = tab1[i];
			n1++;
		}
	
	}
	else
	{
		for ( i = 0; i < n; i++)
		{
			tab[i] = tab1[i];
			n1++;
		}
	}
	return tab1;
}

int main()
{
	int n, ktora;
	char zn = '0';
	int *tab2 = NULL;

	
	printf("podaj wielkosc tablicy");
	while (scanf("%d[^\n]", &n), n > 0);

	wczytaj(n);

	printf("podaj co ktora liczbe wyswietlic");
	scanf("%d", &ktora);

	tab2 = utworz();

	printf("podaj znak parzystosci");
	scanf("%s", &zn);

	drukuj(tab2,n,zn);

	free(tab2);




}
0

Sama próba kompilacji pokaże kilka błędów. Ile tak znalazłeś? Wypisz je to podpowiemy inne.

0

Mam dwa ostrzerzenia:

  • C4013 niezidentyfikowany "utworz" przy założeniu że extern zwraca int
  • C4047 '=': (int*) różni się w poziomach operatorów od int

Dwa błędy:
-LNK2019 nierozpoznany zewnętrzny symbol _utworz przywołany w main
-LNK1120 liczba nierozpoznanych elementów zewnętrznych: 1

I bardzo bym prosił o poprawę kodu, tam gdzie jest nie tak. Nie jestem zbyt obcykany w C, a muszę go zdać..

1

Robisz tab2 = utworz(); a twoja funkcja nazywa się int *utorz.

0

Dzięki wielkie, już błędy znalezione, teraz widzę błąd w działaniu algorytmów. Będę nad tym teraz myślał.

0

Nie wiesz gdzie jest błąd? Napisz testy!

0
elwis napisał(a):

Nie wiesz gdzie jest błąd? Napisz testy!

C nie jest aż tak test-friendly jak języki wysokopoziomowe. Liczne UB mogą przejść nie wykryte "bo los tak chciał"

0

Tworzysz tablicę wewnątrz funkcji int *wczytaj(int n), którą zwracasz, jednak w funkcji main jej nie "łapiesz".

0
AnyKtokolwiek napisał(a):
elwis napisał(a):

Nie wiesz gdzie jest błąd? Napisz testy!

C nie jest aż tak test-friendly jak języki wysokopoziomowe. Liczne UB mogą przejść nie wykryte "bo los tak chciał"

Pierwsze słyszę. Tak naprawdę jest łatwiej bo masz funkcje i struktury, a nie obiekty.
A testy do kodu w C i tak pisałbym w C++ z gtest/gmock.

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