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

O jedną iterację za mało w pętli ze wskaźnikami

Ostatnio zmodyfikowano 2017-01-05 23:39
Autor Wiadomość
vizzars
Temat założony przez niniejszego użytkownika
O jedną iterację za mało w pętli ze wskaźnikami
» 2017-01-05 22:13:01
Witam serdecznie,
Na wstępie - jestem nowicjuszem. Powiedzmy, że jest zadanie na SPOJU, które wymaga dynamicznego alokowania tablicy string'ów.
Problem polega na tym, że jeżeli podaję np. liczbę 3, program czyta tylko dwie linie i dwie wypisuje.
Jeżeli już, to powiedziałbym, że powinien czytać 4 i wypisywać 4, przecież indeks leci od zera.
Błąd jest z pewnością trywialny, ale nie chce lecieć po łebkach z nauką programowania.
Z góry dziękuje za cierpliwość, pozdrawiam.

C/C++
int main()
{
    int x = 0;
    scanf_s( "%d", & x );
    string * linia, * tmp;
    linia = new string[ x ];
    tmp = linia;
    for( int i = 0; i < x; i++ )
    {
        cin.sync();
        getline( cin, * tmp );
        tmp++;
    }
    tmp = linia;
    for( int i = 0; i < x; i++ )
    {
        cin.sync();
        cout << * tmp << endl;
        tmp++;
    }
    _getch();
    delete[] linia;
    return 0;
}
P-156056
pekfos
» 2017-01-05 22:28:20
cin.sync() na SPOJu?
P-156058
mokrowski
» 2017-01-05 22:34:20
Adres tego zadania ze SPOJ'a podaj.
P-156059
vizzars
Temat założony przez niniejszego użytkownika
Re
» 2017-01-05 22:34:54
Okey, w takim razie jaki jest najlepszy sposób, aby wykonać to zadanie (a przynajmniej tą część)? Cały dzień nad tym siedzę.
EDIT: Dobra, tak sobie teraz myślę, że lepiej to zrobić na typie char, ale to nie zmienia faktu, że w przyszłości mogę chcieć wczytać sobie stringa.

http://pl.spoj.com/problems/FLAMASTE/
P-156060
pekfos
» 2017-01-05 22:39:52
które wymaga dynamicznego alokowania tablicy string'ów.
Już źle.

Wystarczy jedna tablica znaków i kilka intów do sterowania. Twoim problemem jest stan strumienia wejściowego zostawianego przez różne metody wczytywania danych. Rozwiązanie to dokumentacja i rozumienie tego, co się robi.
P-156062
mokrowski
» 2017-01-05 22:43:05
C/C++
#include <iostream>
#include <string>

using namespace std;

void przetwarzanie_napisu( string & napis ) {
   
}

int main() {
    size_t licznik;
    string linia;
    cin >> licznik;
    // Wczytywanie linii i przetwarzanie
    for( size_t i = 0; i < licznik; ++i ) {
        cin >> linia;
        przetwarzanie_napisu( linia );
        cout << linia << '\n';
    }
}
P-156063
vizzars
Temat założony przez niniejszego użytkownika
Re:
» 2017-01-05 23:03:33
Dzięki wielkie, rzeczywiście to zupełnie inne (i świetne) podejście do problemu.
Nie zmienia to faktu, że w przyszłości gdybym chciał stworzyć tablicę stringów, gdzie n jest rozmiarem, to dalej nie wiedziałbym jak, bo jest o jeden element za mało.
Zmiana scanf'a na cin nie pomogła, a stringa da się wczytywać chyba tylko getline() z tego co wiem.
P-156067
mokrowski
» 2017-01-05 23:20:16
@vizzars, @pefkos Ci napisał. Mieszasz 2 (a jak dodać podejście czyste-C bez synchronizacji strumień-stdio to nawet 3 :-/) światy sposobów przetwarzania przyjmowanych danych i to jest podstawowy problem. Powinieneś mieć poważny powód by tak robić. W tym przykładzie go nie masz.
P-156070
« 1 » 2
  Strona 1 z 2 Następna strona