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. 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; }
|
|
pekfos |
» 2017-01-05 22:28:20 cin.sync() na SPOJu? |
|
mokrowski |
» 2017-01-05 22:34:20 Adres tego zadania ze SPOJ'a podaj. |
|
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/ |
|
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. |
|
mokrowski |
» 2017-01-05 22:43:05 #include <iostream> #include <string>
using namespace std;
void przetwarzanie_napisu( string & napis ) { }
int main() { size_t licznik; string linia; cin >> licznik; for( size_t i = 0; i < licznik; ++i ) { cin >> linia; przetwarzanie_napisu( linia ); cout << linia << '\n'; } }
|
|
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. |
|
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. |
|
« 1 » 2 |