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

Błąd zmiany wskaźnika na zmienną

Ostatnio zmodyfikowano 2010-04-06 18:54
Autor Wiadomość
Grzes
Temat założony przez niniejszego użytkownika
Błąd zmiany wskaźnika na zmienną
» 2010-04-05 14:43:03
C/C++
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <dos.h>
#include "ddtconsole.h"
#pragma hdrstop

int Naglowek( int menu );
char DodajProfil( char imie[ 20 ], char nazwisko[ 30 ], char klasa[ 5 ] );
int UsunProfil();
int EdytujProfil();
int WyswietlProfile();

int main()
{
    using namespace ddt::console;
    using namespace std;
   
    int iloscprofili = 0;
   
    int menu = 1;
    char imie[ 20 ];
    char nazwisko[ 30 ];
    char klasa[ 5 ];
    char wybor;
   
    do {
        Naglowek( menu );
        if( iloscprofili == 0 ) cout << "Nacisnij enter aby dodac pierwszy profil..."
             << endl;
        else cout << "zle"; //WyswietlProfile();
       
        wybor = getch();
        cout << wybor;
        switch( wybor )
        {
        case '+': DodajProfil( imie[ 20 ], nazwisko[ 30 ], klasa[ 5 ] );
            break;
            default: cout << "zle";
            break;
        }
    } while( wybor != 'e' );
   
    getch();
    return( 0 );
}

int Naglowek( int menu )
{
    cout << "                        DZIENNIK ELEKTORNICZNY" << endl;
    switch( menu )
    {
    case 1: cout << " edytor profili " << endl;
        break;
    case 2: cout << "edytor przedmiotow " << endl;
        break;
    case 3: cout << "edytor ocen " << endl;
        break;
    }
}

char DodajProfil( char imie[ 20 ], char nazwisko[ 30 ], char klasa[ 5 ] )
{
    cout << "Imie: ";
    cin >> imie[ 20 ];
    Sleep( 100 );
    cout << "Nazwisko: ";
    cin >> nazwisko[ 30 ];
    cout << "Klasa: ";
    cin >> klasa[ 5 ];
    return imie[ 20 ];
    return nazwisko[ 30 ];
    return klasa[ 5 ];
}
Mam tylko pytanie czemu w funkcji głównej wyskakuje mi błąd że chce zamienić wskaźnik na zmienną. KTHXBYE :)

#pixelmaster: zmieniłem tytuł | Zobacz to
P-15830
DejaVu
» 2010-04-05 16:06:09
Change from:
C/C++
DodajProfil( imie[ 20 ], nazwisko[ 30 ], klasa[ 5 ] );
To:
C/C++
DodajProfil( imie, nazwisko, klasa );
P-15832
Grzes
Temat założony przez niniejszego użytkownika
» 2010-04-05 22:17:57
Dzięki, to mój pierwszy temat, od teraz będę się trzymał zasad :) Wiem że to proste było ale byłem już po 2 godzinach dochodzenia błędów i już mi się nie chciało a dopiero się uczę pisząc ten program. Mam nadzieje że nie będzie dla ciebie problemem jeśli po drodze zadam jeszcze parę pytań jak nie będę mógł znaleźć tego szybko w googlach bo chciałbym ten program na środę zrobić.

Ale zmieniając tak jak mi napisałeś wracam do problemu z którym męczyłem się wcześniej a mianowicie kiedy wpisuje imie jako jeden znak wszystko jest w porządku ale kiedy wpisuje pełne imie program pomija nazwisko i klase tak jakby kolejne litery przejmowaly kolejne strumienie.
P-15840
malan
» 2010-04-05 22:57:14
Najprawdopodobniej coś źle zmieniłeś. Poza tym chyba nie do końca opanowałeś łańcuchy znaków ponieważ błędnie wczytujesz dane do zmiennych (jeśli się nie mylę), np. w funkcji DodajProfil. Przy okazji - funkcja ta również jest błędnie zbudowana - w Twoim przypadku słowo return powinno wystąpić tylko raz, chociaż nie wiem po co chcesz cokolwiek zwrócić skoro i tak tego nigdzie nie zapisujesz. :)
P-15841
DejaVu
» 2010-04-05 23:05:35
cin zamień na funkcję getline.
P-15842
Grzes
Temat założony przez niniejszego użytkownika
» 2010-04-06 10:08:22
Dzieki, dopiero się uczę więc nie mów że błędnie coś zastosowałem tylko napisz dla czego a niczego nie zapisuje dlatego że to dopiero początek programu.
P-15847
malan
» 2010-04-06 12:16:20
Na przykład:
C/C++
cout << "Imie: ";
cin >> imie[ 20 ];
Ten zapis mówi (mniej więcej) tak:
Wypisz Imie: , a następnie wpisz do dwudziestego elementu tablicy znaków imie znak wprowadzony z klawiatury.
Tablica jest 20 elementowa, więc maksymalna ilość znaków jaką możesz tam wprowadzić to 19 (liczymy od 0). Ty chcesz zapisać coś do 20..., ale chwila... - takiego elementu nie ma!
Poprawny zapis:
cin.getline( imie, 20 )
Funkcja getline "wpisze" do tablicy imie maksymalnie 19 znaków wprowadzonych przez użytkownika (z uwzględnieniem białych znaków, czyli np. spacji).

Dalej...
C/C++
return imie[ 20 ];
return nazwisko[ 30 ];
return klasa[ 5 ];
To samo. Zwracasz 20 element tablicy (którego nie ma)... Zwróci Ci tylko 20 element tablicy imie (którego nie ma) ponieważ funkcja po napotkaniu return "wraca" do miejsca, z którego została wywołana...

Wróć do kursu, przeczytaj go jeszcze raz uważnie. Nie spiesz się - to nie wyścigi :). Polecam nauczyć się posługiwać string`ami - są o wiele prostsze w użyciu niż char`y.

Jeżeli chodzi o tą funkcję to ja bym to zrobił tak (używając std::string):
C/C++
void DodajProfil( void )
{
    std::string name, sername, _class;
   
    std::cout << "Imie: ";
    getline( std::cin, name );
   
    std::cout << "Nazwisko: ";
    getline( std::cin, sername );
   
    std::cout << "Klasa: ";
    getline( std::cin, _class );
   
    // Dodanie danych do struktury itp.
    return;
};
P-15852
Elaine
» 2010-04-06 12:28:47
Polecam nauczyć się posługiwać string`ami - są o wiele prostsze w użyciu niż char`y.
Mhm, wiesz jaka jest różnica między pojedynczym znakiem a ich ciągiem...?
P-15857
« 1 » 2
  Strona 1 z 2 Następna strona