• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ błąd przy dodawaniu elementu na koniec listy

Object Storage Arubacloud
0 głosów
316 wizyt
pytanie zadane 29 kwietnia 2017 w C i C++ przez Deloryn Bywalec (2,060 p.)

Napisałem taki kod. Nie rozumiem, dlaczego program po wczytaniu danych (funkcja N) mi się zawiesza. Wszystko jest okej, aż podam ostatnie dane w funkcji N i wtedy wykonuje się funkcja dodaj(first, nowy).

#include <stdio.h>

struct pracownik{
	char nazwisko[30];
	int pensja;
	int procent_premii;
	pracownik * next;
};



void dodaj(pracownik * first, pracownik * nowy)
{
	if(first)
	{
		pracownik * temp = new pracownik;
		temp = first;
		while(temp->next)
		{
			temp=temp->next;
		}
		temp->next = nowy;
	}
	else first = nowy;
}

void N(pracownik * first)
{
	pracownik * nowy = new pracownik;
	
	printf("----DODAJ PRACOWNIKA----\nNazwisko: ");
	scanf("%s",&nowy->nazwisko);
	printf("\nPensja: ");
	scanf("%d",&nowy->pensja);
	printf("\nProcent (bez znaku procent): ");
	scanf("%d",&nowy->procent_premii);
	
	dodaj(first, nowy);
}


int main()
{
	pracownik * first;
	char wybor;
	int ile_pracownikow = 0;
	
	poczatek:
	printf("MENU:\n----\nN - nowy pracownik\nP - nowa wartosc pensji dla istn. pracownika\nR - nowa wartosc procentu\nW - wyplata\nK - koniec programu\n");
	scanf("%c",&wybor);
	switch(wybor)
	{
		default:
			printf("Nie ma takiej opcji.\n\n");
			goto poczatek;
		case 'N':
			if(ile_pracownikow<10)
			{
				N(first);
				ile_pracownikow++;
			}
			else
			{
				printf("\nPodano juz 10 pracownikow, czyli maksimum\n");
			}
			goto poczatek;
	}
	return 0;
}

W Internecie spotkałem się z przykładem struktury struktur i tam było dodawanie elementu do listy (pierwsza struktura - osoba, druga struktura - lista). Czy to konieczne? Czy nie można tego zrobić na pojedynczej strukturze? Dlaczego program się zawiesza?

komentarz 30 kwietnia 2017 przez niezalogowany
Nie jestem dobry w c++ ale wiem że goto jest niestabilne i niebezpieczne lepiej go nie używać

Może lepiej dodaj while z break zamiast goto i zamiast goto w switchu dać po prostu break

Co do zwieszanie nie jestem pewien czy to jest przez goto.

1 odpowiedź

0 głosów
odpowiedź 30 kwietnia 2017 przez Gankkah Użytkownik (720 p.)
Heh, chyba programujesz w C,

 

ale jeżeli programujesz w C++ to proponuję: " Przejdź na 'cout' oraz 'cin' ".

Podobne pytania

0 głosów
2 odpowiedzi 435 wizyt
pytanie zadane 6 stycznia 2018 w C i C++ przez Łukasz Michalski Użytkownik (560 p.)
0 głosów
1 odpowiedź 102 wizyt
0 głosów
1 odpowiedź 313 wizyt
pytanie zadane 16 maja 2016 w C i C++ przez vasiv Użytkownik (590 p.)

92,538 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,923 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...