Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Poziom 3 Rozdział 26 Problem w zadaniu

Ostatnio zmodyfikowano 2016-06-29 09:49
Autor Wiadomość
W1ll_3ty
Temat założony przez niniejszego użytkownika
[C++] Poziom 3 Rozdział 26 Problem w zadaniu
» 2016-06-28 21:13:03
Witam, gdy próbuję wykonać zadanie domowe w rozdziale 26 wychodzą mi takie błędy, które zaraz podam. Jak mam to naprawić i czy sam kod jest dobry?

C:\Users\Maciek\Desktop\Admin\C++\wyrazy.cpp||In function 'int main()':|
C:\Users\Maciek\Desktop\Admin\C++\wyrazy.cpp|28|error: cannot convert 'std::string' to 'int*' for argument '1' to 'int wczytajOsobe(int*, int*, int*, int)'|
C:\Users\Maciek\Desktop\Admin\C++\wyrazy.cpp|30|error: expected ')' before ';' token|
C:\Users\Maciek\Desktop\Admin\C++\wyrazy.cpp|30|error: expected primary-expression before ')' token|
C:\Users\Maciek\Desktop\Admin\C++\wyrazy.cpp|30|error: expected ';' before ')' token|
||=== Build finished: 4 errors, 0 warnings ===|

A to mój kod:
C/C++
#include <iostream>
#include <string>
using namespace std;

int wczytajOsobe( int imie[], int nazwisko[], int wiek[], int i )
{
    cout << "Wpisz swoje imie: ";
    cin >> imie[ i ];
    cout << "Wpisz swoje nazwisko: ";
    cin >> nazwisko[ i ];
    cout << "Wpisz swoj wiek: ";
    cin >> wiek[ i ];
}

int wypiszOsobe( int imie[], int nazwisko[], int wiek[], int & i )
{
    cout << endl << "Imie " << i << "osoby to: " << imie[ i ] << endl;
    cout << endl << "Nazwisko " << i << "osoby to: " << nazwisko[ i ] << endl;
    cout << endl << "Wiek " << i << "osoby to: " << wiek[ i ] << 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 ], i );
   
    for( int i = 0; i < 2; i++; )
         wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ], i );
   
    return 0;
}
P-149495
mateczek
» 2016-06-28 21:18:12
imie to tablica liczb
int wczytajOsobe( int imie[], int nazwisko[], int wiek[], int i )
P-149496
W1ll_3ty
Temat założony przez niniejszego użytkownika
» 2016-06-28 21:29:16
Za dużo mi to nie mówi. Mógłbyś bardziej rozwinąć swą myśl.
P-149497
W1ll_3ty
Temat założony przez niniejszego użytkownika
» 2016-06-28 22:33:05
Jeśli nie wiecie jak to naprawić to chociaż podajcie gotowy kod, bym mógł go przeanalizować. Będę wdzięczny.
P-149499
carlosmay
» 2016-06-28 22:36:37
C/C++
wczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ], i )
// imie[i] - to string, a nie tablica liczb
// nazwisko[i] - to string, a nie tablica liczb
// wiek[i] - to liczba, a nie tablica liczb
// i - to liczba, OK
// ....
// a teraz nagłówek funkcji
int wczytajOsobe( int imie[], int nazwisko[], int wiek[], int i )
// int jako typ zwracany z funkcji, która nic nie zwraca. To jest błąd (powinno być void)
// int imie[] - to tablica liczb (funkcja oczekuje tablicy liczb, a otrzymuje łańcuch znaków)
// int nazwisko[] - analogicznie, jak wyżej
// wiek[] - to tablica liczb (funkcja oczekuje tablicy, a otrzymuje liczbę)
// ...
int wypiszOsobe( int imie[], int nazwisko[], int wiek[], int & i )
// tutaj to samo co wyżej i dodatkowo
// int& i - ryzyko przypadkowej zmiany licznika pętli, przekazanie wartości referencją
// nie daje zysku wydajności, a naraża na błędy

edit:
Jeśli nie wiecie jak to naprawić to chociaż podajcie gotowy kod
Jeśli nie wiemy jak to naprawić, to jak mamy umieć napisać poprawny kod?

C/C++
#include <iostream>
#include <string>

void addPerson( std::string & name, std::string & surname, int & age )
{
    std::cin >> name >> surname >> age;
    std::cin.clear();
    std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
}

void printPersons( std::string names[], std::string surnames[], int ages[], int size )
{
    for( std::size_t i = 0; i < size; ++i ) {
        std::cout << surnames[ i ] << ", " << names[ i ] << " " << ages[ i ] << '\n';
    }
}

int main()
{
    std::string names[ 2 ];
    std::string surnames[ 2 ];
    int ages[ 2 ];
    int currentSize;
   
    for( currentSize = 0; currentSize < 2; ++currentSize ) {
        addPerson( names[ currentSize ], surnames[ currentSize ], ages[ currentSize ] );
    }
   
    printPersons( names, surnames, ages, currentSize );
}
Tutaj jest komunikacja z funkcjami na dwa sposoby.
Przekazanie pojedynczych elementów oraz całych tablic, wraz zaktualizowanym rozmiarem tablic.

Za dużo mi to nie mówi. Mógłbyś bardziej rozwinąć swą myśl.
Proponuje wrócić do rozdziałów o funkcjach i tablicach.
P-149500
W1ll_3ty
Temat założony przez niniejszego użytkownika
» 2016-06-28 23:12:14

Proponuje wrócić do rozdziałów o funkcjach i tablicach.
Zrozumiałem, że chodziło mu o to, że tam nie może być "int", ale gdy zamieniłem to na string nadal występował ten błąd. Dalej nie będę już nic komentować, bo jest późno. Dzięki!
P-149501
carlosmay
» 2016-06-28 23:22:34
że tam nie może być "int", ale gdy zamieniłem to na string nadal występował ten błąd.
Występował, bo nie rozumiesz co przekazujesz do funkcji i czego funkcja oczekuje.
Przekazujesz do funkcji jeden element tablicy (czyli słowo), a funkcja oczekuje tablicy słów.
Przeanalizuj podrzucony przykład.
P-149503
W1ll_3ty
Temat założony przez niniejszego użytkownika
» 2016-06-29 09:49:11
Przeanalizowałem twój kod i poprawiłem mój. Wiem co przekazuję do funkcji i co ona oczekuje. Tylko myślałem, że to nie ważne czy przekazuję jeden element tablicy czy kilka, tylko, że w funkcji i tak muszę napisać []. Zrozumiałem to dopiero później.
P-149504
« 1 »
  Strona 1 z 1