Skocz do zawartości

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

Siwolong

Problem z programem który pomija wpisywanie łańcucha

Rekomendowane odpowiedzi

Hej. Mam problem z rozwiązaniem zadania:

 

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

 

Po wpisaniu liczby samochodów do skatalogowania program automatycznie przeskakuje do wprowadzenia roku produkcji, pomijając wprowadzenie marki samochodu.

Jeszcze jedna sprawa, powinienem użyć operatora strzałki zamiast kropki ?

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

struct car
{
string brand;
int year;
};

int main()
{
int ile;
cout << "Ile samochodow chcesz skatalogowac? ";
cin >> ile;
car * p = new car[ile];
for (int i = 0; i < ile; i++)
{
	cout << "Samochod #" << i+1 << endl;
	cout << "Prosze podac marke: ";
	getline(cin, p[i].brand);
	cout << "Podaj rok produkcji: ";
	cin >> p[i].year;
}
for (int i = 0; i < ile; i++)
{
	cout << p[i].brand << " " << p[i].year << endl;
}
delete [] p;
system("pause");
return 0;
}

 

Liczę na waszą pomoc

Pozdrawiam

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

czemu używasz getline?

Żeby móc wpisać więcej niż jedno słowo.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ogólnie musisz wyczyścić strumień. Mój link

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

struct car
{
       string brand;
       int year;
};

int main()
{
       int ile;
       cout << "Ile samochodow chcesz skatalogowac? ";
       cin >> ile;
       car * p = new car[ile];
       for (int i = 0; i < ile; i++)
       {
           cin.clear();
           cin.sync();
               cout << "Samochod #" << i+1 << endl;
               cout << "Prosze podac marke: ";
               getline(cin, p[i].brand);
               cout << "Podaj rok produkcji: ";
               cin >> p[i].year;
       }
       for (int i = 0; i < ile; i++)
       {
               cout << p[i].brand << " " << p[i].year << endl;
       }
       delete [] p;

       return 0;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
#include <iostream>
#include <string>

// Załączona biblioteka <limits> dla std::numeric_limits
#include <limits>

struct car
{
   // Deklaracja i inicjowanie zmiennych według C++11, początkowa wartość 0, tak aby nie było przypisanego śmietnika
   // inaczej std::string brand = 0;
   std::string brand {}; 
   int year {};
};

int main(){

   // Deklaracja i inicjowanie zmiennych wedłyg C++11, początkowa wartość 0, tak aby nie było przypisanego śmietnika   
   int ile {};

   std::cout << "Ile samochodow chcesz skatalogowac? ";
   std::cin >> ile;

   car* p = new car[ile];

   for(int i = 0; i < ile; i++)
   {
           // wyczyszczenie strumienia wejściowego
           std::cin.clear();

           /* Ignorowanie strumienia wejściowego aż do napotkania znaku nowej linii ('enter') lub EOF. 
            *  Linia std::numeric_limits<std::streamsize>::max() określa, ile znaków ma zostać zignorowanych, czyli                
            *  w tym przypadku maksymalna możliwa.

            Źródło:            
            http://www.cplusplus.com/reference/istream/istream/ignore/
            http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Obsluga-strumienia-wejsciowego/12
            * */
           std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

           std::cout << "Samochod #" << i+1 << std::endl;

           std::cout << "Prosze podac marke: ";            
           std::getline(std::cin, p[i].brand);

           std::cout << "Prosze podac rok: ";
           std::cin >> p[i].year;
   }

   for(int i = 0; i < ile; i++)
   {   
       // Inaczej masz w Zadaniu!
       std::cout << p[i].year << " " << p[i].brand << std::endl;
   }    

   delete [] p;

   return 0;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...