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;
}