Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C] ANSI - menu w switch i zapisywanie pliku wyjściowego

Ostatnio zmodyfikowano 2014-11-22 20:39
Autor Wiadomość
draggie
Temat założony przez niniejszego użytkownika
[C] ANSI - menu w switch i zapisywanie pliku wyjściowego
» 2014-11-22 19:52:49
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ć.
C/C++
/* Menu które na razie ma tylko dwie funkcje */
int main() {
    int obraz[ MAX ][ MAX ];
    int wymx, wymy, odcienie;
   
    int odczytano = 0;
    FILE * plik;
    char nazwa[ 100 ];
   
    /* Wczytanie zawartosci wskazanego pliku do pamieci */
    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 ) /* co spowoduje zakomentowanie tego warunku */
                 odczytano = czytaj( plik, obraz, & wymx, & wymy, & odcienie );
           
            fclose( plik );
           
            /* Wyswietlenie poprawnie wczytanego obraza zewnetrznym programem */
            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.
C/C++
/* Pominiecie komentarzy */
do {
    if(( znak = fgetc( plik_we ) ) == '#' ) { /* Czy linia rozpoczyna sie od znaku '#'? */
        if( fgets( buf, DL_LINII, plik_we ) == NULL ) /* Przeczytaj ja do bufora                */
             koniec = 1; /* Zapamietaj ewentualny koniec danych */
       
    } else {
        ungetc( znak, plik_we ); /* Gdy przeczytany znak z poczatku linii */
    } /* nie jest '#' zwroc go                 */
} while( znak == '#' && !koniec ); /* Powtarzaj dopoki sa linie komentarza */
/* i nie nastapil koniec danych         */
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.
 
C/C++
/* Pobranie obrazu i zapisanie w tablicy obraz_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; /* Czytanie zakonczone sukcesem    */
} /* Zwroc liczbe wczytanych pikseli */


Pilnie proszę o pomoc, ponieważ goni mnie termin oddania zadania. :( Z góry dziekuję za zainteresowanie tematem.  :lol:
Draggie.[/i]
P-121181
Monika90
» 2014-11-22 20:39:25
Kod na forum umieszczaj między znacznikami [cpp][/cpp]. Popraw swój post.
P-121190
« 1 »
  Strona 1 z 1