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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
1,156 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,665 wizyt
pytanie zadane 7 października 2018 w C i C++ przez Hinzeq Użytkownik (860 p.)
0 głosów
0 odpowiedzi 302 wizyt
0 głosów
2 odpowiedzi 2,551 wizyt
pytanie zadane 30 czerwca 2019 w C i C++ przez patryk123 Nowicjusz (170 p.)

93,164 zapytań

142,175 odpowiedzi

321,926 komentarzy

62,491 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 682p. - dia-Chann
  2. 670p. - CC PL
  3. 669p. - Łukasz Piwowar
  4. 656p. - Łukasz Eckert
  5. 567p. - ssynowiec
  6. 453p. - Marcin Putra
  7. 428p. - rafalszastok
  8. 423p. - Michal Drewniak
  9. 423p. - Adrian Wieprzkowicz
  10. 418p. - rucin93
  11. 415p. - Mikbac
  12. 410p. - Piotr Aleksandrowicz
  13. 408p. - ksalekk
  14. 402p. - Mariusz Fornal
  15. 401p. - Dawid128
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...