GRY-Online.pl --> Archiwum Forum

C++, wprowadzanie rekordów

13.02.2008
20:26
[1]

lo0ol [ Jónior ]

C++, wprowadzanie rekordów

Halo,

podczas próby wprowadzenia jakiegokolwiek rekordu za pomocą klawiatury (cin >> blabla|i|.xaxa;) wyskakuje mi błąd widoczny po prawej stronie. Dokładnie taki sam problem występuje na kompach w szkole podczas lekcji programowania. Jaka może być tego przyczyna? :(



// pionowe krechy imituja nawias kwadratowy ;p


C++, wprowadzanie rekordów - lo0ol
13.02.2008
20:56
[2]

maVes [ Generaďż˝ ]

Podałeś zbyt mało szczegółów dotyczących tego błędu ale obstawiam, że odwołujesz się poza tablicę. Upewnij się że zmienna "i" jest poprawnie zainicjalizowana i że nie przekracza rozmiaru tablicy.

13.02.2008
21:11
[3]

lo0ol [ Jónior ]

Zmienna i wynosi 0. Mam takie okienko przy próbie wpisania rekordu (ręcznie) nawet przy najprostszym programie.

13.02.2008
21:14
[4]

Toolism [ GameDev ]

pokaż cyck..ee.. kod.

13.02.2008
21:17
[5]

lo0ol [ Jónior ]

Troche skrócony:

#include <iostream>
#include <stdlib.h>
using namespace std;


typedef struct ocena ‹
char *nazwa;
int stopnie[10];
int ocena_sem;
int ocena_roczna;
›;

typedef struct osoba ‹
char *imie;
char *nazwisko;
int nr_ew;
char *klasa;
ocena wyniki[20];
›;

int main()

osoba uczen[30];
int i,liczba_uczniow;
cout << "Liczba uczniow (max 30): ";
cin >> liczba_uczniow;
cout << "\n\n";

for (i=0; i<liczba_uczniow; i++) ‹
cout << "Uczen numer: " << i+1 << endl;
cout << "Imie: ";
cin >> uczen|i|.imie;
›;

system("PAUSE>nul");
return 0;

13.02.2008
21:23
[6]

maVes [ Generaďż˝ ]

Nie przydzielasz pamięci dla zmiennych imie, nazwisko i klasa. Są to zwykłe wskaźniki. Zamień je na tablice znakowe, np. char imie[15];

W wersji ze wskaźnikami wyglądałoby to mniej więcej tak:
char* imie;
imie = new char[20];
cin >> *imie; // Zwróć uwagę na gwiazdkę
cout << *imie; // Wypisanie tego co jest we wskaźniku, a nie adresu na jaki wskazuje
delete[] imie; // Zwolnienie pamięci

// Edit
Toolism - tak, przy wysyłaniu postów te znaki są tak zamieniane :|

13.02.2008
21:26
[7]

Toolism [ GameDev ]

ok rozumiem ze wszędzie tam gdzie widzę < i > tak naprawdę są klamry? a uczen to tak naprawdę uczen? Jedyne co mi tutaj wyglada podejrzanie to pointery na char w definicji struktur.. nie mozna tego w taki sposób w jaki to robisz przekazac. Zmień to tak jak napisał maves albo miej jakis tempowy string do którego najpierw przerzucac bedziesz input a potem przy pomocy strcpy mozesz juz to spokojnie kopiowac do tych pól w strukturach.

maVes -> już widzę;) ciąg klamra i klamra zamieniany jest tutaj na ITALICA:)

13.02.2008
21:32
[8]

maVes [ Generaďż˝ ]

Zgadzam się z Toolismem, skoro piszesz w C++ a nie C to możesz zrezygnować z tak zwanych C-stringów i korzystać tych które są w Bibliotece Standardowej. Do użycia wymagają dołączenia nagłówka <string>

// Przykładowe użycie

#include <string>

// Gdzieś w kodzie...
std::string imie;
std::cin >> imie;
cout << imie;

std::string jest dużo wygodniejszy w użyciu od tablic znakowych - nie musisz się martwić o to, że przekroczysz zakres. Obiekty same przydzielają dodatkową pamięć w razie potrzeby.

Tu masz dokładny opis tej klasy:

13.02.2008
22:49
smile
[9]

lo0ol [ Jónior ]

K, działa .. dzięki. ;)

© 2000-2024 GRY-OnLine S.A.