Tabelki, grafiki, menu, belki, menu rozwijane itp. w języku C - od czego zacząć?

0

Obecnie uczę się pisania bzdetnych programików które działają w konsoli.
Moje pytanko:
Czym powinienem się zainteresować by w przyszłości móc tworzyć graficzne programy?

Na początek będą to softy podobne do: Norton Commander, TAG i inne działające wieki temu spod MS-DOSa.

1

Można korzystać z windows.h albo ze starej biblioteki conio.h gdzie masz funkcje textcolor() i textbackground(). Z kolei do tworzenia tabelek przydadzą się kody ASCII

0

A co z ncurses?

1
gavallon napisał(a):

Ciekawe te znaczki. Teraz problem tylko z użyciem tego wewnątrz printf...

Co tu jest trudnego?

printf("%c", 150);
0

Monotonna robota ale fajne to :-)
W przyszłości dodać trochę kolorów, pobawić się z textbackground()'ami jak mówi Haskell i mozna stworzyć jakiś mini programik który "jakoś" w tej konsoli
zacznie "wyglądać"...


#include <stdio.h>
#include <stdlib.h>

int main(void)
{

char kontynuj;
int wyjscie = 0;
while (wyjscie == 0)

{
    printf("\nCzy chcesz kontynuowac? (t/n): ");
    scanf("%c", &kontynuj);
            getchar();
    if (kontynuj == 't')  {

        printf("dzialamy dalej");
        break;
    }
    else if (kontynuj == 'n')
        return 0;

    else
        printf("Podales bledna litere!\n");
}

 system ("cls");
 printf(" DALSZA CZESC PROGRAMU \n\n");
 printf(" %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", 201, 205, 205, 205, 205, 205, 205, 205, 205, 205,205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205,205, 205, 205, 205, 205, 205, 205, 205, 187);
 printf(" \n %c  Witamy w programie Gavallona  !! %c \n %c  Test  Test  Test  Test Test Test %c \n %c  Fajne to, fajne, fajne, fajne    %c\n", 186, 186, 186, 186, 186, 186);
 printf (" %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", 200, 205, 205, 205, 205, 205, 205, 205, 205, 205,205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205,205, 205, 205, 205, 205, 205, 205, 205, 188);
 printf (" \n\n ");
 printf (" %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", 196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, 196, 196, 196);
 printf ("\n\n\n\n");


return 0;
}


0

Monotonna robota...

No, bo takie rzeczy jak ileś tam tych samych znaczków to się w pętli robi, a nie wkleja po kolei tak jak tutaj:

printf(" %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", 201, 205, 205, 205, 205, 205, 205, 205, 205, 205,205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205,205, 205, 205, 205, 205, 205, 205, 205, 187);

Popatrz ile masz tych 205. Przecież zwariować można od takiego wklejania.

0

Grześku, to są dopiero początki nauki. Buduję program i program ma swoje wersje. Nie chciał byś wiedzieć
jak wygląda wersja v1.00 :-) :-)
Dziś jest już 3.03 :-) i nareszcie ma "ręce i nogi".
Za jakiś tydzień jak ogarnę pętle i inne - będzie wersja 4.00 nad którą właśnie popijam dużą czarną.
Te wszystkie bzdury i inne o których piszę są tylko do nauki. Programy i kod pozbawione sensu i logiki. Jest to celowe działanie.
Celowo utrudniam sobie życie ale tylko po to by utrwalać %c, %d, %2d, %3c itp. itd.
Z czasem będę wracał do poprzednich wersji programu i kombinował jak ułatwić sobie żywot, kombinował nad tym czym i co można zastąpić itp.

0

Wyobraź sobie, że te znaczki to piksele, a Ty musisz narysować poziomą linię przez cały ekran w rozdzielczości 1920x1080. Kopiowałbyś znaczek 1920 razy? ;) Czasami rozwiązanie po prostu widać od razu i pytanie "A może by to jakoś zautomatyzować?" rodzi się samo. ;)

