jaśkoo Temat założony przez niniejszego użytkownika |
funkcja do liczenia średniej pensji » 2016-03-17 18:45:21 Stwórz w Notatniku plik "dochody.dat" jak poniżej K 28000 M 26000 M 42000 K 53000 K 46000 M 49000 zawierający dane o płci i dochodach osób. Program ma obliczyć średnie dochody kobiet i mężczyzn. Program działa w mainie, ale wysypuje się, gdy instrukcje są w oddzielnej funkcji- error: return-statement with a value, in function returning 'void' [-fpermissive] #include <iostream> #include <fstream> #include <cstdlib>
using namespace std;
fstream plik;
void srednia( fstream plik ) { int sumaK = 0; int k = 0; int sumaM = 0; int m = 0; char plec; string pensja; plik.open( "dochody.dat", ios::in ); if(( plik.good() ) == false ) { cout << "Pliku nie odnaleziono!"; exit( 0 ); } else while( !plik.eof() ) { plik >> plec; if(( plec == 'K' ) ||( plec == 'k' ) ) { plik >> pensja; sumaK += atoi( pensja.c_str() ); k++; } else if(( plec == 'M' ) ||( plec == 'm' ) ) { plik >> pensja; sumaM += atoi( pensja.c_str() ); m++; } } cout << "Srednia pensja kobiet wynosi: " << sumaK / k << endl; cout << "Srednia pensja mezczyzn wynosi: " << sumaM / m; plik.close(); }
int main() { void srednia(); return 0; }
Jestem początkujący, więc proszę prostym językiem. :) |
|
DejaVu |
» 2016-03-17 18:48:20 Wykonujesz return 0 w funkcji, która zwraca void. |
|
jaśkoo Temat założony przez niniejszego użytkownika |
» 2016-03-17 18:53:25 A możesz napisać jak to powinno wyglądać? Bo jak usuwam return, to program się kompiluje, ale nic nie robi. |
|
carlosmay |
» 2016-03-17 19:16:01 Tego returna tam nie powinno być i argumenty przez referencje, lub typ zwracany przez funkcję powinien być taki jak zwracany wynik. Tak się funkcji nie wywołuje. Bez void. |
|
jaśkoo Temat założony przez niniejszego użytkownika |
» 2016-03-17 19:26:53 Teraz jest tak i działa, ale niech ktoś mi powie czy funkcja void srednia nie powinna miec podanego parametru fstream plik żeby działać poprawnie? #include <iostream> #include <fstream> #include <cstdlib>
using namespace std;
fstream plik;
void srednia() { int sumaK = 0; int k = 0; int sumaM = 0; int m = 0; char plec; string pensja; plik.open( "dochody.dat", ios::in ); if(( plik.good() ) == false ) { cout << "Pliku nie odnaleziono!"; exit( 0 ); } else while( !plik.eof() ) { plik >> plec; if(( plec == 'K' ) ||( plec == 'k' ) ) { plik >> pensja; sumaK += atoi( pensja.c_str() ); k++; } else if(( plec == 'M' ) ||( plec == 'm' ) ) { plik >> pensja; sumaM += atoi( pensja.c_str() ); m++; } } cout << "Srednia pensja kobiet wynosi: " << sumaK / k << endl; cout << "Srednia pensja mezczyzn wynosi: " << sumaM / m; plik.close(); }
int main() { srednia(); return 0; } |
|
carlosmay |
» 2016-03-17 19:34:26 Obiekt 'plik' jest zadeklarowany globalnie (choć nie wiem po co) więc jest dostępny w funkcji. plik >> pensja; sumaM += atoi( pensja.c_str() ); m++; |
Czemu 'pensja' jest strigiem, a nie intem? czy funkcja void srednia nie powinna miec podanego parametru fstream plik żeby działać poprawnie? |
Co nie działa? |
|
jaśkoo Temat założony przez niniejszego użytkownika |
» 2016-03-17 19:42:16 Działa, ale zastanawiałem się czy tam nie powinien byc podany parametr fstream plik. Pensja jest stringiem, bo wydawało mi się, że wszystko odczytywane z pliku automatycznie nim jest i konieczna jest dalsza konwersja, w tym przypadku na int, mylę się? |
|
carlosmay |
» 2016-03-17 19:47:01 Operator >> sam konwertuje na taki typ jakiego jest zmienna, do które wczytuje (jeśli taka konwersja jest możliwa). Jeżeli w pliku są liczby, to można je wczytać do zmiennej typu int, jak z klawiatury. Tutaj też wprowadzasz znaki, a operator robi swoje. |
|
« 1 » 2 |