[C][ANSI C] Menu w switch'u i zapisywanie pliku wyjściowego

draggie13
Użytkownik
Użytkownik
Posty: 16
Rejestracja: 22 lis 2014, o 14:32
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 2 razy

[C][ANSI C] Menu w switch'u i zapisywanie pliku wyjściowego

Post autor: draggie13 »

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ć.

Kod: Zaznacz cały

/* 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.

Kod: Zaznacz cały

 /* 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.

Kod: Zaznacz cały

/* 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.
Ostatnio zmieniony 22 lis 2014, o 15:59 przez Afish, łącznie zmieniany 2 razy.
Powód: Kod języka programowania wstawiamy w znaczniki [code][/code]
ODPOWIEDZ