Pobieranie całej lini znaków – dlaczego ucina pierwszą literę tablicy?

0
#include<iostream>
using namespace std;


int main()
{


	cout << "napisz zdanie:" << endl;

	char tab_zdanie[100];
	cin.ignore();    
	cin.getline(tab_zdanie, 100);


	cout << endl << tab_zdanie;

	getchar();
	return 0;
}

dlaczego ucina mi pierwszą literę tablicy? problem lezy na pewno w cin.ignore bo gdy go nie ma jest ok. Ale jeśli go usunę i użytkownik wprowadzi biały znak, np enter wtedy nic się nie wyświetli (pobierze enter)

jak to naprawić?

0

Ignorujesz pierwszy znak, niezależnie jaki jest. Użyj tego:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n')
0

tylko, że teraz ignoruje pierwszą linijkę, jak najpierw wcisnę enter a dopiero potem wpisze tekst jest ok

ale jeśli najpierw wprowadzę tekst to tekst ignorowany jest

0

Hm, rzeczywiście.

W takim razie zrobiłbym to jako pętlę peek() i ignore(), ale może ktoś zaproponuje lepsze rozwiązanie, bo nie jestem pewien.

while(isspace(cin.peek())) {
    cin.ignore(1);
}
0
programista ktory zaczyna napisał(a):

problem lezy na pewno w cin.ignore bo gdy go nie ma jest ok

A do czego Ci to ignore?

Można spróbować tak:

char text[100]{0};
while(!(strlen(text) && isalpha(*text)))
{
  memset(text, '\0', 100);
  cout << "Wpisz zdanie: ";
  cin.getline(text, 100);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1