Ĺadny brzuch
Witam,
mam zadany taki program:
1. Program ma wczytywać z klawiatury ciąg znaków alfanumerycznych (max 120);
2. użytkownik podaje ilość znaków, które wprowadzi z klawiatury;
3. użytkownik wprowadza łańcuch znaków;
4. Sprawdzam za pomocą konstrukcji switch ile jest samogłosek;
Moja wątpliwość:
Pkt 1. rozwiązuję przez definicję tablicy znaków, skoro max 120, zatem mam: char lancuch[120];
Pkt 2. rozwiązuję przez cin>>n; gdzie n: int n;
Pkt 3. to cin>>lancuch;
Problem jest taki, że użytkownik, może wprowadzić mniej znaków, niż zadeklarował i w pętli, w której będzie n przebiegów wczytam śmieci z pamięci, gdzie przypadkiem może być umieszczona samogłoska. Oczywiście mógłbym najpierw, np. wyzerować tablicę. Co jednak, gdy użytkownik wpisze łańcuch x znaków, gdzie x >> n (znacznie większe). Wtedy program mi się sypie, bo program zapisał komórki pamięci niezarezerwowane na ten lancuch[15] (15 bajtów)?
Czy jest możliwość, żeby napisać tak ten program, żeby użytkownik mógł z klawiatury wpisać nie więcej niż 120 znaków? Żeby wyglądało to tak, że wprowadza do 120 max a potem kursor stoi w miejscu, dopóki użytkownik nie wciśnie [enter]?
Bardzo proszę o odpowiedź.
Sorry, ale nie wiem jak zrobić, żeby te Codeboxy były mniejsze, stosowne do podanej treści :))
Użytkownik BlackMesa edytował ten post 22 listopad 2008, 15:31
Powód edycji: wpisz [code] zamiast [codebox]
użyj cin.width();w twoim przypadku będzie to wyglądać tak:cin.width(120); //lub 121 cin>>lancuch;
Witam,
sprawdzę to zaraz, a tymczasem jeszcze pytanie:
Na innym forum zaproponowali mi użycie funkcji cin.getline(tab, n), gdzie n to zmienna int, którą wprowadza użytkownik, podając ilość znaków, które wprowadzi z klawiatury. Problem w tym, że program jakby omija tę linię i nie mogę wpisać tego łańcucha.
Proszę o wyjaśnienie.
Pozdro,
Thebossfan.
P.S. Nie przerabiałem jeszcze tematu funkcji więc proszę o jakieś przystępne wyjasnienie. Aha i jeszcze jedno: gdzie mogę PO POLSKU znaleźć spis funkcji itd... Po angielsku ciężko mi czytać ten specjalistyczny język.
Możesz dać cały kod tego programu? Możliwe, że wcześniej jest jakiś bug, stąd ten problem.
int n; char tab[121] = { 0 }; cout<<"podaj n"; cin >> n; cin.getline(tab,n); if(tab[n-1] == 0) cout << "za malo !"; else if(tab[n] != 0) cout << "za duzo !";
cin >> n; getchar(); cin.getline(tab,n);
kiedyś miałam identyczny problem. Po instrukcji do wprowadzenia do n, musisz dać getchar()
Zamień swój kod na:
int n; char tab[121]; cin.width(121); cin >> tab; n = strlen(tab); cout << tab << endl; cout << n << endl;
albo lepiej na:
string tab; cin.width(121); cin >> tab; cout << tab << endl; cout << tab.size() << endl;
Eliminujesz pomyłki podczas wprowadzana ilości znaków. Zawsze pobierzesz maksymalnie 120 znaków z linii. Opis stringa znajdziesz tu:
http://www.google.pl...t...=Szukaj&lr=
http://pl.wikibooks.org/wiki/C%2B%2B (Dodatek A: Biblioteka STL)
Użytkownik Kozack edytował ten post 24 listopad 2008, 02:59
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
mam zadany taki program:
1. Program ma wczytywać z klawiatury ciąg znaków alfanumerycznych (max 120);
2. użytkownik podaje ilość znaków, które wprowadzi z klawiatury;
3. użytkownik wprowadza łańcuch znaków;
4. Sprawdzam za pomocą konstrukcji switch ile jest samogłosek;
Moja wątpliwość:
Pkt 1. rozwiązuję przez definicję tablicy znaków, skoro max 120, zatem mam: char lancuch[120];
Pkt 2. rozwiązuję przez cin>>n; gdzie n: int n;
Pkt 3. to cin>>lancuch;
Problem jest taki, że użytkownik, może wprowadzić mniej znaków, niż zadeklarował i w pętli, w której będzie n przebiegów wczytam śmieci z pamięci, gdzie przypadkiem może być umieszczona samogłoska. Oczywiście mógłbym najpierw, np. wyzerować tablicę. Co jednak, gdy użytkownik wpisze łańcuch x znaków, gdzie x >> n (znacznie większe). Wtedy program mi się sypie, bo program zapisał komórki pamięci niezarezerwowane na ten lancuch[15] (15 bajtów)?
Czy jest możliwość, żeby napisać tak ten program, żeby użytkownik mógł z klawiatury wpisać nie więcej niż 120 znaków? Żeby wyglądało to tak, że wprowadza do 120 max a potem kursor stoi w miejscu, dopóki użytkownik nie wciśnie [enter]?
Bardzo proszę o odpowiedź.
Sorry, ale nie wiem jak zrobić, żeby te Codeboxy były mniejsze, stosowne do podanej treści :))
Użytkownik BlackMesa edytował ten post 22 listopad 2008, 15:31
Powód edycji: wpisz [code] zamiast [codebox]
użyj cin.width();w twoim przypadku będzie to wyglądać tak:cin.width(120); //lub 121 cin>>lancuch;
Witam,
sprawdzę to zaraz, a tymczasem jeszcze pytanie:
Na innym forum zaproponowali mi użycie funkcji cin.getline(tab, n), gdzie n to zmienna int, którą wprowadza użytkownik, podając ilość znaków, które wprowadzi z klawiatury. Problem w tym, że program jakby omija tę linię i nie mogę wpisać tego łańcucha.
Proszę o wyjaśnienie.
Pozdro,
Thebossfan.
P.S. Nie przerabiałem jeszcze tematu funkcji więc proszę o jakieś przystępne wyjasnienie. Aha i jeszcze jedno: gdzie mogę PO POLSKU znaleźć spis funkcji itd... Po angielsku ciężko mi czytać ten specjalistyczny język.
Możesz dać cały kod tego programu? Możliwe, że wcześniej jest jakiś bug, stąd ten problem.
int n; char tab[121] = { 0 }; cout<<"podaj n"; cin >> n; cin.getline(tab,n); if(tab[n-1] == 0) cout << "za malo !"; else if(tab[n] != 0) cout << "za duzo !";
cin >> n; getchar(); cin.getline(tab,n);
kiedyś miałam identyczny problem. Po instrukcji do wprowadzenia do n, musisz dać getchar()
Zamień swój kod na:
int n; char tab[121]; cin.width(121); cin >> tab; n = strlen(tab); cout << tab << endl; cout << n << endl;
albo lepiej na:
string tab; cin.width(121); cin >> tab; cout << tab << endl; cout << tab.size() << endl;
Eliminujesz pomyłki podczas wprowadzana ilości znaków. Zawsze pobierzesz maksymalnie 120 znaków z linii. Opis stringa znajdziesz tu:
http://www.google.pl...t...=Szukaj&lr=
http://pl.wikibooks.org/wiki/C%2B%2B (Dodatek A: Biblioteka STL)
Użytkownik Kozack edytował ten post 24 listopad 2008, 02:59