Grzes Temat założony przez niniejszego użytkownika |
Błąd zmiany wskaźnika na zmienną » 2010-04-05 14:43:03 #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"; 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 |
|
DejaVu |
» 2010-04-05 16:06:09 Change from: DodajProfil( imie[ 20 ], nazwisko[ 30 ], klasa[ 5 ] );
To: DodajProfil( imie, nazwisko, klasa );
|
|
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.
|
|
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. :) |
|
DejaVu |
» 2010-04-05 23:05:35 cin zamień na funkcję getline. |
|
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. |
|
malan |
» 2010-04-06 12:16:20 Na przykład: 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... 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): 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 ); return; }; |
|
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...? |
|
« 1 » 2 |