Halloweenská akce! Na stránce s dobitím bodů zadej dole kód STRASIDELNYCH20 a získej porci +20% bodů zdarma!
Akce končí 31.10. o půlnoci.
Avatar
Nela Ondráčková:14. června 10:41

#include<iostream>
#include<cstring>
using namespace std;
struct podnik
{
char jmeno[50];
int vek;
char pozice[50];
};

int main()
{
int maximum;
char ano_ne;
cout<<"Dobry den, vitejte v programu C++\n\nZadejte prosim pocet zamestnancu: ";
cin>>maximum;
podnik zamestnanec[ma­ximum];
for (int c=0; c<maximum;c++)
{
cout<< "\nPrejete si zadat noveho zamestnance (A/N)? \n";
cin>>ano_ne;
if (ano_ne=='A' || ano_ne=='a'||­ano_ne=='Ano'||a­no_ne=='ANO'||a­no_ne=='ano')
{
cout << "\nZadejte jmeno, vek a druh prace " << c+1 << ". zamestnance:\n";
cout<< "1. Jmeno: ";
cin.get();
cin.getline(za­mestnanec[c].jme­no,50);
cout<< "2. Vek: ";
cin>>zamestna­nec[c].vek;
cout<< "3. Druh prace: ";
cin.get();
cin.getline(za­mestnanec[c].po­zice,50);
}
else if (maximum==c)
cout<<"Zadal jste uvedeny pocet uzivatelu, ktere jste definoval na zacatku.";
else if (ano_ne=='n' || ano_ne=='N'|| ano_ne=='Ne'|| ano_ne=='NE')
cout<< "Jiz nechcete zadat dalsiho uzivatele. Vyckejte, nez se nacte tabulka s vypsanymi udaji o zamestnancich";
maximum=c+1;
}
for (int e=0; e<maximum; e++)
{
cout<< "\n__________­________________________­________________________­_____________\n";
cout<<zamestna­nec[e].jmeno<<"\n"<<za­mestnanec[e].vek<<"\n"<<­zamestnanec[e]­.pozice<<"\n";
}
cin.get();
cin.get();
return 0;
}

Zkusil jsem: Ahoj :)

může mi prosím někdo poradit,kde je chyba? Jakmile zadám odpověď "ano", nebo jakoukoli delší, než jedno písmeno, skočí mi to rovnou na věk (asi se do jména přiřadí zbylá písmena "no") a ani string mi nepomohl (změna "char jmeno" na "string jmeno").

Chci docílit: Původně jsem chtěla ten program vytvořit tak, aby se po zadání prvního uživatele zeptal, zda chci zadat dalšího a pokračoval tak dál, ale obě varianty mi končí na druhém uživateli a na dalšího se nedostanu.

Díky :)

 
Odpovědět 14. června 10:41
Avatar
Erik Šťastný:14. června 10:53

Používej tohle:

#include < iostream > #include < cstring >
    using namespace std;
struct podnik {
    char jmeno[50];
    int vek;
    char pozice[50];
};

int main() {
    int maximum;
    char ano_ne;
    cout << "Dobry den, vitejte v programu C++\n\nZadejte prosim pocet zamestnancu: ";
    cin >> maximum;
    podnik zamestnanec[ma ximum];
    for (int c = 0; c < maximum; c++) {
        cout << "\nPrejete si zadat noveho zamestnance (A/N)? \n";
        cin >> ano_ne;
        if (ano_ne == 'A' || ano_ne == 'a' || ano_ne == 'Ano' || a no_ne == 'ANO' || a no_ne == 'ano') {
            cout << "\nZadejte jmeno, vek a druh prace " << c + 1 << ". zamestnance:\n";
            cout << "1. Jmeno: ";
            cin.get();
            cin.getline(za mestnanec[c].jme no, 50);
            cout << "2. Vek: ";
            cin >> zamestna nec[c].vek;
            cout << "3. Druh prace: ";
            cin.get();
            cin.getline(za mestnanec[c].po zice, 50);
        } else if (maximum == c)
            cout << "Zadal jste uvedeny pocet uzivatelu, ktere jste definoval na zacatku.";
        else if (ano_ne == 'n' || ano_ne == 'N' || ano_ne == 'Ne' || ano_ne == 'NE')
            cout << "Jiz nechcete zadat dalsiho uzivatele. Vyckejte, nez se nacte tabulka s vypsanymi udaji o zamestnancich";
        maximum = c + 1;
    }
    for (int e = 0; e < maximum; e++) {
        cout << "\n_______________________________________________________________________\n";
        cout << zamestna nec[e].jmeno << "\n" << za mestnanec[e].vek << "\n" << zamestnanec[e].pozice << "\n";
    }
    cin.get();
    cin.get();
    return 0;
}
Editováno 14. června 10:54
 
