petla do...while i tablice dwu wymiarowe
Ostatnio zmodyfikowano 2011-02-27 17:03
neke Temat założony przez niniejszego użytkownika |
petla do...while i tablice dwu wymiarowe » 2011-02-27 11:41:36 Jak tak dalej pójdzie to nazwę forum będzie można zmienić na "Pytania neke" :) Na wstępie zaznaczę, że czytałem kurs, wszystko było zrozumiałe. Nie znalazłem tam jednak odpowiedzi na moje pytania, dlatego pozwoliłem sobie zadać pytanie osobom bardziej doświadczonym. Cel: 1. Program tworzący tablice z imionami i numerami tel a następnie wyświetlający ja na ekranie. Wielkość tablicy jest definiowana przez użytkownika. 2. Program, który pobiera oprócz imienia również nazwisko (i przechowuje je w tablicy dwuwymiarowej) Ad. 1- Rozwiązanie:#include <iostream> #include <conio.h>
int main() { using namespace std; int ile; cout << "Podaj liczbe osob" << endl; cin >> ile; char imie[ ile ]; int tel[ ile ]; int licznik = 0; do { cout << "Podaj imie" << endl; cin >> imie[ licznik ]; cin.sync(); cout << "Podaj tel" << endl; cin >> tel[ licznik ]; cin.sync(); licznik++; } while( licznik < ile ); licznik = 0; cout << "Wprowadziles nastepujace dane" << endl; do { cout << imie[ licznik ] << " "; cout << tel[ licznik ] << endl; licznik++; } while( licznik < ile ); getch(); return 0; }
Problem:Program zamiast podawać pełne imię zwraca tylko pierwszą jego literę. Ad.2 - Rozwiązanie#include <iostream> #include <conio.h>
int main() { using namespace std; int ile; cout << "Podaj liczbe osob" << endl; cin >> ile; int dlugosc = 30; char imie_nazwisko[ ile ][ dlugosc ]; int tel[ ile ]; int licznik = 0; do { cout << "Podaj imie i nazwisko" << endl; cin.getline( imie_nazwisko[ licznik ][ dlugosc ], dlugosc ); cin.get(); cout << "Podaj tel" << endl; cin >> tel[ licznik ]; cin.get(); cin.get(); licznik++; } while( licznik < ile ); licznik = 0; cout << "Wprowadziles nastepujace dane" << endl; do { cout << imie_nazwisko[ licznik ][ dlugosc ] << " "; cout << tel[ licznik ] << endl; licznik++; } while( licznik < ile ); getch(); return 0; }
Problem Pierwszy argument w cin.getline jest źle zdefiniowany. Pytanie jak powinno być poprawnie, żeby program wypełniał tablicę dwuwymiarową? Mam nadzieję, że post tym razem nie jest dużo za długi :) |
|
BlackDante |
» 2011-02-27 12:00:24 Ad2. a to trzeba używać getline'a od razu ? nie lepiej cin >> Dane[ licznik ][ 'imie_nazwisko' ];
oczywiście dane muszą być oddzielone spacją wtedy, w dodatku tak łatwo możesz stworzyć program który w odzielnych częściach tablicy będzie miał odzielnie imie i nazwisko, ale do tego to już chyba lepiej użyć kontenera map, a co do pierwszego to chyba zbyt zaspany jestem xD |
|
ison |
» 2011-02-27 12:04:24 1) otóż pisząc deklarujesz tablicę znaków a nie tablicę stringów zatem pisząc cin >> imie[ licznik ]; wczytujesz tylko jeden znak char imie[ ile ][ maksymalna_dlugosc_imienia ];
- w ten sposób zadeklarujesz ile ciągów znaków 2) tutaj podobnie jak wyżej próbujesz przekazać tylko 1 znak do metody cin.getline() podczas gdy ten oczekuje tablicy ;) |
|
neke Temat założony przez niniejszego użytkownika |
» 2011-02-27 13:34:55 Ad.1 Dzienx. Problem rozwiązany po zmianie zniennej int na string. Ad.2 To dalej nie jest dla mnie jasne. Pomimo, że usunąłem z cin.getline drugą zmienną ("dlugość"), dalej nie idzie Obecnie tworzę tablicę, która wygląda tak: np. ile=2 jan kos ola kos imie_nazwisko [0] [0] ='j'; imie_nazwisko [0] [1] ='a'; imie_nazwisko [0] [2] ='n'; imie_nazwisko [0] [3] =' '; imie_nazwisko [0] [4] ='k'; imie_nazwisko [0] [5] ='o'; imie_nazwisko [0] [6] ='s'; imie_nazwisko [0] [...] =0; imie_nazwisko [1] [0] ='o'; imie_nazwisko [1] [1] ='l'; imie_nazwisko [1] [2] ='a'; ... Wydaje się więc OK. Będę wdzięczny za poprawienie kodu przy użyciu getline. Podejrzewam, że problem będzie również przy wyświetlaniu tablicy dwuwymiarowej :) int main() { using namespace std; int ile; cout << "Podaj liczbe osob" << endl; cin >> ile; int dlugosc = 30; string imie_nazwisko[ ile ][ dlugosc ]; int tel[ ile ]; int licznik = 0; do { cout << "Podaj imie i nazwisko" << endl; cin.getline( imie_nazwisko[ licznik ], dlugosc ); cin.get(); cout << "Podaj tel" << endl; cin >> tel[ licznik ]; cin.get(); licznik++; } while( licznik < ile ); licznik = 0; cout << "Wprowadziles nastepujace dane" << endl; do { cout << imie_nazwisko[ licznik ] << " "; cout << tel[ licznik ] << endl; licznik++; } while( licznik < ile ); getch(); return 0;
|
|
ison |
» 2011-02-27 16:05:09 |
|
neke Temat założony przez niniejszego użytkownika |
» 2011-02-27 17:03:06 dzięki. Pomogła zmiana zmiennej ze string na char |
|
« 1 » |