Pętla programu.

0

Cześć, testuje jeden program i jako że mam dużo danych wejściowych i wyjściowych w przykładach to nie chce mi się uruchamiać i zamykać go ciągle. Chciałbym żeby program się "restartował", na zasadzie przyciskam jakiś przycisk powiedzmy escape i się restartuje.

Wiem że żeby go zapętlić wystarczy dać:

int main()
{
while(1)
{
}
return 0; 
}

Ale jak zrobić żeby uruchamiał się od nowa PO NACIŚNIĘCIU jakiegoś przycisku ?

0

Hm może napisz jakąś funkcję która przywróci wszystkim zmiennym globalnym wartości domyślne, a potem uruchomi funkcję wczytującą dane? Ew wróci do maina celem kolejnego obiegu napisanej przez ciebie pętli.

0

jeżeli Ci chodzi o to żeby program ciągle działał dopóki nie zostanie naciśnięty jakiś przycisk (tzn wczytują się ciągle dane) to możesz zrobić to wszystko w while i użyć funkcji kbhit() (na windowsa). coś na zasadzie

int znak = 48; // jako 0 w ascii 
while (znak != 49) 
{
  //rob cos tam
  znak = kbhit();
}

tylko że ten kod nie jest przenośny i na różnych kompilatorach może różnie działać (a czasami nawet się nie kompilować)

0

Nie za bardzo o to chodzi. Chodzi o to by:

  1. Wprowadził wszystkie dane.
  2. Program wyświetlił na wyjściu co ma wyświetlić.
  3. Klikam powiedzmy escape i następuję clsr(), program wraca do pkt nr 1.
0

Jak wygląda ten program, jego obsługa, przepływ? Wymaga interakcji użytkownika czy jest "typowym" programem konsolowym pobierającym wejście w celu jego przemielenia i wyplucia czegoś na wyjściu? Czy operacje, które wykonuje na danych wejściowych są wydzielone do osobnych funkcji czy raczej masz wszystko wpakowane w główny blok? Czy zależy ci na tym aby kod odpowiedzialny za testowanie był wstawiony do kodu programu testowanego czy może być on osobnym programem wywołującym tylko w pętli program do testowania z odpowiednimi danymi wejściowymi? Zależy ci na testowaniu całości programu czy konkretnych jego fragmentów? W zależności jaka padnie odpowiedź może to rozwiązać na wiele sposobów być może nawet tak zautomatyzować testowanie, że nie będzie wymagana żadna interakcja z twojej strony.

0

Tj. mam program do testowania, ale wpadłem na taki a nie inny pomysł i chciałbym wiedzieć czy takie coś jest możliwe, oczywiście zależy mi na najprostszym możliwym sposobie

  1. Program jest aplikacją konsolową.
  2. Wymaga interakcji użytkownika, pobiera od niego dane.
  3. Wszystko wpakowane w maina, żadnych deklaracji, defincji poza mainem nie robiłem.
  4. Zależy mi na testowaniu całego programu- chcę po prostu wiedzieć czy istnieje możliwość 'zresetowania' okienka. Takie clsr() zainicjowane ESC, ale jednocześnie żeby program zaczął działać na nowo.
0
olesiu napisał(a):
  1. Wymaga interakcji użytkownika, pobiera od niego dane.
    Ze standardowego wejścia? Wejście możesz przekierować do pliku (wyjście zresztą też). Nie rozumiem tylko dlaczego zależy ci na wywoływaniu ponownie całego programu? W twoim wypadku wystarczy zamieścić kod programu w pętli.

Przykład programu sumujący dwie liczby (gdy po wypisaniu wyniku wciśniesz q algorytm wraca do początku):

    do
    {
        int a, b;
        fflush(stdin);
        printf("Podaj dwie liczby: ");
        scanf("%d%d", &a, &b);
        printf("%d + %d = %d\r\nWprowadz q aby kontynuuowac\r\n", a, b, a+b);
        fflush(stdin);
    }while(getchar() == 'q');

kod ten możesz bardziej zautomatyzować przekierowując we/wy:

    freopen("we.txt", "r", stdin);
    //freopen("wy.txt", "w", stdout);
    int a, b;
    while(scanf("%d%d", &a, &b) != -1)
        printf("%d + %d = %d\r\n", a, b, a+b);

we.txt w tym wypadku może wyglądać np tak:
1 1 2 2 3 3 4 4 albo przykładowo tak

1 1
2 2
3 3
4 4

Czy o to chodzi?
Aha jeszcze to całe "czyszczenie okienka" - najszybsza metoda (brzydka co prawda bo wywołuje program zewnętrzny) to użycie system([polecenie_czyszczenia_konsoli]);

0

Ze standardowego, standardowego.

A mozna by wstawić zamiast podanego przez Ciebie q jakiś klawisz ? Np.ESC ? Próbowałem w Code::Blocks i w DevC++ ale nie idzie...

A co do tego polecenia "czyszczenia okienka", to na końcu mam dodać linijkę:

system(clean) ? O to Ci chodzi ?

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