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

Ciągi znaków - Kurs

Ostatnio zmodyfikowano 2018-03-19 21:49
Autor Wiadomość
marcinpro
Temat założony przez niniejszego użytkownika
Ciągi znaków - Kurs
» 2018-03-18 18:15:56
Witam ponownie, Próbuję w funkcji za pomocą wskaźnika wprowadzać do tablicy znaków ulice i w drugiej jej numer. Nie wiem dlaczego w funkcji zmienia dane od tego co wpisuje. A druga sprawa chce zabezpieczyć prog aby nie było można wprowadzić skali innej niż 2-6, a przepuszcza wszystko.


C/C++
#include <iostream>
#include <conio.h>


using namespace std;


void wprodanych( char * ulica, char * nrdomu, int * ocenapro, int * staz )
{
    cout << "Podaj nazwe ulicy na ktorej mieszkasz ?" << endl;
    cin.get( * ulica );
    cin.sync();
    cout << "Podaj numer domu ?" << endl;
    cin.get( * nrdomu );
    cin.sync();
    cout << "Na ile oceniasz swoje umiejetnosci programowania w skali [2-6]?" << endl;
    cin >> * ocenapro;
    while( !cin.good() &&( 2 <= * ocenapro ) &&( * ocenapro >= 6 ) )
    {
        cin.clear();
        cin.sync();
        cout << "Podales bledne dane, podaj ponownie!" << endl;
        cin >> * ocenapro;
    }
   
    cout << "Twoj staz programowania ?" << endl;
    cin >> * staz;
    while( !cin.good() )
    {
        cin.clear();
        cin.sync();
        cout << "Podales bledne dane, podaj ponownie!" << endl;
        cin >> * staz;
    }
}

void wysdanych( char * ulica, char * nrdomu, int ocenapro, int staz )

{
    cout << "Adres: " << ulica << ' ' << nrdomu << endl;
    cout << "Ocena: " << ocenapro - 1 << endl;
    cout << "Staz: " << staz << endl;
   
}


int main()

{
    char ulica[ 40 ];
    char nrdomu[ 20 ];
    int ocenapro = 0;
    int staz = 0;
    wprodanych( ulica, nrdomu, & ocenapro, & staz );
    wysdanych( ulica, nrdomu, ocenapro, staz );
    getch();
    return 0;
}
P-170083
pekfos
» 2018-03-18 18:28:03
C/C++
cin.get( * ulica );
To wczytuje jeden znak, nie napis.

C/C++
while( !cin.good() &&( 2 <= * ocenapro ) &&( * ocenapro >= 6 ) )
Logika tego warunku jest błędna.
P-170085
marcinpro
Temat założony przez niniejszego użytkownika
» 2018-03-18 19:01:40
Warunek poprawiłem, tak tak wiem...

C/C++
while( !( * ocenapro >= 2 && * ocenapro <= 6 ) || !cin.good() )

Co do pierwszego problemu, ok powinienem np napisać:

C/C++
cin.get( * ulica, 40 );

Tylko tego nie skompiluje. Do końca nie wiem dlaczego.
P-170093
pekfos
» 2018-03-18 19:04:07
C/C++
cin.get( * ulica, 40 );
C/C++
cin.get( ulica, 40 );
P-170094
marcinpro
Temat założony przez niniejszego użytkownika
» 2018-03-18 19:17:11
Ehh, Zadam w takim układzie głupie pytanie. Dlaczego przed tablicą znaków w funkcji nie muszę podawać * , przed intem tak?

Gdy miałem taką składnie:
C/C++
cin.get( * ulica )

Wczytywało pierwszy znak, ale jakby nie było * to błąd w kompilatorze, teraz sytuacja jest odwrotna...
P-170095
pekfos
» 2018-03-18 19:23:02
Wczytywało pierwszy znak, ale jakby nie było * to błąd w kompilatorze, teraz sytuacja jest odwrotna...
Zupełnie jakby ta gwiazdka coś zmieniała. I zupełnie jakby te dwie wersje get() przyjmowały różne rzeczy jako pierwszy argument.
http://en.cppreference.com/w​/cpp/io/basic_istream/get
P-170096
marcinpro
Temat założony przez niniejszego użytkownika
» 2018-03-19 20:47:20
Ok, biję się z dalszym zadaniem.

C/C++
void wprodanych( char ** marka, char ** model )


char marka[ 3 ][ 20 ];
char model[ 3 ][ 20 ];

wprodanych( marka, model );

Jak prawidłowo przekazać wskaźnik tablicy dwuwymiarowej do funkcji?
P-170110
pekfos
» 2018-03-19 20:52:09
Czemu po prostu nie czytać tego, co jest podane w błędach kompilacji? Masz tam rozwiązanie zarówno na ten problem, jak i poprzedni.
P-170111
« 1 » 2
  Strona 1 z 2 Następna strona