Witam! Mam problem. Prowadzący kazał nam napisać na zajęcia program, który posiada kilka pod programów, które działają w nieskończonych pętlach. Mianowicie, jednym z programów jest licznik binarny od 0 do 255 (8 bitowy), następnym jest ten sam licznik lecz od 255 do 0. Moje pytanie: jak zmieniać te podprogramy? Próbowalem getch() ale ta funkcja czeka aż poda się znak, a do tego momentu zatrzymuje pętlę. Aktualnie działa to tak, że trzeba trzymać spację, aby licznik odliczał.
Oto co udało mi się napisać:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int pilot = 9;
int ex1 = 0;
int ex2 = 255;
void Header()
{
printf("Aktualny tryb: %d ^ nastepny program, v poprzedni program, [spacja] wykonaj program\n\n",pilot);
}
void TableOfContents()
{
printf("\t1. 8 bitowy licznik binarny zliczajacy w gore\n");
printf("\t2. 8 bitowy licznik binarny zliczajacy w dol\n");
}
void VarToDefault()
{
ex1=0;
ex2=255;
}
void IntToBinary( int input)
{
short i = 7;
printf("\t");
while(i>=0)
{
printf("%d",(input >> i) & 1);
i--;
}
}
void IntToGrayCode(int input)
{
printf("\tBIN\t=>\tGRAY\n");
IntToBinary(input);
printf("\t=>");
IntToBinary(input ^ (input >> 1));
}
void Switch()
{
if(pilot == 1)
{
system("CLS");
Header();
IntToBinary(ex1);
if(ex1 < 256)
ex1++;
else
ex1 = 0;
}
if(pilot == 2)
{
system("CLS");
Header();
IntToBinary(ex2);
if(ex2 > 0)
ex2--;
else
ex2 = 255;
}
if(pilot == 3)
{
system("CLS");
Header();
IntToGrayCode(ex1);
if(ex1 < 256)
ex1++;
else
ex1 = 0;
}
if(pilot == 4)
{
system("CLS");
Header();
IntToGrayCode(ex2);
if(ex2 > 0)
ex2--;
else
ex2 = 255;
}
}
int main(void){
unsigned long i;
int display=0;
char ch;
Header();
TableOfContents();
while(1)
{
ch = getch();
//strzalka w gore 72
//strzalka w dol 80
if(ch == 72)
{
VarToDefault();
if(pilot < 9)
pilot++;
else
pilot = 1;
system("CLS");
Header();
TableOfContents();
}
else if(ch == 80)
{
VarToDefault();
if(pilot > 1)
pilot--;
else
pilot = 9;
system("CLS");
Header();
TableOfContents();
}
else if(ch == 32)
{
Switch();
}
}
}