Witam serdecznie, nie rozumiem dlaczego ta pętla wykonuje mi się 2 razy to znaczy za każdym razem wypisuje wszystkie dane dwukrotnie przed pobraniem w scanfem
while (i < size)
{
printf("podaj jaką opcje wybierasz \n");
printf("a --- utwórz strukture pod wybranym indeksem \n");
printf("p --- wypisz wszystkie dane z tablicy \n");
printf("c --- utworz potomkow na bazie osoby \n");
scanf("%c", &w);
switch (w)
{
case 'a':
break;
case 'c':
zrobPotomka(&osoby, size-1);
break;
case 'p':
break;
}
i++;
}
fuck, nie dałem linka. Mea culpa. https://dsp.krzaq.cc/post/445/jak-zadawac-pytania-na-forum/ Generalnie dałeś linka do całego większego kodu, bez informacji jak zreprodukować niechciane zachowanie, a nie każdemu chce się zgadywać. Poza tym, zminimalizuj błąd, aby mieć pewność, ze znajduje się tam gdzie myślisz -
kq2018-12-06 16:31
Nie, nie wygląda. W czym Ty piszesz w ogóle, że Ci tego sam edytor nie pilnuje? -
Althorion2018-12-06 16:33
Kwestia gustu. Trochę mi głupio Emaksa polecać, z którego sam korzystam, więc może Visual Studio Code? Formatowanie kodu to nie jest pierdoła, złe formatowanie skutecznie ukrywa bugi przed programistą (vide Apple i ich słynny problem ze switchem). -
Althorion2018-12-06 16:43
Ja preferuję Qt Creatora, jest CLion (darmowy dla studentów), nawet VS ostatnio jest spoko. Do małych projektów VS Code czy Sublime Text też są ok. Ale dotychczas myślałem, że Code Blocks też jest spoko - i szczerze mówiąc nadal uważam, że problem jest między krzesłem a monitorem... -
kq2018-12-06 16:43
@kq: nie no wydaje mi się że stół mam dobry a tak serio to faktycznie moja wina z tym formatowaniem. A tak wracając do problemu :P Wiecie jak go naprawić bo normalnie piszę w Javie i tam naprawdę przykładam się do formatowania kodu robiąc większe rzeczy a z tym prostym szajsem się tyle męczę że jestem już zły i chce to naprawdę zrobić stąd ten pośpiech -
The Best2018-12-06 16:46
Co do błędu: MCVE. Nie każdy z nas ma tyle chęci i czasu co @MasterBLB - jak masz problem to staraj się wyekstrahować go z całości programu. -
kq2018-12-06 16:54
Bracie @The Best, nie daj się namówić kq na używanie tego szatańskiego narzędzia zdegenerowanych dżawowców :] -
MasterBLB2018-12-06 16:55
scanf() zostawia po pytaniu o ilość osób utworzonych na dzień dobry śmieć w postaci znaku nowej linii, co powoduje, że drugi scanf w pętli while z marszu go czyta, i nie wstrzymuje wykonywania pętli. Oto dowód na prawdziwość teorii:
int main()
{
struct Person** osoby;
int size,i=0;
int idx,idxArray[size];
// printf("podaj ile chcesz stworzyc osob");
// scanf("%d", &size);
// osoby = (struct Person*) malloc(size * sizeof(struct Person));
//wykomentowałem pierwszego scanf-a, dałem zahardkodowany size na 2 i voila - nie ma wyświetlania 2x
char w = '0';
size = 2;
while (i < size)
{
printf("podaj jaką opcje wybierasz \n");
printf("a --- utwórz strukture pod wybranym indeksem \n");
printf("p --- wypisz wszystkie dane z tablicy \n");
printf("c --- utworz potomkow na bazie osoby \n");
scanf("%c", &w);
switch (w)
{
case 'a':
break;
case 'c':
zrobPotomka(&osoby, size-1);
break;
case 'p':
break;
}
i++;
}
return 0;
}
to teraz góglujesz sobie Bracie @The Best "how to remove \n left by scanf", i dopisujesz sobie rozwiązanie co ci znajdzie do swojego programu.
No dobra, kolejna podpowiedź - olej scanf(), zamiast niego uźywaj getchar() + poszukiwanie '\n' którym wyjmiesz ze stdin pozostawiony tam znak nowej linii.
zrobiłem to ze scnafem, dzięki twojej podpowiedzi po prostu dałem spacje przed " %s" i działa -
The Best2018-12-06 21:34
teraz mam problem przy tworzeniu drugiego usera czy wypisywaniu danych, przy tworzeniu wysypuje się a przy wypisywaniu podaje dziwne dane ,tylko dobre nazwisko jest https://onlinegdb.com/Hy0LKZwk4
Pora zatem zaprzyjaźnić się z debuggerem. Wysypywanie się programu to dość mocny dowód na źle ustawiony wskaźnik. -
MasterBLB2018-12-06 21:56
właśnie próbuje coś wskurać z debuggerem ale no cholera nie wiem co mogę jeszcze zmienić w programie -
The Best2018-12-06 22:06
Na razie nie zmieniaj nic - wyizoluj powtarzalną ścieżkę która doprowadza do zawieszania się programu. Dopiero wtedy jak odkryjesz, co jest przyczyną zawieszenia będziesz wiedział, co należy zrobić. -
MasterBLB2018-12-06 22:24
dziwne że po zrobieniu drugiego obiektu, obiekt się tworzy dobry i potem dopiero po wykonaniu funkcji to się wysypuje -
The Best2018-12-06 22:37
widzę jeden problem persons[idx]->age = age; przypisuje mi kosmiczny wiek -
The Best2018-12-06 22:40