C´de PGM dosyası okuma çalışmıyor

Katılım
1 Ekim 2017
Mesajlar
1.638
Makaleler
4
Çözümler
13
Daha fazla  
Cinsiyet
Erkek
Merhaba, başlıkta belirtmiş olduğum gibi yapmak istediğim işlem net. PGM dosyasının okunup ilgili değerlerin ekrana basılması. Fakat atacağım kodda 40. satırda hata almaktayım ve o satırı kaldırma/değiştirme lüksüm yok. Ödev olduğundan ötürü o satır kalmalı. Kod codeblocks´ta çalışırken 49.satırdaki "printf" değerlerini vermiyor, Visual Studio Community´de ise belirttiğim 40. satırda hata alıyorum. Çözüm sunabilecek ve hatayı açıklayabilecek var mı? Teşekkürler. İlgili kod ve dosyalar;

C:
#include "headers.h"
typedef struct pgm {
int n;
int m;
int v;
int* data;
} pgm;
unsigned char* readPGM(char* path, int* m, int* n, int* v)
{
pgm* pPgm;
int sayilar;
n = NULL;
m = NULL;
char rgbDegeri[256];
FILE* fp = fopen(path, "r");

if (!fp) {
printf("Hata: Dosya acilamiyor! %s.\n\n", path);
exit(1);
}
pPgm = (pgm*)malloc(sizeof(pgm));

printf("Dosya bulundu, acilan dosya: %s...\n", path);
fscanf(fp, "%s", rgbDegeri);

if (strcmp(rgbDegeri, "P2") == 0) {

printf("DOSYA BASARIYLA ACILDI.\n");
fscanf(fp, "%s", rgbDegeri);
while (rgbDegeri[0] == '#') {
fgets(rgbDegeri, 255, fp);
fscanf(fp, "%s", rgbDegeri);
}

sscanf(rgbDegeri, "%d", &pPgm->n);
fscanf(fp, "%d", &pPgm->m);
fscanf(fp, "%d", &pPgm->v);
printf("Genislik: %d, Yukseklik: %d\n", pPgm->n, pPgm->m);

unsigned char* data = (unsigned char*)malloc ((*m)*(*n) *sizeof(unsigned char));

int i = 0;
do{
fscanf(fp, "%d", &sayilar);
pPgm->data[I] = sayilar;
i++;
} while (i < pPgm->n * pPgm->m);

printf("Loaded PGM. Size: %d x %d, Greyscale: %d \n",pPgm->n, pPgm->m, pPgm->v + 1);
}

fclose(fp);
}

int main(int* m, int* n, int* v) {

char* path = "fen.PGM";
readPGM(path,m,n,v);

return 0;
}

Headers:

C:
#pragma once.
#ifndef HEADERS_H.
#define HEADERS_H.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#endif // !HEADERS_H.
[/I]

PGM dosyaları: Google_Drive
 
Son düzenleyen: Moderatör:
m ve n degerleri Null oldugu için olabilir mi?
Ppgm->m ve Ppgm->n kullanmak gerek.
ve bu oluşturdugun data yı neden hiç kullanmadın?
pPgm->data = data; yapmayı unutmuş olabilir misin?
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…