• 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.

VPS Starter Arubacloud
0 głosów
902 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,526 wizyt
pytanie zadane 7 października 2018 w C i C++ przez Hinzeq Użytkownik (860 p.)
0 głosów
0 odpowiedzi 264 wizyt
0 głosów
2 odpowiedzi 2,272 wizyt
pytanie zadane 30 czerwca 2019 w C i C++ przez patryk123 Nowicjusz (170 p.)

92,452 zapytań

141,261 odpowiedzi

319,074 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...