Cornel9192 Temat założony przez niniejszego użytkownika |
Problem z zadaniem domowym. Lekcja Rozdział 26 » 2019-11-27 18:45:57 Cześć, mam problem ze zadaniem domowym. To jego treść: "Napisz prosty program, który wczyta imię, nazwisko i wiek dwóch osób. Funkcja główna programu ma mieć następującą postać: int main() { std::string imie[ 2 ]; std::string nazwisko[ 2 ]; int wiek[ 2 ]; for( int i = 0; i < 2; i++ ) wczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); for( int i = 0; i < 2; i++ ) wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); return 0; }
. Pierwsze pytanie, zawsze jak wysyłaliśmy w kursie tablice przy wywoływaniu funkcji to nie dawaliśmy jej klamer [], zawsze wyglądało to tak przyklFunkcja(nazwatablicy); Po drugie nie wiem gdzie popełniłem błąd ale program nie działa, tutaj mój kod już całości: #include <iostream> #include <limits> #include <string>
using namespace std;
void wczytajOsobe( string imie[], string nazwisko[], int wiek[] ) { for( int i = 0; i < 2; i++ ) cout << "Podaj imie: "; cin >> imie[ i ]; cout << "Podaj nazwisko: "; cin >> nazwisko[ i ]; cout << "Podaj wiek: "; cin >> wiek[ i ]; cout << endl << endl; } void wypiszOsobe( string imie[], string nazwisko[], int wiek[] ) { for( int i = 0; i < 2; i++ ) { cout << "Dane " << i << "osoby: " << endl; cout << imie[ i ] << endl << nazwisko[ i ] << endl << wiek[ i ] << endl << endl; } } int main() { string imie[ 2 ]; string nazwisko[ 2 ]; int wiek[ 2 ]; for( int i = 0; i < 2; i++ ) wczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); for( int i = 0; i < 2; i++ ) wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); return 0; }
Logi: error: name lookup of 'i' changed for ISO 'for' scoping [-fpermissive]|
error: cannot convert 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' to 'std::__cxx11::string* {aka std::__cxx11::basic_string<char>*}' for argument '1' to 'void wczytajOsobe(std::__cxx11::string*, std::__cxx11::string*, int*)'|
pekfos dziękuję za pomoc w poprzednim temacie, pozdrawiam |
|
pekfos |
» 2019-11-27 20:19:44 Pierwsze pytanie, zawsze jak wysyłaliśmy w kursie tablice przy wywoływaniu funkcji to nie dawaliśmy jej klamer [] |
To nie jest pytanie, tylko zdanie twierdzące. Nawet prawdziwe. Przy wysyłaniu tablicy - tak, bez klamer. Klamry sprawiają, że wysyłamy konkretny element tablicy. |
|
Cornel9192 Temat założony przez niniejszego użytkownika |
» 2019-11-27 20:23:34 Już mi wszystko działa, wywaliłem fory i zmieniłem na referencje. Nie wiem jednak jak zmienić aby funkcja rozróżniałą którą osobę teraz robi czyli typu "Podaj 1 osobe, podaj 2 osobe" itp. #include <iostream> #include <limits> #include <string>
using namespace std;
void wczytajOsobe( string & imie, string & nazwisko, int & wiek ) { int i = 1; cout << "Podaj imie " << i << ": "; cin >> imie; cout << "Podaj nazwisko: "; cin >> nazwisko; cout << "Podaj wiek: "; cin >> wiek; cout << endl << endl; i++; } void wypiszOsobe( string & imie, string & nazwisko, int & wiek ) { int i = 1; cout << "Dane " << i << " osoby: " << endl; cout << imie << endl << nazwisko << endl << wiek << endl << endl; i++; }
int main() { string imie[ 2 ]; string nazwisko[ 2 ]; int wiek[ 2 ]; for( int i = 0; i < 2; i++ ) wczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); for( int i = 0; i < 2; i++ ) wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); return 0; }
|
|
pekfos |
» 2019-11-27 20:25:15 Możesz dodać nowy argument do funkcji żeby przekazać wartość licznika z pętli. |
|
Cornel9192 Temat założony przez niniejszego użytkownika |
» 2019-11-27 20:26:20 Działa, jesteś wielki ;), zamykam temat i dziękuję! |
|
Cornel9192 Temat założony przez niniejszego użytkownika |
» 2019-11-27 20:32:26 Chociaż nie. Czemu w pierwszej funkcji muszę dać przez referencję. A w drugiej usunę klamry to też działa? (W pierwszej się to nie sprawdza). Pytam dlatego bo w kursie (rozdz. 19 "Wysyłanie tablic jednowymiarowych do funkcji" nie było zapisu bez klamer. za to były 3 sposoby - cytuję: " void sposob_1( int tablica[ 123 ] ); void sposob_2( int tablica[] ); void sposob_3( int * tablica ); " #include <iostream> #include <limits> #include <string>
using namespace std;
void wczytajOsobe( string & imie, string & nazwisko, int & wiek, int os ) { cout << "Podaj imie " << os << ": "; cin >> imie; cout << "Podaj nazwisko: "; cin >> nazwisko; cout << "Podaj wiek: "; cin >> wiek; cout << endl << endl; } void wypiszOsobe( string imie, string nazwisko, int wiek, int os ) { int i = 1; cout << "Dane " << os << " osoby: " << endl; cout << imie << endl << nazwisko << endl << wiek << endl << endl; }
int main() { string imie[ 2 ]; string nazwisko[ 2 ]; int wiek[ 2 ]; int os = 1; for( int i = 0; i < 2; i++, os++ ) wczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ], os ); os = 1; for( int i = 0; i < 2; i++, os++ ) wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ], os ); return 0; }
|
|
pekfos |
» 2019-11-27 20:45:04 Przecież nie wysyłasz tablicy. Element tablicy nie różni się tu niczym od zwykłej zmiennej. string imie, nazwisko; int wiek; wczytajOsobe( imie, nazwisko, wiek ); wypiszOsobe( imie, nazwisko, wiek ); |
|
« 1 » |