Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

cin.getline

Ostatnio zmodyfikowano 2015-11-23 18:56
Autor Wiadomość
Anim
Temat założony przez niniejszego użytkownika
cin.getline
» 2015-11-22 12:58:26
hej :) mam pewne trudności ze zrozumieniem poniższego kodu, a właściwie ze zrozumieniem roli jaką odgrywa cin.getline (). Otóż mam fragment kodu, gdzie po "cin >> t" raz mam cin.getline, a raz tego nie mam. Różnica jest znacząca, gdy chcę policzyć ilość znaków w tablicy S1 i S2. Zawsze myślałem ,że cin.getline jako element strumienia wejściowego "nakazuje" wprowadzenie danych z klawiatury, ale tutaj chyba nie o to chodzi.

C/C++
#include <iostream>
#include <cstring>

using namespace std;

#define T_SIZE 1001

char * string_merge( char * S1, char * );

int main()
{
    int t, n;
    char S1[ T_SIZE ], S2[ T_SIZE ], * S;
   
    cin >> t; /* wczytaj liczbê testów */
   
    while( t )
    {
        cin.getline( S1, T_SIZE, ' ' );
        cin.getline( S2, T_SIZE );
       
        S = string_merge( S1, S2 );
        cout << S << endl;
        delete[] S;
        t--;
    }
   
    return 0;
}


C/C++
#include <iostream>
#include <cstring>

using namespace std;

#define T_SIZE 1001

char * string_merge( char * S1, char * );

int main()
{
    int t, n;
    char S1[ T_SIZE ], S2[ T_SIZE ], * S;
   
    cin >> t; /* wczytaj liczbê testów */
    cin.getline( S1, T_SIZE );
   
    while( t )
    {
        cin.getline( S1, T_SIZE, ' ' );
        cin.getline( S2, T_SIZE );
       
        S = string_merge( S1, S2 );
        cout << S << endl;
        delete[] S;
        t--;
    }
   
    return 0;
}

do czego dokładnie służy cin.getline w tym przypadku - po "cin>>t" :) dziękuję za pomoc :)
P-140544
carlosmay
» 2015-11-22 13:22:36
C/C++
cin.getline( S1, T_SIZE ); // wczytaj do tablicy S1 T_SIZE znaków
P-140549
Anim
Temat założony przez niniejszego użytkownika
» 2015-11-22 13:30:20
hm, no ok, a w takim razie dlaczego w pętli ,gdzie znów mam do czynienia z cin.getline(); nie wczytuje rozmiaru ? tylko nakazuje mi wprowadzić dane z klawiatury ? jaka jest różnica?
P-140550
carlosmay
» 2015-11-22 14:19:51
C/C++
cin >> t; // wprowadz liczbe obrotow petli
cin.getline( S1, T_SIZE ); // wprowadz maks T-SIZE znakow do tablicy S1 z klawiatury

while( t ) // powtarzaj petle w nieskonczonosc, chyba ze t = 0 (nie wykonuj wcale)
{
    cin.getline( S1, T_SIZE, ' ' ); // wprowadz maks T-SIZE znakow do tablicy S1 lub do napotkania znaku spacji
    cin.getline( S2, T_SIZE ); // wprowadz maks T-SIZE do tablicy S2 znakow z klawiatury
   
    S = string_merge( S1, S2 );
    cout << S << endl;
    delete[] S;
    t--;
}
 
edit:
Jeśli wprowadzisz w pętli z klawiatury: Ala ma kota. to 'Ala' zapisze się do tablicy 'S1', a reszta do tablice 'S2'.
P-140558
Anim
Temat założony przez niniejszego użytkownika
» 2015-11-22 14:27:51
Super :) zrozumiałem :) dziękuję :)
P-140561
Monika90
» 2015-11-22 14:46:07
Zamiast tego pierwszego cin.getline powinno być cin.ignore(numeric_limits<streamsize>::max(), '\n');, SPOJ używa niewłaściwych funkcji i wprowadza zamieszanie.
P-140569
Anim
Temat założony przez niniejszego użytkownika
» 2015-11-22 16:45:54
Skąd wiedziałaś, że to SPOJ ;p :D dziękuję :) faktycznie .ignore jest ciekawszy. Tylko, czy nie może zostć tylko cin.ignore()? Bez numeric_limits<streamsize>::max(), '\n' ?
P-140584
Monika90
» 2015-11-23 18:56:20
cin.ignore() pomija jeden znak,
cin.ignore(numeric_limits<streamsize>::max(), '\n'); pomija znaki aż do znaku przejścia do nowej linii włącznie.
P-140658
« 1 »
  Strona 1 z 1