2

@gavallon: Jedną z podstawowych zasad w programowaniu jest nie powtarzanie się, tzn jeśli coś piszesz wiele razy, to zrób z tego pętlę lub nową funkcję.
Pętle ogarniesz w 15 minut, a nie w tydzień :D, zresztą już użyłeś pętli while ;)
Zamiast pisać:

 printf(" %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", 201, 205, 205, 205, 205, 205, 205, 205, 205, 205,205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205,205, 205, 205, 205, 205, 205, 205, 205, 187);

rozbij sobie na pojedyncze znaki i wrzuć w pętlę np:

 printf(" %c", 187);
for (int i=0; i<20; i++)
{
    printf("%c", 205);
}
printf(" %c", 187);
0

Wywala mi błąd:

printf(" %c", 187);
for (int i=0; i<20; i++)     // error: 'for' loop initial declarations are only allowed in C99 mode
{
    printf("%c", 205);
}
printf(" %c", 187);
0

@gavallon: Jeżeli piszesz w C to wywal int i = 0; poza pętlę, a w pętli wpisz for(; i<20; ++i). Dlaczego? Masz napisane w komunikacie błędu.

0

Ok, poszło...

Jednego nie rozumiem:


int i=0;
 printf(" %c", 187);
for (; i<20; i++)       // średnik zaraz za nawiasem, co on robi?
{
    printf("%c", 205);
}
printf(" %c", 187);

0

Jest to skrócony zapis tego:
for (i=0; i<20, i++)
ponieważ wcześniej zadeklarowałeś, że i=0, to możesz pominąć to co jest przed pierwszym średnikiem.
ale możesz też i tak napisać:

int i=0;
for (i=10; i<20; i++) 
0

A jeśli poza funkcją zadeklarowałem kilka INT by użyć ich później np.:

int i=0;
int b=2;
int c=4;

 printf(" %c", 187);
for (; i<20; i++)       // średnik zaraz za nawiasem, co on robi?
{
    printf("%c", 205);
}
printf(" %c", 187);

to skąd kompilator wie że chodzi mi o int i=0 a nie o np. int b=2; ?
Wywnioskuje to po reszcie z kodu czyli i<20 oraz i++ ??
Wychodzi na to że tak bo działa i pominął inne zmienne.

1

Sam sobie odpowiedziałeś :), ale najczęściej, jeśli masz kilka pętli występujących po sobie, ale nie zagnieżdżonych, to używa się tej samej zmiennej, np o nazwie i (od iteration):

int i=0;
for (;i<20; i++)
{}
//w tym miejscu i == 19
for (i=0; <i<20;i++)//a tu pętlę zaczynamy od i=0
{}
//w tym miejscu i == 19
2
for(; i<20; i++)  // średnik zaraz za nawiasem, co on robi?

Średnik zawsze służy do zakończenia danej sekcji (jak w przypadku pętli for), całej instrukcji (np. deklaracji zmiennych) i do innych różnych rzeczy. W tym kontekście oznacza, że część inicjująca początkową wartość iteratora zostaje pominięta - jest pusta, więc od razu po nawiasie jest średnik. A co powiesz na taką pętlę:

for(;;)

Wszystkie sekcje nagłówka pętli są puste. Skoro nie ma iteratora, nie ma określonego warunku zakończenia pętli to będzie ona kręcić się w nieskończoność.

Do pozostałych - niepotrzebnie mieszacie pytaczowi w głowie. Język C jest wystarczająco zagmatwany i trudny dla początkujących, więc nie ma co jeszcze zokładać do pieca. Najprostszą wersją deklaracji pętli w tym przypadku będzie oddzielenie deklaracji zmiennej iteratora od określania parametrów pętli:

int i;
for(i = 0; i < 20; i++)

Na inne cuda cudeńka związane z pętlą for jeszcze przyjdzie czas.

1 użytkowników online, w tym zalogowanych: 0, gości: 1