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

Wyświetlanie nazwisk - struktury w C

0 głosów
58 wizyt
pytanie zadane 14 maja w C i C++ przez DobryKurczak Obywatel (1,010 p.)

Witam.

Zadaniem było stworzenie aplikacji konsolowej, która będzie dodawać, wyświetlać i usuwać studentów. Dodawanie działa, natomiast wyświetlanie listy studentów już nie. Oto mój kod:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<malloc.h>

struct Student
{
	char* imie;
	char* nazwisko;
	int wiek;
	int nrIndeksu;

};

struct Tablica
{
	int aktualny;
	struct Student studenci[20];
};

struct Tablica tablica;

void DodajStudenta(char* i, char* n, int w, int nr) {

	if (tablica.aktualny < 20) {

		int a = tablica.aktualny;
		tablica.studenci[a].imie = malloc(strlen(i) + 1);
		strcpy(tablica.studenci[a].imie, i);
		tablica.studenci[a].nazwisko = malloc(strlen(n) + 1);
		strcpy(tablica.studenci[a].nazwisko, n);
		tablica.studenci[a].wiek = w;
		tablica.studenci[a].nrIndeksu = nr;
		++a;
		printf("Dodano!");

	}
	else
		printf("Nie ma miejsca");

}

void WypiszDane() {

	int j = 1;
	for (int i = 0;i < tablica.aktualny;i++) {

		printf("\n %i. %s %s %i %i \n", j, tablica.studenci[i].imie, tablica.studenci[i].nazwisko, tablica.studenci[i].wiek, tablica.studenci[i].nrIndeksu);
		j++;
	}
}

int UsunPoNazwisku(char* naz) {
	for (int i = 0; i < tablica.aktualny; i++) {
		if (strcmp(naz, tablica.studenci[i].nazwisko) == 0) {
			free(tablica.studenci[i].imie);
			free(tablica.studenci[i].nazwisko);
			while (i < tablica.aktualny) {
				tablica.studenci[i] = tablica.studenci[i + 1];
				i++;
			}
			tablica.aktualny--;
			return tablica.studenci[i].nrIndeksu;
		}


	}
	return -1;
}
void main() {

	char pom[2];
	char op = 'x';
	char imie[20], nazwisko[40];
	int w, nr;
	tablica.aktualny = 0;

	while (op != 'q') {
		printf("d-dodawanie studenta\n");
		printf("w-wyswietlenie tablicy\n");
		printf("u-usuwanie studenta\n");
		printf("q-wyjscie z programu\n");
		printf("Wybierz opcje");

		scanf("%1s", pom);
		op = *pom;

		switch (op)
		{
		case 'd':
			printf("Wprowadz imie studenta");
			scanf("%s", imie);
			printf("Wprowadz nazwisko studenta");
			scanf("%s", nazwisko);
			printf("Wprowadz wiek studenta");
			scanf("%i", &w);
			printf("Wprowadz nr indeksu studenta");
			scanf("%i", &nr);

			DodajStudenta(imie, nazwisko, w, nr);
			break;

		case 'w':
			WypiszDane();
			break;
		case 'u':
			printf("Wprowadz nazwisko studenta");
			scanf("%s", nazwisko);
			UsunPoNazwisku(nazwisko);
			break;
		case 'q':
			break;
		}

	}

}

Z góry dziękuję za odpowiedź.

1 odpowiedź

0 głosów
odpowiedź 14 maja przez Szfierzak Gaduła (3,240 p.)
wybrane 14 maja przez DobryKurczak
 
Najlepsza

W funkcji dodajStudenta() inkrementujesz zmienną lokalną a. Zastanów się jaki jest zasięg tej zmiennej. W funkcji usunPoNazwisku(), usuwasz i zmniejszasz ilość studentów poprawnie, więc przez analogię możesz poprawić dodawanie studentów.

1
komentarz 14 maja przez DobryKurczak Obywatel (1,010 p.)
Faktycznie, działa. Dzięki ;)

Podobne pytania

0 głosów
1 odpowiedź 89 wizyt
pytanie zadane 14 grudnia 2016 w C i C++ przez Programator Nowicjusz (160 p.)
0 głosów
2 odpowiedzi 102 wizyt
pytanie zadane 2 lutego w C i C++ przez Mavannkas Obywatel (1,070 p.)
0 głosów
1 odpowiedź 110 wizyt
pytanie zadane 31 sierpnia 2018 w C i C++ przez Paulina42 Nowicjusz (150 p.)
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

66,384 zapytań

113,137 odpowiedzi

239,498 komentarzy

46,642 pasjonatów

Przeglądających: 275
Pasjonatów: 5 Gości: 270

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...