natka Temat założony przez niniejszego użytkownika |
Wczytywanie znaków ze standardowego wejscia » 2015-02-22 20:11:44 Witam. Mam napisać programik który wczytuje wyrazy z wejścia. Każdy znak ma podwoić z wyjątkiem znaku nowej linii (więc musi być możliwość wpisania kilku linii). Rozwiązałam to w ten sposób, że podajemy ile linii chcemy wprowadzić. Gdy było to napisane Scanf i tylko jedna linia to działało. Obecnie mój kod wygląda tak i się wszystko sypie. #include <stdio.h> using namespace std; int main( void ) { int linie[ 1 ]; char tablica[ 100 ]; printf( "Podaj ilsc linii które chcesz wprowadzic: \n" ); scanf( "%d", linie ); printf( "Podaj tekst: \n" ); char tablica2[ 200 ]; int zm = 1; int i = 0; int zmienna; int k = 0; for( i = 0; i <=* linie; i++ ) { scanf( "%s", tablica ); for( zmienna = 0; zmienna >= sizeof( tablica ); zmienna++ ) { tablica2[ k ] = tablica[ i ]; tablica2[ k + 1 ] = tablica[ i ]; k = k + 2; } printf( "%s\n", tablica ); printf( "%s\n", tablica2 ); } printf( "%s\n", tablica2 ); return 0; } Ktoś ma jakiś pomysł, jak to naprawić, żeby w miarę działało? |
|
Brunon3 |
» 2015-02-22 20:13:27 << delete >> |
|
pekfos |
» 2015-02-22 20:15:21 Się sypie, czyli co? Błąd wykonania? |
|
natka Temat założony przez niniejszego użytkownika |
» 2015-02-22 20:17:27 Kompiluje się (g++ na linuksie), cos sobie wypisuje ale to nie o to co chodzi. jest problem w pętlach for :( |
|
pekfos |
» 2015-02-22 20:20:06 for( i = 0; i <=* linie; i++ ) { scanf( "%s", tablica ); for( zmienna = 0; zmienna >= sizeof( tablica ); zmienna++ ) { tablica2[ k ] = tablica[ i ]; |
Gdzie w tym sens? Warunki w obu pętlach mają złe operatory, a przypisanie tablica[i] co niby robi? i to numer linii, a miał być numer znaku w tablicy źródłowej. Zmień nazwę zmiennej dla pierwszej pętli, dopisz zerowanie i inkrementację i w odpowiednich miejscach. I najlepiej zrób wszystko, a nie na raty.. |
|
michal11 |
» 2015-02-22 20:22:31 Po co ci tablica jednoelementowa ? Widzę w twoim programie sporo niepotrzebnych rzeczy. Musisz pisać w C czy może być c++ ? Poczytaj o dynamicznej alokacji, przyda ci się jeżeli chcesz to zrobić "ładnie". Jeżeli chcesz zrobić to w taki sposób, że będziesz miała tablice wyrazów to musisz zrobić sobie tablicę dwuwymiarową charów. Wtedy wystarczy tylko w pętli wczytywać do każdego wiersza wyraz, mniej więcej będzie to wyglądało tak: for( int i = 0; i < iloscWyrazow; ++i ) { scanf( "%s", tablica[ i ] ); }
|
|
natka Temat założony przez niniejszego użytkownika |
» 2015-02-22 20:39:37 Nie musi być koniecznie w C. Może być w C++, ale pod Linuxem ;) Jest jakieś proste rozwiązanie dla C++ ? Bo z tablicami coś mi nie idzie. |
|
Lora |
» 2015-02-22 21:05:27 Możesz użyć obiektu string i do pobierania tekstu używać funkcji getline #include <iostream> #include <string>
using namespace std;
int main() { string tekst; getline( cin, tekst, '#' ); }
Trzeci argument funkcji getline określa znak, którym zakańczasz pobieranie tekstu. Czyli teraz wprowadzając tekst możesz normalnie naciskać enter, żeby dodać kilka lini, a wpisany tekst zakończyć poprzez dodanie znaku #. Do pojedynczej litery string możesz się dobrać normalnie przez operator [] : tekst[ 0 ] = 'c' , a przedłużać string możesz po prostu przez operator += : tekst += 'a' . I to już w pętli rób. |
|
« 1 » 2 |