*myslel som deklaráciu nie definíciu
Příspěvky odeslané z IP adresy 178.253.156.–
Prototypy sa zvyknú písať spolu s definíciami (.h)
#1 Petr
Presne tak, štruktúra sa vracia ako obyčajný dátový typ. Vo funkcii si vytvoríš štruktúru a nakoniec ju pomocou return vrátiš inej štruktúre vo funkcii main
#include <iostream>
#include <cctype>
const int MAX = 100;
struct P{
int dlzka;
int pCislic;
int pZnakov;
};
P funkcia(char *); //pozadovana funkcia
int main(){
//spristupnenie potrebnych prikazov std
using std::cout;
using std::cin;
char retazec[MAX];
P struktura;
cout << "Zadajte retazec bez medzier: ";
cin.getline(retazec, MAX);
// struktura prebera udaje vratene z funkcie
struktura = funkcia(retazec);
cout << "Retazec: " << retazec << "\nMa " << struktura.dlzka << " znakov, ztoho " << struktura.pCislic << " cisiel a " << struktura.pZnakov << " znakov\n";
system("PAUSE");
}
P funkcia(char * r){
//deklaracia + inicializacia struktury
P temp = {0, 0, 0};
for(int i = 0; i < MAX && r[i] != '\0'; i++){
if(isdigit(r[i]))
temp.pCislic++;
else if(isalpha(r[i]))
temp.pZnakov++;
temp.dlzka++;
}
return temp;
}
Ja len doplním, že je dobré ešte vyčistiť buffer (napríklad cyklom while)
#4 kloss
Hej, v tom prvom príklade to veľké patrony stačí dať pred cyklus a tak isto aj patrony. Je jedno či bude niekto nad 10000 alebo nie, aj tak sa to má vypísať.
A k tomu druhému, ano, má tam byť count. Totiž ja som na načítanie prvého čísla používal príklaz inFile (to isté ako cin), kde mi to načítalo síce prvé číslo, ale neprešlo na druhý riadok, kedže cin znak nového riadku preskakuje. Takže keď som hľadal chybu, tak som si na miesto count zvolil pevné číslo, ale potom som to zabudol vrátiť späť :D
Nudil som sa, tak tu ho máš aj stou úpravou, čo si chcel v prvom príklade
#include <iostream>
#include <fstream>
#include <cstdio>
using namespace std;
struct prispievatelia{
char meno[20];
double prispevok;
};
int main()
{
ifstream inFile;
char file[20];
cout << "Zadajte meno suboru: ";
cin.getline(file, 20);
inFile.open(file);
if(!inFile.is_open()){
cout << "Nepodarilo sa otvorit subor " << file << endl;
system("PAUSE");
exit(EXIT_FAILURE);
}
int count; //nacitanie prveho cisla, cize pocet poly struktur
inFile >> count;
inFile.get();
prispievatelia *ps = new prispievatelia[3];
int i = 0;
while(inFile.good()){
inFile.getline(ps[i].meno, 20);
inFile >> ps[i++].prispevok;
inFile.get();
}
int pocet = 0;
for(i = 0; i < count; i++){
if(ps[i].prispevok >= 10000){
if(pocet == 0){
cout << "Velke patrony:\n";
pocet = 1;
}
cout << ps[i].meno << " " << ps[i].prispevok << endl;
}
}
pocet = 0;
for(i = 0; i < count; i++){
if(ps[i].prispevok < 10000){
if(pocet == 0){
cout << "Patrony:\n";
pocet = 1;
}
cout << ps[i].meno << " " << ps[i].prispevok << endl;
}
}
inFile.close();
system("PAUSE");
}
#1 kloss
Ten prvý je tak stavaný, aby tam to veľké patrony bolo stále hore. Ale dá sa to zmeniť aj tak ako chceš ty a to
tak, že si do programu vložíš počítadlo a reťazec veľké patrony sa ti vypíše len raz, keď bude počítadlo na nule.
int count = 0;
if(pt[i].prispevok >= 10000){
if(count == 0){
cout << "Velke patrony:\n";
count = 1;
}
cout << pt[i].meno << ....
}
A čo konkrétne nevieš u toho druhého ?
Ja keď som to dávno robil, tak som to robil tak, že načítal som si prvé číslo zo súboru, následne som si spravil pole dynamických štruktúr (v tomto príklade 4) a potom si v cykle while postupne načítaval údaje zo súboru do premenných v štruktúre