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

Rozwiązanie ćwiczenia dotyczącego tworzenia struktur C++

Object Storage Arubacloud
0 głosów
731 wizyt
pytanie zadane 24 lutego 2018 w Rozwój zawodowy, nauka, praca przez Archeon Początkujący (480 p.)
edycja 25 lutego 2018 przez ScriptyChris

Witam, jestem w trakcie czytania i przerabiania ksiązki od Stephen'a Prata i utknąłem na tym zadaniu..

Zaprojektuj strukturę car zawierającą następujące informacje o samochodzie: markę jako tablicę znakową lub obiekt string, rok budowy jako liczbę całkowitą. Napisz program który spyta użytkownika o liczbę katalogowanych aut. Następnie za pomocą operatora new stwórz dynamiczną tablice struktur car, poproś użytkownika o podanie marki (może mieć więcej niż jedno słowo) oraz o rok. Należy zachować tu ostrożność, gdyż na zmianę odczytujemy łańcuchy znakowe i liczby. Na koniec wyświetl zawartości wszystkich struktur. Oto przykładowy przebieg sesji z programem:

 

Ile samochodów chcesz skatalogować? 2
Samochód #1:
Proszę podać markę: Hudson Hornet
Rok produkcji: 1952
Samochód #2:
Proszę podać markę: Kaiser
Rok produkcji: 1951
1952 Hudson Hornet
1951 Kaiser

Mój kod :

#include <iostream>
#include <string>
using namespace std;




int main(int argc, char** argv) {
	int i;
	
	struct car {
		string marka;
		int rok_budowy;
	};
	
	int ile_razy;
	
	cout<<"Ile razy chcesz wpisać ? \n";
	cout<<"Podaj liczbe : ";
	cin>>ile_razy;
	car * ps = new car[ile_razy];
	for(i = 0; i < ile_razy; i++){
		cout<<"Podaj marke samochodu : \n";
		cin>>ps->marka;
		cout<<"Podaj rok budowy : \n";
		cin>>ps->rok_budowy;
		
	}
for (i = 0; i< ile_razy; i++){
	cout<<"Samochod #"<<car;
}
	
	return 0;
}

Możecie mi pomóc ?

1 odpowiedź

0 głosów
odpowiedź 25 lutego 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)

poproś użytkownika o podanie marki (może mieć więcej niż jedno słowo) 

Czyli innymi słowy użyj std::getline.

Wskaźnik ps wskazuje na tablicę, a nie pojedynczy element. Więc zamiast 

ps->marka

ma być

ps[i].marka

 

komentarz 25 lutego 2018 przez Archeon Początkujący (480 p.)

Zmienione, co dalej ? 

#include <iostream>
#include <string>
using namespace std;




int main(int argc, char** argv) {
	int i;
	
	struct car {
		string marka;
		int rok_budowy;
	};
	
	int ile_razy;
	
	cout<<"Ile razy chcesz wpisać ? \n";
	cout<<"Podaj liczbe : ";
	cin>>ile_razy;
	car * ps = new car[ile_razy];
	for(i = 0; i < ile_razy; i++){
		cout<<"Podaj marke samochodu : \n";
		getline(cin,ps[i].marka);
		cout<<"Podaj rok budowy : \n";
			cin>>ps[i].rok_budowy;
		
	}

	return 0;
}

 

komentarz 25 lutego 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)

Należy zachować tu ostrożność, gdyż na zmianę odczytujemy łańcuchy znakowe i liczby.

Po wczytaniu liczby całkowitej operatorem >> w strumieniu wejściowym zostaje znak '\n', którego należałoby się pozbyć przed wczytywaniem getlinem. Przez to, że teraz tego nie robisz "przeskakuje" tego getline'a i przechodzi do roku budowy.

komentarz 25 lutego 2018 przez Archeon Początkujący (480 p.)
Jak się go pozbyć ?
komentarz 25 lutego 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)
cin.ignore() przed getlinem.
komentarz 25 lutego 2018 przez Archeon Początkujący (480 p.)

Program działa, ale na samym końcu wywala błąd :/ 

#include <iostream>
#include <string>
using namespace std;




int main(int argc, char** argv) {
	int i;
	
	struct car {
		string marka;
		int rok_budowy;
	};
	
	int ile_razy;
	
	cout<<"Ile razy chcesz wpisac? \n";
	cout<<"Podaj liczbe : ";
	cin>>ile_razy;
	cout<<endl;
	car * ps = new car[ile_razy];
	
	
	for(i = 0; i < ile_razy; i++){
		cout<<"Podaj marke samochodu : ";
		cin.ignore() ;
		getline(cin, ps[i].marka);
		cout<<endl;
		
		cout<<"Podaj rok budowy : \n";
			cin>>ps[i].rok_budowy;
	}

for(int i=0;i<ile_razy; i++)
{
cout << ps[i].marka << " " << ps[i].rok_budowy << endl;
}
delete ps;


	return 0;
}

 

komentarz 25 lutego 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)
Źle zwalniasz pamięć. Alokowałeś tablicę, nie pojedynczy element.
komentarz 25 lutego 2018 przez Archeon Początkujący (480 p.)
Dziękuję za pomoc :)

Podobne pytania

0 głosów
0 odpowiedzi 144 wizyt
0 głosów
1 odpowiedź 351 wizyt
pytanie zadane 24 lutego 2017 w C i C++ przez Dooky Początkujący (480 p.)

92,632 zapytań

141,498 odpowiedzi

319,872 komentarzy

62,011 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!

...