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

Struktura oraz Inkrementacja

VPS Starter Arubacloud
0 głosów
325 wizyt
pytanie zadane 28 maja 2015 w C i C++ przez tarnasm Gaduła (3,030 p.)

Hej.

Napisałem sobie taką prostą strukturę 3 elementowa tj.(id + Imie + Nazwisko). W założeniu programu system ma poprosic o wprowadzenie imienia oraz nazwiska oraz Samodzielnie zwiększyć o jednen Inta  ID w strukturze. Calosc jest w petli do...while aby kilka danych wprowadzic. Problem polega natym że, po wprowadzeniu 2 danych apka nie zlicza ID i ciągle przedstawia je jako 0;

Poniżej Kod

#include <iostream>
#include <cstdlib>
#include <string>
#include <conio.h>
using namespace std;

struct Klienci
{
    int id; //---Auto Incerment
    string imie;
    string nazwisko;
};
char wybor; //---Zmienna do Switch'a i pętli
int i=0; //---Licznik do tablicy

Klienci osoby[50];//---Tablica 

void dodaj();
void patrz();

int main()
{
    cout<<"Wybierz z menu\n"
        <<"1. Dodaj\n"
        <<"2. Zobacz\n";
        
    wybor=getch();
    switch(wybor)
    {
        case '1': dodaj(); break;
        case '2': patrz(); break;
    }
    return 0;
}

void dodaj()
{
    int wybor=0;

    do{
    cout<<"DODAJ DO STRUKTURY"<<endl;
    cout <<"Podaj Imie\n";
    cin >>osoby[i].imie;
    cout <<"Podaj Nazwisko\n";
    cin >>osoby[i].nazwisko;
    osoby[i].id++;
    i++;
    
    cout<<"Dodano Klienta! Zyskal on ID o numerze: "<<osoby[i].id<<endl;
    cout<<"Czy dodaj kolejna dane?\n";
    cout<<"1.Tak: \n2.Nie: \n";
    cin>>wybor;
    }while(wybor==1);
    patrz();
}

void patrz()
{
    for(int j=0; j<i; j++)
    {
        cout<<osoby[j].id<<endl;
        cout<<osoby[j].imie<<endl;
        cout<<osoby[j].nazwisko<<endl;
        cout<<"*************\n";
    }
}

 

2 odpowiedzi

+1 głos
odpowiedź 28 maja 2015 przez Adrian1999 Nałogowiec (34,570 p.)
wybrane 28 maja 2015 przez tarnasm
 
Najlepsza
Ustaw domyślną wartość inta na 0
komentarz 28 maja 2015 przez tarnasm Gaduła (3,030 p.)
Już ustawiałem. Tak nawet było pierwotnie. Nic to nie zmieniło;/
komentarz 28 maja 2015 przez Adrian1999 Nałogowiec (34,570 p.)
Przeanalizowałem twój kod wiem o co chodzi... Inkrementujesz przed pokazaniem danych więc jak wprowadzasz wartość do tablicy [0] to pokazujesz wartość tablicy[1] EDIT Jeżeli chcesz by każdy uzyskał wartość id o 1 większą to starczy zrobić osoby[i].id +=i+1; ( jeżeli odliczanie ma być od 1)
komentarz 28 maja 2015 przez tarnasm Gaduła (3,030 p.)
Dziękuję pomogło.
0 głosów
odpowiedź 28 maja 2015 przez Dorion300 Szeryf (90,250 p.)
edycja 28 maja 2015 przez Dorion300

Lepszym pomysłem jest pętla For.

Powinieneś dodać do i dopiero na KONCU pętli

void dodaj()
{
    int wybor=0;

    do{
    cout<<"DODAJ DO STRUKTURY"<<endl;
    cout <<"Podaj Imie\n";
    cin >>osoby[i].imie;
    cout <<"Podaj Nazwisko\n";
    cin >>osoby[i].nazwisko;
    osoby[i].id = i;
    cout<<"Dodano Klienta! Zyskal on ID o numerze: "<<osoby[i].id<<endl;
    cout<<"Czy dodaj kolejna dane?\n";
    cout<<"1.Tak: \n2.Nie: \n";
    i++;
    cin>>wybor;
    }while(wybor==1);
    patrz();
}

 

komentarz 28 maja 2015 przez tarnasm Gaduła (3,030 p.)
Co masz na myśli mówiąc "syf"? Kod nadziabany czy podejscie tak błędne. Dlaczego uważasz, że w For byłoby lepiej?
komentarz 28 maja 2015 przez Dorion300 Szeryf (90,250 p.)

Trochę przesadziłem z "syfem".

Jeśli chodzi o 'For" to będzie czytelniejszy.

np. "for(int i=0;;i++)", deklaruje zmiennę, następnie automatycznie powiększa o jeden i nie musimy pamiętać, jak i nie popełnimy teraz błędu z wcześniejszym wstawieniem i++;.

Aby wyjść, wystarczy:

if(wybor!=1) break;

 

czyli kod powinnien wyglądać tak:

    for(i=0;;i++)
    {

    cout<<"DODAJ DO STRUKTURY"<<endl;
    cout <<"Podaj Imie\n";
    cin >>osoby[i].imie;
    cout <<"Podaj Nazwisko\n";
    cin >>osoby[i].nazwisko;
    osoby[i].id = i+1;

    cout<<"Dodano Klienta! Zyskal on ID o numerze: "<<osoby[i].id<<endl;
    cout<<"Czy dodaj kolejna dane?\n";
    cout<<"1.Tak: \n2.Nie: \n";
    cin>>wybor;
    if(wybor != 1) break;
    }

W "patrz()" zmieniamy na "for(int j=0; j<=i; j++)".

komentarz 28 maja 2015 przez tarnasm Gaduła (3,030 p.)
break; powoduje przerwanie pętli?
komentarz 28 maja 2015 przez Dorion300 Szeryf (90,250 p.)
break; przerywa pętlę.

A continue; "przenosi na sam koniec pętli".
komentarz 28 maja 2015 przez tarnasm Gaduła (3,030 p.)
Yhym, to wyjasnia wiele. Dziękuję za pomoc. Pozdrawiam :]

Podobne pytania

+3 głosów
2 odpowiedzi 915 wizyt
pytanie zadane 14 czerwca 2015 w C i C++ przez Dawid Kreft Początkujący (420 p.)
0 głosów
0 odpowiedzi 308 wizyt
pytanie zadane 23 listopada 2019 w C i C++ przez Mavimix Dyskutant (8,390 p.)
+1 głos
0 odpowiedzi 297 wizyt
pytanie zadane 12 marca 2022 w C i C++ przez Bilib Użytkownik (990 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...