Jestem świeżakiem który ma do zrobienia program wczytujący dane z pliku i później dodawać kontakty usuwać wyświetlać etc. Problem w tym że jak wczytuje plik to bez pierwszego kontaktu, ostatni wczytuje i w kolejnej linii
Plik prosta_lista.csv wypluwa jakieś dziwne znaki
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
struct kontakt
{
char* imie;
char* nazwisko;
char* numer;
char* grupa;
};
struct element
{
struct kontakt* dane;
struct element* nastepny;
struct element* poprzedni;
};
struct kontakt* stworzKontakt(char* imie, char* nazwisko, char* numer, char* grupa)
{
struct kontakt* k = malloc(sizeof(struct kontakt));
k->imie = imie; //microsoft learn kazal uzyc malloc.h ale nei dziala
k->nazwisko = nazwisko;
k->numer = numer;
k->grupa = grupa;
return k;
}
struct kontakt* odczyt(struct element* gora)
{
FILE* plik = fopen("prosta_lista.csv", "r");
if (plik != NULL)
{
char tab[100];
while (fgets(tab, 100, plik) != NULL)
{
char* imie = malloc(sizeof(char) * 20);
char* nazwisko = malloc(sizeof(char) * 20);
char* numer = malloc(sizeof(char) * 20);
char* grupa = malloc(sizeof(char) * 20);
fscanf(plik, " %[^;] ; %[^;] ; %[^;] ; %s", imie, nazwisko, numer, grupa);
struct kontakt* k = stworzKontakt(imie, nazwisko, numer, grupa);
printf("%s ", imie);
printf("%s ", nazwisko);
printf("%s ", numer);
printf("%s\n\n", grupa);
}
fclose(plik);
}
else
{
printf("Blad");
};
}
void menu(int* m)
{
printf("\nMenu:\n");
printf("\n1. Dodawanie\n");
printf("\n2. Odczytywanie od konca\n");
printf("\n3. Czyszczenie danych\n");
printf("\n4. Koniec\n");
printf("\nWybierz od 1 do 4\n");
while (1)
{
if (!scanf("%d", m))
{
while ('\n' != getchar());
printf("\nNie ma takiego punktu: \n");
printf("\nPrzenies sie do: \n");
}
else return;
}
}
void dodaj(struct element** gora, int liczba)
{
struct element* nowy = malloc(sizeof(struct element));
nowy->dane = liczba;
nowy->poprzedni = *gora;
nowy->nastepny = NULL;
if (*gora != NULL)
(*gora)->nastepny = nowy;
*gora = nowy;
};
void wyswietlListe(struct element* gora)
{
int wybor = 0;
struct element* nowy = gora;
while (nowy != NULL)
{
printf("%d\n", nowy->dane);
nowy = nowy->poprzedni;
}
}
void wyszczyscStos(struct element** gora)
{
while (*gora != NULL)
{
struct element* nowy = (*gora)->poprzedni;
free(*gora);
*gora = nowy;
}
}
struct element* dodajPusty(struct kontakt* Kontakt)
{
struct element* temp = malloc(sizeof(struct element));
temp->poprzedni = NULL;
temp->dane = stworzKontakt(Kontakt->imie, Kontakt->nazwisko, Kontakt->numer, Kontakt->grupa);
temp->nastepny = NULL;
return temp;
}
void main()
{
struct kontakt* k = stworzKontakt("Imie", "Nazwisko", "Numer", "Grupa");
//ODCZYT DANYCH Z PLIKU
struct element* Gora = dodajPusty(k);
Gora = odczyt(Gora);
//struct element* gora = NULL;
int m = 0, dane = 0;
do
{
menu(&m);
switch (m)
{
case 1:
printf("\n \n");
break;
case 2:
printf("\nODCZYT DANYCH OD KONCA\n");
//wyswietlStos(gora);
break;
case 3:
//wyszczyscStos(&gora);
break;
case 4:
//wyszczyscStos(&gora);
return 0;
default:
break;
}
} while (m != 4);
return 0;
}
}