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

question-closed Bug w programie (pętla i dynamiczna struktura)

0 głosów
251 wizyt
pytanie zadane 5 października 2019 w C i C++ przez amtrax Dyskutant (9,630 p.)
zamknięte 5 października 2019 przez amtrax

Witam, 
za zadanie mam stworzyć dynamiczną strukturę, która będzie pobierać od użytkownika  odpowiednie dane (marka(może mieć więcej niż 1 słowo) i rok produkcji). 
Program włącza się, jednak po wpisaniu ilości powtórzeń, kończy swoje działanie. 
Gdzie ukryty jest problem? 

Pozdrawiam 

#include <iostream>

using namespace std;

struct samochod
{
    string marka;
    int rok=0;



};
int ile=0;

int main()
{
cout<<"Ile samochod chcesz skatalogowac: ";
cin>>ile;

  samochod *ws= new samochod [ile];
 for(int i = 0; i = ile; i++)
 {

   cout<<"Podaj nazwe samochodu: "<<endl;
   getline(cin,ws[i].marka);

   cout<<"Podaj rok produkcji: "<<endl;
   cin>>ws[i].rok;

 }
delete[]ws;

 

komentarz zamknięcia: problem rozwiazano
komentarz 5 października 2019 przez niezalogowany
może tak spróbuj for(int i = 0; i <ile; i++)

1 odpowiedź

0 głosów
odpowiedź 5 października 2019 przez tkz Nałogowiec (42,040 p.)
wybrane 5 października 2019 przez amtrax
 
Najlepsza
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

Dodaj po getline.

komentarz 5 października 2019 przez amtrax Dyskutant (9,630 p.)
czy mógłbyś wkleić kod wraz z tą formułą?
komentarz 5 października 2019 przez tkz Nałogowiec (42,040 p.)

#include <iostream>
#include <limits>
using namespace std;
 
struct samochod
{
    string marka;
    int rok=0;
 
 
 
};

 
int main()
{
    int ile=0;
    cout<<"Ile samochod chcesz skatalogowac: ";
    cin>>ile;
     
      samochod *ws= new samochod [ile];
     for(int i = 0; i < ile; i++)//Dlaczego miałeś tutaj '='?
     {
     
       cout<<"Podaj nazwe samochodu: "<<endl;
       getline(cin,ws[i].marka);
     cin.ignore(numeric_limits<streamsize>::max(), '\n');

       cout<<"Podaj rok produkcji: "<<endl;
       cin>>ws[i].rok;
     
    }
    delete[]ws;

}

cpp.sh/5fsy3

komentarz 5 października 2019 przez amtrax Dyskutant (9,630 p.)
dziękuje, problem rozwiązany.
Czego dotyczy ta formuła?
komentarz 5 października 2019 przez tkz Nałogowiec (42,040 p.)

Jeśli przed użyciem funkcji "getline" użyjemy obiektu "cin", ten ostatni pozostawia zwykle znak końca wiersza '\n' w buforze klawiatury. Funkcja "getline" napotykając ten znak natychmiast kończy działanie, więc żeby uniknąć błędnego działania programu, należy wywołać funkcję cin.ignore(). Zostało pokazane to w poniższym przykładzie:

https://forum.pasja-informatyki.pl/5572/getline-i-cin-ignore

Podobne pytania

0 głosów
2 odpowiedzi 632 wizyt
pytanie zadane 25 grudnia 2019 w C i C++ przez amtrax Dyskutant (9,630 p.)
0 głosów
1 odpowiedź 1,007 wizyt
pytanie zadane 24 sierpnia 2018 w C i C++ przez Karol_Gucio Początkujący (310 p.)
0 głosów
2 odpowiedzi 904 wizyt
pytanie zadane 16 stycznia 2018 w C i C++ przez mn130496 Gaduła (3,530 p.)

93,604 zapytań

142,529 odpowiedzi

322,996 komentarzy

63,092 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

Kursy INF.02 i INF.03
...