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

Problem - wczytywanie zmiennej typu "string" do funkcji

Ostatnio zmodyfikowano 2015-05-21 20:47
Autor Wiadomość
thorback
Temat założony przez niniejszego użytkownika
Problem - wczytywanie zmiennej typu "string" do funkcji
» 2015-05-21 14:06:21
Witam ponownie.

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

void wczytajOsobe( std::string imie[], std::string nazwisko[], int wiek[] )
{
    bool bDobrze = 1;
    for( int i = 0; i < 2; i++ )
    {
        std::cin >> imie[ i ];
        std::cin >> nazwisko[ i ];
        do
        {
            std::cin.sync();
            std::cin >> wiek[ i ];
            std::cin.good() = bDobrze;
        } while( bDobrze == 0 );
       
    }
}

void wypiszOsobe( std::string imie[], std::string nazwisko[], int wiek[] )
{
    for( int i = 0; i < 2; i++ )
         std::cout << imie[ i ] << std::endl << nazwisko[ i ] << std::endl << wiek[ i ] << std::endl;
   
}

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;
}

Jest to zadanie z kursu - problem polega na tym, że kompilator nie zgadza się na rozwiązanie sprawy poprzez wywołanie klasy w argumencie funkcji. Jak inaczej mogę to zrobić?
Coś przeoczyłem, jedynie nie wiem, co.
P-132567
Maciek
» 2015-05-21 15:48:47
Dlatego się nie kompiluje bo ty przekazujesz w petlach elementy tablicy a argumentami funkcji są tablice, musisz to poprawić pozatym cin::good to nie jest l-wartość, nie możesz tak przypisywać, nie miałes tez takiego błędu ??
P-132568
BadBullPL
» 2015-05-21 15:54:47
i usuń też te pętle (oby dwie) w mainie
P-132570
thorback
Temat założony przez niniejszego użytkownika
» 2015-05-21 19:13:11
C/C++
#include<iostream>
#include<string>

void wczytajOsobe( std::string imie, std::string nazwisko, int wiek )
{
    bool good;
    for( int i = 0; i < 2; i++ )
    {
        std::cin >> imie[ i ];
        std::cin >> nazwisko[ i ];
        stop:;
        std::cin >> wiek[ i ];
        good = std::cin.good();
        if( good == 0 )
             goto stop;
       
       
    }
}

void wypiszOsobe( std::string imie, std::string nazwisko, int wiek )
{
    for( int i = 0; i < 2; i++ )
         std::cout << imie[ i ] << std::endl << nazwisko[ i ] << std::endl << wiek[ i ] << std::endl;
   
}

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;
}

Teraz z kolei dostaję informacje o błędzie int[int].

BadBullPL - Funkcja główna była w zadaniu podana, wiec to raczej nie jest to.
P-132579
Maciek
» 2015-05-21 20:11:14
Widze tu błędy u podstaw, teraz dobrze przekazujesz argumenty, ale w funkcjach nie mozesz po nich iterować bo już nie są tablicami, reszty nie sprawdzam narazie. Czytaj to co pisze ci kompilator, choć wiem ze czasami błędy sa troche nieczytelne, ale nie w tym przypadku.
P-132581
thorback
Temat założony przez niniejszego użytkownika
» 2015-05-21 20:47:28
C/C++
#include<iostream>
#include<string>

void wczytajOsobe( std::string & imie, std::string & nazwisko, int & wiek )
{
    bool good;
   
    std::cin >> imie;
    std::cin >> nazwisko;
    stop:;
    std::cin >> wiek;
    if( std::cin.good() == 0 )
    {
        std::cout << "Nie!";
        std::cin.clear();
        std::cin.sync();
        goto stop;
    }
}

void wypiszOsobe( std::string imie, std::string nazwisko, int wiek )
{
    std::cout << imie << std::endl << nazwisko << std::endl << wiek << std::endl;
}

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;
}

@Maciek
Błędy u podstaw są uzasadnione, jestem u podstaw.
Tym niemniej dzięki za wskazówki, kod powyżej działa.

Pozdrawiam.
P-132582
« 1 »
  Strona 1 z 1