Witam, jestem nowym użytkownikiem forum a także osobą stawiającą pierwsze kroki w programowaniu w C. Mam za zadanie napisać program przetwarzający obrazy pgm. O ile same funkcje przetwarzające nie sprawiły mi większych problemów, to utknąłem w miejscu kiedy mam zrobić menu za pomocą funkcji switch w którym użytkownik może
1. Wczytać obraz.
2. Zakończyć działanie
Jeśli w czyta obraz, to powinno mu się pojawić 5 nowych opcji
1-4. jedna z funkcji przetwarzania
5. wczytanie innego obrazu czyli powrót do poprzedniej części menu.
Tej drugiej części zupełnie nie umiem napisać.
int main() {
int obraz[ MAX ][ MAX ];
int wymx, wymy, odcienie;
int odczytano = 0;
FILE * plik;
char nazwa[ 100 ];
while( 1 > 0 )
{
printf( "Program przetwarza obrazy pgm.\nWybierz akcję: \n1. Wczytaj obraz\n2. Zakończ\n" );
int wybor;
scanf( "%d", & wybor );
switch( wybor )
{
case 1:
printf( "Podaj nazwe pliku:\n" );
scanf( "%s", nazwa );
plik = fopen( nazwa, "r" );
if( plik != NULL )
odczytano = czytaj( plik, obraz, & wymx, & wymy, & odcienie );
fclose( plik );
if( odczytano != 0 )
wyswietl( nazwa );
return odczytano;
case 2:
printf( "Program zakończył działanie.\n" );
return 0;
default:
printf( "Wybór nie poprawny!\n" );
}
}
}
Drugim problemem z którym się zmagam to funkcja wczytująca te obrazy. Należy ją bowiem jakoś wyposażyć w to by omijała komentarz (zaczynać się on powinien od #). Udało mi się stworzyć coś co sprawdza czy pierwsza linijka jest komentarzem, jeśli jest to ją pomija, jeśli nie to wraca do jej początku i normalnie pozwala programowi ją przeczytać. Nie wiem jak sprawić by sprawdzała wszystkie linijki w poszukiwaniu tego # i później je odrzucała jeśli są zbędne.
do {
if(( znak = fgetc( plik_we ) ) == '#' ) {
if( fgets( buf, DL_LINII, plik_we ) == NULL )
koniec = 1;
} else {
ungetc( znak, plik_we );
}
} while( znak == '#' && !koniec );
Jednak najważniejszą rzeczą jest zapisywanie pliku wyjściowego. Tu dostałem gotowy kod, który jednak nie wiem, chyba po prostu nadpisuje zmiany pliku wejściowego o ile wgle to robi, natomiast powinno zgodnie ze specyfikacją tworzyć nowy plik wyjściowy. Np wczytany zostanie obraz kubus.pgm, później coś tam mu się stanie i wyjściowo powinno być np. newkubus.pgm.
for( i = 0; i <* wymy; i++ ) {
for( j = 0; j <* wymx; j++ ) {
if( fscanf( plik_we, "%d", &( obraz_pgm[ i ][ j ] ) ) != 1 ) {
fprintf( stderr, "Blad: Niewlasciwe wymiary obrazu\n" );
return( 0 );
}
}
}
return * wymx ** wymy;
}
Pilnie proszę o pomoc, ponieważ goni mnie termin oddania zadania. :( Z góry dziekuję za zainteresowanie tematem. :lol:
Draggie.[/i]