getline a tablica

getline a tablica
K5
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:2
0

Witam,
Witam, piszę prosty program do tworzenia rozgrywek pucharowych i mam fragment, w którym użytkownik wpisuje nazwy drużyn:

Kopiuj
string teams_base[teams_quantity];
cout<<"Enter team names: "<<endl;
for (int i=1;i<teams_quantity;i++) //teams enter
    {
    cout<<"Team "<<i+1<<": ";
    getline(cin,teams_base[i]); 
    }

Program jednak nie do końca działa, gdyż omija on pierwszą drużynę. Następne mogę podawać bez żadnego problemu. Wie ktoś o co chodzi? (Dopiero zaczynam używać getline'a). Swoją drogą, mogłem też po prostu użyć std::cin, ale zależy mi na tym, aby dało się wprowadzać nazwy ze spacjami w środku (chyba, że da się to zrobić cin-em).

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Szczecin
2

cin nie wyjmuje znaku nowej linii z wejścia standardowego, więc getline pierw widzi pustą linię.
Przed pętlą:

Kopiuj
cin.ignore(numeric_limits<streamsize>::max(), '\n');

Althorion
Moderator C/C++
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 7 godzin
  • Postów:1605
2

Tak poza tym, jeśli teams_quantity nie jest constexpr (stałą znaną w momencie kompilacji), to wykraczasz poza standard — kompilator ma święte prawo się obrazić na coś takiego. Używaj raczej std::vector.

Poza tym, tablice itd. w C++ są numerowane od zera, a Ty zaczynasz od jedynki — dlaczego?

K5
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:2
0

Wiem, że są numerowane od zera. To była desperacka próba przetestowania na zasadzie "a może zadziała" (tak wiem że to głupie). Po tym jak nie zadziałało wkleiłem kod na forum. Przedtem była to oczywiście wartość 0.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.