Ĺadny brzuch
mam taki oto problem..
zrobilem program z menu - po wyborze czegos cos sie robi..
oto czesc kodu (wiecej nie potrzeba!!):
#include <stdio.h> void wstaw( long int tablica[ 313 ] ) { unsigned long int mask = 1; int x; printf( "\nPodaj liczbe: " ); scanf( "%d" , &x ); if ( ( x >= 1 ) || ( x <= 10000 ) ) { mask <<= ( x % 32 ); if( ( tablica[ x / 32 ] & mask ) == mask ) { printf( "Liczba %d jest juz w tablicy!\n" , x ); } else { tablica[ x / 32 ] = ( tablica[ x / 32 ] | mask ); } } else { printf( "Podales zla liczbe!" ); } } . . . unsigned long int tab[ 313 ]; char wybor; int main() { int i; for( i = 0; i < 313; i++ ) { tab[ i ] = 0; } printf( "\nWybierz tryb pracy\n" ); printf( "w - wstawianie danych do tablicy\n" ); printf( "s - sprawdzanie istnienie liczby w tablicy\n" ); printf( "u - usuwanie liczby z tablicy\n" ); printf( "a - automatyczne odczytanie zawartosci tablicy\n" ); printf( "g - wczytanie libcz z pliku do tablicy (in)\n" ); printf( "z - zapis liczb z tablicy do pliku (out)\n" ); printf( "q - wyjscie z programu\n" ); do { printf( "\nWybor: " ); scanf( "%c" , &wybor ); switch( wybor ) { case 'w': wstaw( tab ); break; case 'a': autodczyt( tab ); break; case 'u': usun( tab ); break; case 's': sprawdz( tab ); break; case 'g': load( tab ); break; case 'z': save( tab ); break; case 'q': break; default: printf( "Wybrales zla opcje!" ); break; } } while( wybor != 'q' ); return 0; }
reszta naprwde nie jest potrzebna, bo wystarczy jedna funkcja zeby sprawdzic co sie dzieje..
co robi program?? wstawia do pustej tablicy bity, dzieki czemu nie musze zapisywac, calych integerow <1-10000> - zaznaczam tylko bit o z inforamcja ze dana liczba istanieje!! z reszta nie wazna jest zasada dzialania programu..
chodzi mi o menu!!
o otoz po wyborze i po dokonaniu wpisu do tablicy, program wraca do wyboru i sam sobie pobiera zmienna ktora wczesniej wpisalem do tablicy, przez co wyskakuje komunikat (patrz kod).. potem znowu wyswietla sie wybor i moge dzialac normalnie..
no i wychodzi ze "wybor" wyswietla sie 2 razy :mellow:
nie wiem jak sie tego pozbyc nie uzywajac funkcji getch!!
czy moze ktos mi pomoc??
printf( "\nWybor: " ); - scanf( "%c" , &wybor ); + scanf( "%1s" , &wybor ); switch( wybor ) {
Program nie działał dobrze bo funkcja scanf wczytywała tylko jeden znak pozostawiając śmieci które wczytała dopiero przy drugim uruchomieniu pętli. Alternatywnie możnaby przed każdym break; dopisać getchar(); który zczytywałby te śmieci, albo napisać \
scanf( "%c%c" , &wybor,&tmp);.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
zrobilem program z menu - po wyborze czegos cos sie robi..
oto czesc kodu (wiecej nie potrzeba!!):
#include <stdio.h> void wstaw( long int tablica[ 313 ] ) { unsigned long int mask = 1; int x; printf( "\nPodaj liczbe: " ); scanf( "%d" , &x ); if ( ( x >= 1 ) || ( x <= 10000 ) ) { mask <<= ( x % 32 ); if( ( tablica[ x / 32 ] & mask ) == mask ) { printf( "Liczba %d jest juz w tablicy!\n" , x ); } else { tablica[ x / 32 ] = ( tablica[ x / 32 ] | mask ); } } else { printf( "Podales zla liczbe!" ); } } . . . unsigned long int tab[ 313 ]; char wybor; int main() { int i; for( i = 0; i < 313; i++ ) { tab[ i ] = 0; } printf( "\nWybierz tryb pracy\n" ); printf( "w - wstawianie danych do tablicy\n" ); printf( "s - sprawdzanie istnienie liczby w tablicy\n" ); printf( "u - usuwanie liczby z tablicy\n" ); printf( "a - automatyczne odczytanie zawartosci tablicy\n" ); printf( "g - wczytanie libcz z pliku do tablicy (in)\n" ); printf( "z - zapis liczb z tablicy do pliku (out)\n" ); printf( "q - wyjscie z programu\n" ); do { printf( "\nWybor: " ); scanf( "%c" , &wybor ); switch( wybor ) { case 'w': wstaw( tab ); break; case 'a': autodczyt( tab ); break; case 'u': usun( tab ); break; case 's': sprawdz( tab ); break; case 'g': load( tab ); break; case 'z': save( tab ); break; case 'q': break; default: printf( "Wybrales zla opcje!" ); break; } } while( wybor != 'q' ); return 0; }
reszta naprwde nie jest potrzebna, bo wystarczy jedna funkcja zeby sprawdzic co sie dzieje..
co robi program?? wstawia do pustej tablicy bity, dzieki czemu nie musze zapisywac, calych integerow <1-10000> - zaznaczam tylko bit o z inforamcja ze dana liczba istanieje!! z reszta nie wazna jest zasada dzialania programu..
chodzi mi o menu!!
o otoz po wyborze i po dokonaniu wpisu do tablicy, program wraca do wyboru i sam sobie pobiera zmienna ktora wczesniej wpisalem do tablicy, przez co wyskakuje komunikat (patrz kod).. potem znowu wyswietla sie wybor i moge dzialac normalnie..
no i wychodzi ze "wybor" wyswietla sie 2 razy :mellow:
nie wiem jak sie tego pozbyc nie uzywajac funkcji getch!!
czy moze ktos mi pomoc??
printf( "\nWybor: " ); - scanf( "%c" , &wybor ); + scanf( "%1s" , &wybor ); switch( wybor ) {
Program nie działał dobrze bo funkcja scanf wczytywała tylko jeden znak pozostawiając śmieci które wczytała dopiero przy drugim uruchomieniu pętli. Alternatywnie możnaby przed każdym break; dopisać getchar(); który zczytywałby te śmieci, albo napisać \
scanf( "%c%c" , &wybor,&tmp);.