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
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.
lo0ol [ Jónior ]
Zmienna i wynosi 0. Mam takie okienko przy próbie wpisania rekordu (ręcznie) nawet przy najprostszym programie.
Toolism [ GameDev ]
pokaż cyck..ee.. kod.
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;
›
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 :|
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:)
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:
lo0ol [ Jónior ]
K, działa .. dzięki. ;)