grolak Temat założony przez niniejszego użytkownika |
» 2010-10-16 21:54:09 OK, no to mam nowe pytanie :) Mam taki kawałek kodu (program wypisuje liczby naturalne od a do b, a i b podaje użytkownik) cout<<"Najpierw zdefiniuj ile liczb ma być w jednej linii (aby wyglądało schludnie):" <<endl; int liczba; cin>>liczba; cout<<"Liczby to:" <<endl; for ( int i = a; i <= b; i++ ) { cout <<i <<" "; if (i % liczba == 0) cout <<endl; } cout <<endl;
(ogólnie program działa, więc jeśli coś komuś nie pasuje to najprawdopodbniej dlatego że jest to kawałek wyrwany z kodu). Jednakże mam problem - użytkownik podaje ile liczb ma być w linii (linie są dodatkowo oddzielone spacją). Jednak to działa tylko wtedy kiedy a = 1 (w zasadzie 0 też może być, bo wtedy jest w pierwszej linii 0 a w dalszych liniach ok). Jednak kiedy np. program zaczyna wypisywać liczby nie od 1, np. 5 to if (i % liczba == 0) cout <<endl; spełnia się szybciej. Tak to wygląda potem w kodzie: 1 2 3 4 5 6 7 8 9 10 - tu program działa prawidłowo, kiedy pętla zostanie wykonana 5 razy przechodzi do następnej linijki. 11 12 13 14 15 3 4 5 6 7 8 9 10 - a tu w pierwszej lini pętla zostaje wykonana 3 razy, a na końcu jest 5 i program przechodzi do następnej 11 12 13 14 15 linii (a nie chcę aby tak się działo) Tak więc prosze o pomoc w rozwiązaniu tego problemu. I również prosiłbym o w dokładne wytłumaczenie i nie zmienianie kodu tak bardzo, gdyż chcę się dowiedzieć jak jestem w stanie rozwiązać problem z moją dotychczasową wiedzą. Być może rozwiązanie jest banalne. Jeśli powyższy kod jest za mało czytelny to mogę wstawić cały program. ______ PS. Jakiego znacznika BB-Code użyć aby kod źródłowy pojawiał się tak jak wy go wstawiacie (podświetlone funkcje itp.)? |
|
ison |
» 2010-10-16 22:04:11 po code dopisz src="C++" co do problemu to tego fora: for( int i = a; i <= b; i++ ) { cout << i << " "; if( i % liczba == 0 ) cout << endl; }
zamień na: for( int i = a, j = 1; i <= b; ++i, ++j ) { cout << i << " "; if( j % liczba == 0 ) cout << endl; }
wracając do tamtej sprawy: @Iname In Windows you have to pass multi-line strings with '\r\n', otherwise the system functions don't recognize them correctly as multi-line. This is true e.g. for setting the text of Edit controls, Labels, Windows etc.
|
|
|
Elaine |
» 2010-10-16 22:39:58
In Windows you have to pass multi-line strings with '\r\n', otherwise the system functions don't recognize them correctly as multi-line. This is true e.g. for setting the text of Edit controls, Labels, Windows etc.
|
|
Fail, biblioteka standardowa dokonuje tłumaczenia \n na format natywny dla systemu (czyli pod Windowsem \r\n) dla strumieni otwartych w trybie tekstowym (stdout, stdin i stderr, a także cout, cin, cerr oraz clog pod to podpadają). |
|
ison |
» 2010-10-16 22:42:29 @up widocznie bezpieczniej jest pisać '\r\n' |
|
Elaine |
» 2010-10-16 23:36:28 Właśnie udowodniłem, że wcale nie jest - a jako bonus wynikający z korzystania z \r\n dostajemy dziwny output na innych niż Windows systemach. |
|
ison |
» 2010-10-16 23:58:35 |
|
grolak Temat założony przez niniejszego użytkownika |
» 2010-10-17 00:05:24 Ha! Nowe pytanie. Dowiedziałem się, że funkcja getch() nie działa na Linuksach (a tak w zasadzie to na Linuksach nie działa biblioteka conio.h). A ja pracuję na Linuksie. Getch() to bardzo przydatna funkcja i przydałoby się ją mieć u siebie. No i znalazłem odpowiedzi, że trzeba użyć biblioteki ncurses, curses.h czy podobnej. Tak więc mam kod: #include <curses.h> #include <iostream> using namespace std; int main() { cout << "Naciśnij dowolny klawisz." << endl; getch(); }
i wywala błąd g++ test2.cpp -o test2 /tmp/ccUIreIZ.o: In function `main': test2.cpp:(.text+0x92): undefined reference to `stdscr' test2.cpp:(.text+0x9a): undefined reference to `wgetch' collect2: ld returned 1 exit status make: *** [test2] Błąd 1
Tak samo jest kidy po include daję ncurses, lub ncurses.h. |
|
ison |
» 2010-10-17 00:08:27 @up spróbuj dołączyć -lncurses do linkera |
|
1 2 3 « 4 » 5 |