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

C++ Tworzenie tablicy struktur oraz odczyt z pliku.

Object Storage Arubacloud
0 głosów
816 wizyt
pytanie zadane 25 czerwca 2019 w C i C++ przez kenjiro244 Dyskutant (8,600 p.)

Witam mam zadanie które w skrócie brzmi. Stworzyć strukturę prostokąt z polami a, b i 2 funkcjami składowymi obwód i pole. Mamy stworzyć tablicę struktur i wypełnić ją danymi z pliku potem wszystko wyświetlić.

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

struct rect
{
	int a;
	int b;
	void obwod();
	void pole();
};

void rect::obwod()
{
	cout << "Obwod: " << 2 * a + 2 * b;
}

void rect::pole()
{
	cout << ", pole: " << a * b;
}

int main()
{
	fstream plik;
	plik.open("dane.txt", ios::in);
	if (plik.good())
	{
		int count;
		plik >> count;
		rect* tab = new rect[count];
		for (int i = 0; i < count; i++)
		{
			plik >> tab[i].a;
			plik >> tab[i].b;
		}
		plik.close();

		//Wypisanie 
		cout << tab[1].b;
	}
}

Plik wygląda tak:

3    // ilośc prostokątów
1 4
5 6
7 8

Chciałbym się dowiedzieć czy takie rozwiązanie jest akceptowalne. 

Program faktycznie działa ale nie jestem pewien czy tak to powinno być zrobione.

komentarz 25 czerwca 2019 przez tkz Nałogowiec (42,000 p.)
Oprócz kosmetyki, typu polskie nazwy i globalna przestrzeń nazw, a i b powinny być unsigned, to jest okey. To wypisanie na próbę? Bo poleceni rozumiem tak, że masz wypisać wszystko.
komentarz 25 czerwca 2019 przez kenjiro244 Dyskutant (8,600 p.)
Tak co do kosmetyki polskie nazwy mam podane w zadaniu więc raczej wolę tak zostawić. A wypisanie to tylko sprawdzenie Bo wystarczy dodać tylko zwykła pętla wiec już nie dawałem.

1 odpowiedź

0 głosów
odpowiedź 25 czerwca 2019 przez niezalogowany
wybrane 27 czerwca 2019 przez kenjiro244
 
Najlepsza
  1. Nie używaj 'using namespace'
  2. std::fstream ---> std::ifstream.
  3. Zamiast funkcji open użyj paramterów konstruktora.
  4. std::ifstream::good() ---> std::ifstream::is_open()
  5. Zapomniałeś użyć delete[]
  6. Nie zamykaj pliku - zrobi to destruktor (RAII).
  7. a, b, count powinny być typu całkowitego

Przykład:

#include <cstddef>
#include <iostream>
#include <fstream>
#include <vector>

struct rect
{
	unsigned a;
	unsigned b;
	void obwod();
	void pole();
};

void rect::obwod()
{
	std::cout << "Obwod: " << 2 * a + 2 * b;
}

void rect::pole()
{
	std::cout << ", pole: " << a * b;
}

int main()
{
	std::ifstream plik("dane.txt");
	if (plik.is_open())
	{
		std::size_t count; 
		plik >> count;

		std::vector<rect> rects(count); // żeby nie używać ciągle delete[]
		for (std::size_t i = 0; i < count; i++)
		{
			plik >> rects[i].a >> rects[i].b;
		}

		for (auto& rect : rects) 
        {
			std::cout << rect.a << " " << rect.b << "\n";
		}
	}
}

Podobne pytania

+1 głos
1 odpowiedź 267 wizyt
pytanie zadane 5 maja 2020 w C i C++ przez reken Początkujący (390 p.)
0 głosów
2 odpowiedzi 503 wizyt
pytanie zadane 14 lipca 2020 w C i C++ przez Kxmil Nowicjusz (220 p.)
0 głosów
2 odpowiedzi 1,803 wizyt
pytanie zadane 31 października 2015 w C i C++ przez radek024 Szeryf (77,160 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...