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;
}