a mam teraz jeszcze jedno pytanie,za zadanie miałem napisac program,który zarządza czcionką,i np przesyła dane do jakiegos urzadzenia(ale ja mialem tylko napisac program ktory przygotowuje pakiet danych oczywiscie)
I teraz tak:
pierwsze 8 bitów przechowuje info o rodzaju czcionki(od 0 do 255);
kolejne 7 bitów przechowuje info o rozmiarze(od 0 do 127);
potem kolejny bit zawiera info o wyrownaniu(0-lewe 1-prawe);
kolejny bit o wytluszczeniu(0-wyl 1-wl)
kolejny bit o kursywie
kolejny bit o podkresleniu
za zadanie miaeln nie uzywac struktur z polami lecz jednej zmiennej,oto program:
#include <stdio.h>
void menu(void);
void _typ(int*wsk);
void _rozmiar(int*wsk);
void _wyrownanie(int*wsk);
void _wytluszczenie(int*wsk);
void _kursywa(int*wsk);
void _podkreslenie(int*wsk);
int main(void)
{
int dane=0;
int koniec=0;
int wybor;
while (koniec!=1)
{
printf("\n\nLiczba dane to: %d",dane);
menu();
printf("Wybor opcji: ");
scanf("%d",&wybor);
switch (wybor)
{
case 1 : _typ(&dane);
break;
case 2 : _rozmiar(&dane);
break;
case 3 : _wyrownanie(&dane);
break;
case 4 : _wytluszczenie(&dane);
break;
case 5 : _kursywa(&dane);
break;
case 6 : _podkreslenie(&dane);
break;
case 7 : koniec=1;
break;
default: printf("Blednie wybrana opcja\n\n");
koniec=0;
}
}
puts("\nKONIEC");
getchar();
getchar();
return 0;
}
void menu(void)
{
printf("\n1 Zmiana czcionki 2 Zmiana rozmiaru 3 Zmiana wyrownania");
printf("\n4 Wyl\\Wl wytluszczenie 5 Wyl\\Wl kursywe 6 Wyl\\Wl podkreslenie");
printf("\n7 Koniec");
puts("");
}
void _typ(int*wsk)
{
int num;
int maska=255;
printf("Wybierz typ czcionki (0-255) : ");
while (scanf("%d",&num)!=1 || num<0 || num>255)
{
puts("Blednie wprowadzona wartosc");
}
maska=(~maska);
*wsk&=maska;
*wsk|=num;
}
void _rozmiar(int*wsk)
{
int num;
int maska=32512;
maska=(~maska);
printf("Wybierz rozmiar czcionki (0-127) : ");
while (scanf("%d",&num)!=1 || num<0 || num>127)
{
puts("Blednie wprowadzona wartosc");
}
*wsk&=maska;
num<<=8;
*wsk|=num;
}
void _wyrownanie(int*wsk)
{
int num;
int maska=32768;
maska=(~maska);
printf("Wybierz rodzaj wyrownania (0-lewo 1-prawo) : ");
while (scanf("%d",&num)!=1 || num<0 || num>1)
{
puts("Blednie wprowadzona wartosc");
}
*wsk&=maska;
num<<=15;
*wsk|=num;
}
void _wytluszczenie(int*wsk)
{
int num;
int maska=65536;
maska=(~maska);
printf("Wylacz\\Wlacz czcionki(0-wylaczone 1-wlaczone): ");
while (scanf("%d",&num)!=1 || num<0 || num>1)
{
puts("Blednie wprowadzona wartosc");
}
*wsk&=maska;
num<<=16;
*wsk|=num;
}
void _kursywa(int*wsk)
{
int num;
int maska=131072;
maska=(~maska);
printf("Wylacz\\Wlacz kursywe czcionki(0-wylaczone 1-wlaczone): ");
while (scanf("%d",&num)!=1 || num<0 || num>1)
{
puts("Blednie wprowadzona wartosc");
}
*wsk&=maska;
num<<=17;
*wsk|=num;
}
void _podkreslenie(int*wsk)
{
int num;
int maska=262144;
maska=(~maska);
printf("Wylacz\\Wlacz podkreslenie czcionki(0-wylaczone 1-wlaczone): ");
while (scanf("%d",&num)!=1 || num<0 || num>1)
{
puts("Blednie wprowadzona wartosc");
}
*wsk&=maska;
num<<=18;
*wsk|=num;
}
Wydaje mi się iż działa on poprawnie,ale chciałbym się upewnić,bo zastanawia mnie fakt,gdy np urzadzenie jakies o rozmiarze pobiera informacje z bitów od 9 do 15 ,to czy ono jakby wycina ten kawalek i tworzy z tego liczby(np 127 przy wszystkich wlaczonych) i wtedy na podstawie tej liczby okresla rozmiar czy może np stosuje maske do wyzerowania wszystkich bitów poza z tym info i wtedy zamienia na liczbe,a to juz wtey bedzie calkiem inna liczba..