przełączniki i przekazywanie do funkcji

0

Witam mam problem z przełącznikami, program działa bez nich, ale nie mam pojęcia jak przekazać je do funkcji ponieważ cały czas jest jakiś błąd.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define MAX_SLOWO 20										// maksymalna długość słowa w tekście


typedef struct Element {
	char slowo[MAX_SLOWO];									//tablica przechowująca słowo
	struct Element*next;									//wskaźnik na kolejny element w liście
}Slowo;




Slowo* utworz_liste(char *nazwa_pliku)
{
	Slowo* pocz = NULL;
	Slowo *tmp = NULL, *tmp2 = NULL;
	FILE *plik = fopen(nazwa_pliku, "r");					//otwieranie pliku

	while (!feof(plik))										//pętla wykonująca się dopóki nie dojdzie do końca pliku
	{

		if (tmp == NULL) 
		{

			tmp = (Slowo*)malloc(sizeof(Slowo));			//zarezerowanie pamięci dla słowa
			fscanf(plik, "%s", tmp->slowo);				//zapis słowa do listy
			tmp->next = NULL;
			pocz = tmp;

		}
		else 
		{


			while (tmp->next != NULL)
				tmp = tmp->next;
			tmp2 = (Slowo*)malloc(sizeof(Slowo));
			fscanf(plik, "%s", tmp2->slowo);
			tmp2->next = NULL;
			tmp->next = tmp2;
			tmp = tmp->next;
		}
	}


	fclose(plik);
	return pocz;
}

void zapisz_pal(char tekst[MAX_SLOWO], char * nazwa_pliku2) //funkcja zapisująca w pliku słowa, które są palindromami
{
	FILE*plik = fopen(nazwa_pliku2, "at");
	fprintf(plik, "%s\n", tekst);
	fclose(plik);

}

void ispalindrome(Slowo * glowa, char * nazwa_pliku2)	//funkcja sprawdzająca czy dane słowo jest palindromem
{
	int i = 0;
	int y;
	Slowo*tmp = glowa;
	
	while (tmp) 
	{
		char slowo[MAX_SLOWO];							
		char slowo_do[MAX_SLOWO];						//słowo pierwotne np. abc
		char slowo_od[MAX_SLOWO];						//słowo odwrócone np. abc -> cba

		strcpy(slowo, tmp->slowo);						//funkcja kopiuje slowo do zmiennej pomocniczej
		
		y = strlen(tmp->slowo);							//zmienna przechowująca ilość liter w słowie 
		if (slowo[y - 1] == ',' || slowo[y - 1] == '.') //sprawdzam czy za słowem znajduje się przecinek lub kropka
		{
			slowo[y-1] = '\0';							//jeśli występuje przecinek lub kropka to zamiast znaku wstawiam koniec słowa 
			y -= 1;										//a długość słowa zmniejszam o 1
		}

		for (i = 0; i<y; i++) 
		{
			
			slowo_do[i] = tolower(slowo[i]);			//przepisuję słowo do tablicy zamieniając wszystkie litery na małe
			slowo_od[(y - 1) - i] = tolower(slowo[i]);	//przepisuję słowo do tablicy w odwrotnej kolejności 
		}
		
		if (strncmp(slowo_od, slowo_do, y) == 0)		//sprawdzam czy słowo jest równe słowu odwrotnemu
		{ 
			zapisz_pal(slowo, nazwa_pliku2);			// jeśli tak to wypisuję słowo do pliku
		}
		tmp = tmp->next;
	

	}
	
}

int main(int argc, char* argv[])
{
	char nazwa_pliku[20] = "plik.txt"; //domyślny plik, jeśli nie ma możesz dorobić ifa po pętli
	char nazwa_pliku2[20] = "plik2.txt";

	for (int i = 1; i < argc; i++)
	{
		if ((i + 1) == argc) //warunek gdy ktoś zrobił na końcu w aparametrach -i -o
		{
			printf("Podano nieprawidlowe parametry.\n Prawidlowa skladnia to: -i plik_wejsciowy -o plik_wyjsciowy.");
			return;
		}
		if (strcmp(argv[i], "-i") == 0)
		{
			strcpy(nazwa_pliku, argv[i + 1]);
			i++;
		}

		if (strcmp(argv[i], "-o") == 0)
		{
			strcpy(nazwa_pliku2, argv[i + 1]);
			i++;
		}
	}

			Slowo* glowa = NULL;
			glowa = utworz_liste(nazwa_pliku);
			ispalindrome(glowa, nazwa_pliku2);
		return 0;
	
}
0

a może dostaniemy trochę więcej informacje? np gdzie wywala, czy się kompiluje itd

0

man 3 getopt ?

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