• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed getline pomija pierwszy lancuch, cin.ignore nie pomaga.

Object Storage Arubacloud
0 głosów
923 wizyt
pytanie zadane 4 stycznia 2017 w C i C++ przez kroliczysyn Początkujący (390 p.)
zamknięte 4 stycznia 2017 przez kroliczysyn

Cześć!

Znalazłem masę artykułów nawet na forach (na przykład: http://forum.pasja-informatyki.pl/202869/c-cin-getline-omija-pierwszy-lancuch?show=202869#q202869), ale jak w temacie, u mnie funkcja cin.ignore nie bardzo chce działać. 

Problem -> pominięcie pierwszego łańcucha (1. ciąg znaków do spacji).

No i prośba o wytłumaczenie dlaczego cin.ignore() w moim przypadku nie działa :)

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <ctime>
#include <cstring>

using namespace std;

char randomChar()
{
    static char const letters[] = "abcdefghijklmnopqrstuvwxyz"
                                  "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    return letters[rand() % (sizeof(letters) - 1)];
}

int main()
{
	string fraza;
	
	cout<<"Wpisz wybrany przez Ciebie tekst: "<<endl;
	cin.ignore();
	cin>>fraza;
	getline (cin,fraza);
	
	cout<<"Najpierw rozdziele fraze na pojedyncze wyrazy, potem je pomieszam."<<endl;
    cout <<"wlasnie napisales: "<< fraza <<endl;
  
    string korektor = " ,.-!:;";
    char* schowek;
     
    char *cosnowego = new char[fraza.length() + 1];
    strcpy(cosnowego, fraza.c_str());
     
    cout<<"Rozdziela tekst: ->"<<fraza<<"<- na poszczegolne wyarzy: "<<endl;
    schowek = strtok( cosnowego, korektor.c_str() );
     
    while( schowek != NULL ) 
	{
		cout<<schowek<<endl;
		cout<<"wyraz ma: "<<strlen(schowek)<<" znakow."<<endl;
		srand(time(NULL));
    	schowek[0]=randomChar();
    	cout<<schowek[0];
    	cout<<schowek[1];
    	for (int i = 2; i < strlen(schowek)-2; ++i)
    	{
        	cout << randomChar();
    	}
    	cout<<schowek[strlen(schowek)-2];
    	for (int i = strlen(schowek)-1; i < strlen(schowek); ++i)
    	{
        	cout << randomChar();
    	}
    	cout<<endl;
        schowek = strtok( NULL, korektor.c_str() );
    } 
    return 0;
}

 

komentarz zamknięcia: odpowiedz na pytanie jest w komentarzu
komentarz 4 stycznia 2017 przez Evelek Nałogowiec (28,960 p.)
Spróbuj dopisać najpierw "#include <string>".
komentarz 4 stycznia 2017 przez kroliczysyn Początkujący (390 p.)
Niestety pudło :(
komentarz 4 stycznia 2017 przez Evelek Nałogowiec (28,960 p.)
string fraza;
     
    cout<<"Wpisz wybrany przez Ciebie tekst: "<<endl;
    cin>>fraza;
    cin.ignore();
    getline (cin,fraza);

Spróbuj tak, łącznie z #include <string>

komentarz 4 stycznia 2017 przez kroliczysyn Początkujący (390 p.)
dalej to samo :( znaczy wszystko sie kompiluje gitarka, ale dalej program mi dalej pomija pierwszy wyraz (ciag znakow do pierwszej spacji).

2 odpowiedzi

+1 głos
odpowiedź 4 stycznia 2017 przez Gambr Dyskutant (7,530 p.)
1. cin.get(); 2. std::cin.ignore(std::numeric_limits::max(), '\n'); cin.ignore(numeric_limitsmax(), '\n');
komentarz 4 stycznia 2017 przez Gambr Dyskutant (7,530 p.)
Przepraszam za nieprzejrzystość ale piszę z telefonu i nie mam możliwości zamieszczenia kodu do odpowiedniego pola. Przedstawiłem dwie opcje.
komentarz 4 stycznia 2017 przez kroliczysyn Początkujący (390 p.)
Co dokładnie ma robić numeric_limits? wyskakuje błąd że u mnie jest nie zdeklarowana
komentarz 4 stycznia 2017 przez Gambr Dyskutant (7,530 p.)
Potrzebujesz do tego biblioteki string. Ja do swoich aplikacji używam tylko cin.get(); i to wystarcza do poprawnego jej użytkowania.
komentarz 4 stycznia 2017 przez kroliczysyn Początkujący (390 p.)
mam tą biblioteke dopisaną, a przy użyciu cin.get program sie nie kompiluje
, nie wiem co robię nie tak
komentarz 4 stycznia 2017 przez Gambr Dyskutant (7,530 p.)
cin.get(); getline(cin,liczba);
komentarz 4 stycznia 2017 przez Gambr Dyskutant (7,530 p.)
Po zapytaniu użytkownika o dane zapisuj je w wymieniony wyżej sposób. Liczba jest to przykładowa zmienna.
komentarz 4 stycznia 2017 przez kroliczysyn Początkujący (390 p.)
Dzięki za pomoc! :)
komentarz 4 stycznia 2017 przez Gambr Dyskutant (7,530 p.)
Proszę bardzo :)
0 głosów
odpowiedź 4 stycznia 2017 przez kroliczysyn Początkujący (390 p.)
najprostszym rozwiązaniem jest usunięcie cin.ignore(); i cin>>fraza; wtedy wszystko śmiga :)

Podobne pytania

+1 głos
2 odpowiedzi 1,553 wizyt
pytanie zadane 7 października 2018 w C i C++ przez Hinzeq Użytkownik (860 p.)
0 głosów
0 odpowiedzi 266 wizyt
0 głosów
2 odpowiedzi 2,325 wizyt
pytanie zadane 30 czerwca 2019 w C i C++ przez patryk123 Nowicjusz (170 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...