Problem z zadankiem/ coś nie działa C

Mraauuu
Użytkownik
Użytkownik
Posty: 66
Rejestracja: 21 gru 2008, o 13:05
Płeć: Mężczyzna
Lokalizacja: Trzebnica
Podziękował: 3 razy
Pomógł: 11 razy

Problem z zadankiem/ coś nie działa C

Post autor: Mraauuu »

Chodzi oto, ze nic mi nie wyświetla:

Plik się kompiluje i uruchamia(i zamyka szybko), jak chce go uruchomić ponownie to wyskakuje, że nie skompilowany. Korzystam z dev(kombinowałem z getch()żeby po wykonaniu nie zamykał się, ale nie wychodzi mi)







Kod: Zaznacz cały

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>


#define MAX 1024
#define DL_LINII 100


int czytaj(FILE *p,int obraz_pgm[][MAX],int *wymx,int *wymy, int *szarosci) {
  char s[DL_LINII];    
  int znak,koniec=0,i,j;

  /*sprawdzenie czy podano prawidłowy uchwyt pliku */
  if (p==NULL) {
    fprintf(stderr,"Blad: Nie podano uchwytu do pliku\n");
  
    return(0);
  }
  if (fgets(s,DL_LINII,p)==NULL) koniec=1;
  /* Sprawdzenie "numeru magicznego - powinien być P2 */
  if ((s[0]!='P') || (s[1]!='2') || koniec) {
    fprintf(stderr,"Blad: To nie jest plik PGM\n");
    return(0);
  }
  /* Pominiecie komentarzy */
  do {
    if ((znak=fgetc(p))=='#') {
      if (fgets(s,DL_LINII,p)==NULL) koniec=1;
    }  else {
      ungetc(znak,p);
    }
  } while (! koniec && znak=='#');
  /* Pobranie wymiarow i liczby odcieni szarosci */
  if (fscanf(p,"%d %d %d",wymx,wymy,szarosci)!=3) {
    fprintf(stderr,"Blad: Brak wymiarow obrazu lub liczby stopni szarosci\n");
    return(0);
  }       
  /* Pobranie obrazu i zapisanie w tablicy obraz_pgm*/
  for (j=0;j<*wymy;j++) {
    for (i=0;i<*wymx;i++) {
           if (fscanf(p,"%d ",(&obraz_pgm[i][j]))!=1) {
	     fprintf(stderr,"Blad: Niewlasciwe wymiary obrazu\n");
	    
	return(0);
      }
    }
  }
  ;
  return *wymx**wymy;
  }



void progowanie(int obraz_pgm[][MAX], int *wymx, int *wymy, int *odcieni, int PROG){
  /*funkcja zamienia piksele ponizej wartosci progu na czarne a piksele powyzej na biale*/
  int i,j;
  for (j=0;j<*wymy;j++) {
    for (i=0;i<*wymx;i++) {
      if (obraz_pgm[i][j]<=PROG)
	obraz_pgm[i][j]=0;
      else if (obraz_pgm[i][j]>PROG)
	obraz_pgm[i][j]=*odcieni;
    }
  }
}




void konturowanie(int obraz_pgm[][MAX], int *wymx, int *wymy, int *odcieni){
  /*funkcja pozostawia same kontury obrazu*/ 
 int i,j,x,y;

  for (j=0;j<*wymy;j++) {
    for (i=0;i<*wymx;i++) {

      if (i+1 <= *wymx){                                  /* wyciaganie wartosci bezwzglednej z sasiednich pikseli*/ 
	if (obraz_pgm[i+1][j]-obraz_pgm[i][j] >0)
	  x=obraz_pgm[i+1][j]-obraz_pgm[i][j];
	else x=obraz_pgm[i][j]-obraz_pgm[i+1][j];
      }
      else x=obraz_pgm[i][j];
    
      if (j+1 <= *wymy){
	if (obraz_pgm[i][j+1]-obraz_pgm[i][j] >0)
	  y=obraz_pgm[i][j+1]-obraz_pgm[i][j];
	else y=obraz_pgm[i][j]-obraz_pgm[i][j+1];
      }
      else y=obraz_pgm[i][j];
      
      if (x+y<=*odcieni)     
	obraz_pgm[i][j]=x+y;
      else;
    }
  }
	  

}



void zapisz(int obraz_pgm[][MAX], int *wymx, int *wymy, int *odcieni, FILE *zapis)
{ /*f. zapisuje do pliku o podanej wczesniej nazwie*/
int i,j;
 fprintf(zapis, "P2\n%d %d\n%d",*wymx, *wymy, *odcieni);
     for (j=0;j<*wymy;j++) {
      fprintf(zapis, "\n");
      for (i=0;i<*wymx;i++) {
	 
	 fprintf(zapis,"%d  ",obraz_pgm[i][j]);
}
}
}

void negatyw (int obraz_pgm[][MAX], int *wymx, int *wymy, int *odcieni) {
  /* f. zamienia wartosci pikseli na przeciwne */

  int i,j;
     for (j=0;j<*wymy;j++) {
      for (i=0;i<*wymx;i++) {
	obraz_pgm[i][j]=*odcieni-obraz_pgm[i][j];
      }
     }
}


int main() {

  int wymx,wymy,odcieni,obraz[MAX][MAX],zmienna=0,prog;
  FILE *plik, *zapis;
  char nazwa[100],nazwa_zapis[80];

  while(zmienna!=7){
  
  zmienna=0;

    printf("co chcesz zrobic z plikiem?\n");
    printf("do uzywania funkcji przetwarzania obrazu nalezy najpierw odczytac obraz\n");
    printf("1-odczytac, 2-zapisac, 3- wyswietlic, 4-negatyw, 5-progowanie 6-konturowanie, 7-koniec\n");
    scanf("%d", &zmienna);
   

    switch(zmienna){
  case 1:
    printf("Podaj nazwe pliku:\n");
    scanf("%s",nazwa);
    plik=fopen(nazwa,"r");
    czytaj(plik,obraz,&wymx,&wymy,&odcieni);
    ;  
    break;
  case 2: 
    printf("podaj nazwe pliku do zapisania w formacie xxx.pgm\n");
    scanf("%s",nazwa_zapis);
    zapis=fopen(nazwa_zapis,"w");
    zapisz(obraz,&wymx,&wymy,&odcieni,zapis);
    ;
    break;
  case 3: 
    wyswietl(nazwa);
    
    break;
  case 4: 
    negatyw(obraz,&wymx,&wymy,&odcieni);
    
    break;
  case 5:
    printf("podaj wartosc progu z przedzialu 0-255\n");
    scanf("%d",&prog);
      progowanie(obraz,&wymx,&wymy,&odcieni,prog);
      
      break;
  case 6:
    konturowanie(obraz,&wymx,&wymy,&odcieni);
    
    break;
    
  
  }
  }


  return 1;
}
Awatar użytkownika
wafello
Użytkownik
Użytkownik
Posty: 35
Rejestracja: 7 sty 2009, o 21:50
Płeć: Mężczyzna
Lokalizacja: Józefina
Pomógł: 6 razy

Problem z zadankiem/ coś nie działa C

Post autor: wafello »

spróbuj "getchar()"

a wygodniej będzie gdy odpalisz program w konsoli.

Mniemam, iż używasz Windows: start->uruchom "cmd"
ODPOWIEDZ