The code might be a little messy, but that's because I am just learning the basics.
In my program, one of the variables, namely listkl[i].imie is losing its value after it exits the void function in which it is given said value. The other variables that get their values in said function are working normally.
I'll also add that I am required to use gets function.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct klient // definicja strultury "klient"
{
int nr_transakcji; //element struktury
char *imie;
char *nazwisko;
int rok_urodzenia;
char *produkt;
float koszt;
};
void nowy_klient(struct klient listkl[], int i)
{
char im[100];
char ko[100];
gets(ko);
listkl[i].nr_transakcji = i+1;
gets(im);
listkl[i].imie = im;
gets(ko);
listkl[i].koszt = atof(ko);
printf("\n imie %s", listkl[i].imie);
}
void drukuj_liste(struct klient listkl[], int i)
{
for(int i = 0; i < 17; i++)
{
if(listkl[i].imie == "brak")
{
printf("");
}
else
{
printf("\n imie %s", listkl[i].imie);
printf("\n nr transakcji %d", listkl[i].nr_transakcji);
printf("\n koszt %5.2f zl\n", listkl[i].koszt);
}
}
}
int main()
{
struct klient listkl[17];
int co_chcesz;
int warunek_1 = 0;
int i;
for(i = 0; i < 17; i++)
{
listkl[i].imie = "brak";
}
while(warunek_1 == 0)
{
printf("Co chcesz zrobic?\n1 - Dodaj klienta\n2 - Drukuj klientow\n3 - Zakoncz\n");
scanf("%d", &co_chcesz);
switch(co_chcesz)
{
case 1:
printf("Podaj numer klienta, pod ktorym chcesz dodac nowego klienta (1-17)\n");
scanf("%d", &i);
i = i - 1;
if(listkl[i].imie == "brak")
{
nowy_klient(listkl, i);
}
else
{
int decyzja;
printf("Ten numer jest zajety. Nadpisac?\n1 - Tak\n2- Nie\n");
scanf("%d", &decyzja);
if(decyzja == 1)
{
nowy_klient(&listkl, i);
}
else
{
break;
}
}
break;
case 2:
printf("\n imie %s", listkl[0].imie);
drukuj_liste(listkl, i);
break;
case 3:
warunek_1 = 1;
break;
}
}
return 0;
}
Edit: I tried playing around with comments from you guys, for which I am really thankful btw, and I managed to get it to work almost right, as much as I can given the tools I have to use. The value stays in place now, the new problem is that instead of just the thing I type, it also has 3 random signs in front of it. Let's say I input "Dada", I get "Éi│Dada" instead.
New code:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
struct klient // definicja strultury "klient"
{
int nr_transakcji; //element struktury
char *imie;
char *nazwisko;
int rok_urodzenia;
char *produkt;
float koszt;
};
void nowy_klient(struct klient listkl[], int i)
{
char im[100];
char ko[100];
gets(ko);
listkl[i].nr_transakcji = i+1;
gets(im);
listkl[i].imie = malloc(sizeof(char));
strcat (listkl[i].imie, im);
gets(ko);
listkl[i].koszt = atof(ko);
printf("\n imie %s", listkl[i].imie);
}
void drukuj_liste(struct klient listkl[], int i)
{
for(int i = 0; i < 17; i++)
{
if(listkl[i].imie == "brak")
{
printf("");
}
else
{
printf("\n imie %s", listkl[i].imie);
printf("\n nr transakcji %d", listkl[i].nr_transakcji);
printf("\n koszt %5.2f zl\n", listkl[i].koszt);
}
}
}
int main()
{
struct klient listkl[17];
int co_chcesz;
int warunek_1 = 0;
int i;
for(i = 0; i < 17; i++)
{
listkl[i].imie = "brak";
}
while(warunek_1 == 0)
{
printf("Co chcesz zrobic?\n1 - Dodaj klienta\n2 - Drukuj klientow\n3 - Zakoncz\n");
scanf("%d", &co_chcesz);
switch(co_chcesz)
{
case 1:
printf("Podaj numer klienta, pod ktorym chcesz dodac nowego klienta (1-17)\n");
scanf("%d", &i);
i = i - 1;
if(listkl[i].imie == "brak")
{
nowy_klient(listkl, i);
}
else
{
int decyzja;
printf("Ten numer jest zajety. Nadpisac?\n1 - Tak\n2- Nie\n");
scanf("%d", &decyzja);
if(decyzja == 1)
{
nowy_klient(listkl, i);
}
else
{
break;
}
}
break;
case 2:
drukuj_liste(listkl, i);
break;
case 3:
warunek_1 = 1;
break;
}
}
return 0;
}
Finally, thanks to you, mostly Oka, I managed to get this trainwreck working properly... or at least give me the output I need, while the code itself is zombie made of many different ideas.
Final code:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
struct klient // definicja strultury "klient"
{
int nr_transakcji; //element struktury
char *imie;
char *nazwisko;
int rok_urodzenia;
char *produkt;
float koszt;
};
void nowy_klient(struct klient listkl[], int i)
{
char im[100];
char ko[100];
gets(ko);
listkl[i].nr_transakcji = i+1;
gets(im);
listkl[i].imie = malloc(sizeof(128));
strcpy (listkl[i].imie, im);
gets(ko);
listkl[i].koszt = atof(ko);
}
void drukuj_liste(struct klient listkl[], int i)
{
for(int i = 0; i < 17; i++)
{
if(listkl[i].imie == "brak")
{
printf("");
}
else
{
printf("\n imie %s", listkl[i].imie);
printf("\n nr transakcji %d", listkl[i].nr_transakcji);
printf("\n koszt %5.2f zl\n", listkl[i].koszt);
}
}
}
int main()
{
struct klient listkl[17];
int co_chcesz;
int warunek_1 = 0;
int i;
for(i = 0; i < 17; i++)
{
listkl[i].imie = "brak";
}
while(warunek_1 == 0)
{
printf("Co chcesz zrobic?\n1 - Dodaj klienta\n2 - Drukuj klientow\n3 - Zakoncz\n");
scanf("%d", &co_chcesz);
switch(co_chcesz)
{
case 1:
printf("Podaj numer klienta, pod ktorym chcesz dodac nowego klienta (1-17)\n");
scanf("%d", &i);
i = i - 1;
if(listkl[i].imie == "brak")
{
nowy_klient(listkl, i);
}
else
{
int decyzja;
printf("Ten numer jest zajety. Nadpisac?\n1 - Tak\n2- Nie\n");
scanf("%d", &decyzja);
if(decyzja == 1)
{
nowy_klient(listkl, i);
}
else
{
break;
}
}
break;
case 2:
drukuj_liste(listkl, i);
break;
case 3:
warunek_1 = 1;
break;
}
}
return 0;
}