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

Jak uprościć program?

Ostatnio zmodyfikowano 2010-10-17 17:50
Autor Wiadomość
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.)?
P-22901
ison
» 2010-10-16 22:04:11
po code dopisz src="C++"
co do problemu to tego fora:
C/C++
for( int i = a; i <= b; i++ )
{
    cout << i << " ";
    if( i % liczba == 0 ) cout << endl;
   
}
zamień na:
C/C++
for( int i = a, j = 1; i <= b; ++i, ++j )
{
    cout << i << " ";
    if( j % liczba == 0 ) cout << endl;
   
}

wracając do tamtej sprawy:
@Iname
Dlaczego \r\n, a nie \n

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.
P-22902
Elaine
» 2010-10-16 22:39:58
Dlaczego \r\n, a nie \n

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ą).
P-22903
ison
» 2010-10-16 22:42:29
@up widocznie bezpieczniej jest pisać '\r\n'
P-22904
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.
P-22905
ison
» 2010-10-16 23:58:35
@up za to na mac'u przez '\n' w ogóle nie dostaniemy nowej linii...
przynajmniej tak wynika z tego źródła: http://www.go4expert.com/forums/showthread.php?t=8021
P-22906
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:

C/C++
#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.
P-22907
ison
» 2010-10-17 00:08:27
@up spróbuj dołączyć
-lncurses
 do linkera
P-22908
1 2 3 « 4 » 5
Poprzednia strona Strona 4 z 5 Następna strona