Nahoru Odpovědět 14. června 10:53
Avatar
Odpovídá na Erik Šťastný
Erik Šťastný:14. června 10:59

Bože, tohle mi už fakt vadí...
"Byl překročen časový limit na editaci zprávy nebo na ni nemáš oprávnění."

pardon za SPAM

 
Nahoru Odpovědět 14. června 10:59
Avatar
Nela Ondráčková:14. června 11:13

Děkuju za radu, ale stále háže mi to chybu :( po zadání prvního uživatele se program ukončí, i když chci zadat např. 12 a odpověď na otázku musí být jen "a", při napsání "ano" mě to hodí rovnou na "vek" druhého uživatele.

 
Nahoru Odpovědět 14. června 11:13
Avatar
Odpovídá na Nela Ondráčková
Erik Šťastný:14. června 11:20

Já nic neupravil, poukázal jsem na fakt, že vkládej kód jako kód aby se v tom dalo vyznat :)

 
Nahoru Odpovědět 14. června 11:20
Avatar
Nela Ondráčková:14. června 11:21

Ano, to mi došlo :) já chtěla poradit s tou chybou. Jak ji opravit? Nevím, proč mě to nepustí dál.

 
Nahoru Odpovědět 14. června 11:21
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na Nela Ondráčková
patrik.valkovic:14. června 11:46

char reprezentuje pouze jeden znak. Tudíž do něj nemůžeš uložit "Ano" nebo "Ne", protože to jsou 3 resp. 2 znaky. Pro to potřebuješ string.
Také zápis podnik zamestnanec[maximum]; je z hlediska C++ neplatný.

Nahoru Odpovědět  +1 14. června 11:46
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na Nela Ondráčková
Erik Šťastný:14. června 11:49

Já bych začal jiným problémem, zkopíroval jsem si kód a chtěl na to mrknout. Nicméně hnedka pátý řádek v metodě main.

error C2131: expression did not evaluate to a constant

Nemůžeš inicializovat velikost pole nekonstatní hodnotou při compile timu.

EDIT: Jo už mě někdo předběhl :)

Editováno 14. června 11:50
 
Nahoru Odpovědět 14. června 11:49
Avatar
Nela Ondráčková:14. června 22:34

Díky za rady. Už jsem to znovu opravila a tentokrát mi vše funguje. "string" mi minule nefungoval kvůli špatné definici.

#include <iostream>
#include <cstring>
using namespace std;
struct podnik {
char jmeno[50];
int vek;
char pozice[50];
};

int main() {
int maximum;
string ano_ne = "ano";
cout << "Dobry den, vitejte v programu C++\n\nZadejte prosim pocet zamestnancu: ";
cin >> maximum;
podnik zamestnanec[ma­ximum];
for (int c = 0; c < maximum; c++) {
if (ano_ne == "A" || ano_ne == "a" || ano_ne == "Ano" || ano_ne == "ANO" || ano_ne == "ano") {
cout << "\nZadejte jmeno, vek a druh prace " << c + 1 << ". zamestnance:\n";
cout << "1. Jmeno: ";
cin.get();
cin.getline(za­mestnanec[c].jme­no, 50);
cout << "2. Vek: ";
cin >> zamestnanec[c].vek;
cout << "3. Druh prace: ";
cin.get();
cin.getline(za­mestnanec[c].po­zice, 50);
cout << "\nPrejete si zadat dalsiho zamestnance (A/N)? \n";
cin >> ano_ne;
} else if (maximum == c)
cout << "Zadal jste uvedeny pocet uzivatelu, ktere jste definoval na zacatku.";
else if (ano_ne == "n" || ano_ne == "N" || ano_ne == "Ne" || ano_ne == "NE" || ano_ne == "ne")
{
cout << "Jiz nechcete zadat dalsiho uzivatele. Vyckejte, nez se nacte tabulka s vypsanymi udaji o zamestnancich";
maximum = c;
}

}
cout << maximum << endl;
for (int e = 0; e < maximum; e++) {
cout << "\n__________­________________________­________________________­_____________\n";
cout << zamestnanec[e]­.jmeno << "\n" << zamestnanec[e].vek << "\n" << zamestnanec[e]­.pozice << "\n";
}
cin.get();
cin.get();
return 0;
}

 
Nahoru Odpovědět 14. června 22:34
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.