Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => C/C++ => Konuyu başlatan: vitruvius - 11 Ekim 2015, 19:20:56

Başlık: C++ Fonksiyon boş değer döndürünce program çöküyor
Gönderen: vitruvius - 11 Ekim 2015, 19:20:56
Merhaba,

Elimdeki verinin daha önceden hazırlamış olduğum .dat dosyasında olup olmadığına bakmaya çalışıyorum. Eğer dosyadaki verilerle elimdeki veriler örtüşürse bu verileri dışarı yazdırıyorum.

Eğer elimdeki veri dosyada yoksa programım şu an çöküyor. Çünkü kontrol ettiğim fonksyion boş dönüyor. Bunu nasıl engellerim?



struct foundObject benim elimdeki veriler için hazırladığım taslak. struct objectDatabase ise .dat dosyasındaki veriler için hazırladığım yapı.
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>

struct foundObject
{
double foundArea;
double foundLength;
double foundFormFactor;
};

struct objectDatabase
{
char name[15];
double databaseArea;
double databaseLength;
double databaseFormFactor;
};




Bu fonksyionla dosyayı okuyorum. Eğer Elimdeki verilerle, dosyaki verilerden biri örtüşürse bu değerleri döndürüyorum.

struct objectDatabase myReadFile(FILE *rPtr, double area, double length, double formFactor)
{
struct  objectDatabase objectFromDatabase = { "", 0.0, 0.0, 0.0 };

if ((rPtr = fopen("objects.dat", "r")) == NULL)
printf("Couldn't open the file to read.\n");
else
{
fscanf(rPtr, "%s%lf%lf%lf", objectFromDatabase.name, &objectFromDatabase.databaseArea, &objectFromDatabase.databaseLength, &objectFromDatabase.databaseFormFactor);

while (!feof(rPtr))
{
if (objectFromDatabase.databaseArea == area)
if (objectFromDatabase.databaseLength == length)
if (objectFromDatabase.databaseFormFactor == formFactor)
{
printf("We have found the %s\n", objectFromDatabase.name);
return objectFromDatabase;
}

fscanf(rPtr, "%s%lf%lf%lf", objectFromDatabase.name, &objectFromDatabase.databaseArea, &objectFromDatabase.databaseLength, &objectFromDatabase.databaseFormFactor);
}
}
fclose(rPtr);
}




Bu fonksiyonda da döndürdüğüm değerleri alıp dışarı yazıyorum. Üstteki fonksiyon boş dönünce objectValues = myReadFile(gPtr, area, length, formFactor); de program çöküyor.
void getValues(FILE *gPtr, double area, double length, double formFactor)
{
struct  objectDatabase objectValues = { "", 0.0, 0.0, 0.0 };

objectValues = myReadFile(gPtr, area, length, formFactor);

printf("Object name: %s\n", objectValues.name);
printf("Object area: %.2lf\n", objectValues.databaseArea);
printf("Object length: %.2lf\n", objectValues.databaseLength);
printf("Object formFactor: %.2lf\n", objectValues.databaseFormFactor);
}




Bu da main. Burada dizinin sonuncu elemanı .dat dosyasının içinde yok. i=3 iken program çöküyor, diğer değerlerde istediğim gibi çalışıyor.

int main()
{
struct foundObject myFoundObject[4];
myFoundObject[0] = { 9214.00, 417.24, 22.08 }; // Coin
myFoundObject[1] = { 54375.00, 1087.94, 49.97 }; // mp3
myFoundObject[2] = { 12785.00, 550.70, 23.22 }; // toy
myFoundObject[3] = { 100.01, 200.02, 300.03 }; // Random stuff

FILE *cfPtr;

if ((cfPtr = fopen("objects.dat", "a +")) == NULL)
printf("Couldn't open the file\n");
else
fclose(cfPtr);

int i = 2;
getValues(cfPtr, myFoundObject[i].foundArea, myFoundObject[i].foundLength, myFoundObject[i].foundFormFactor);
return 0;
}
Başlık: Ynt: C++ Fonksiyon boş değer döndürünce program çöküyor
Gönderen: mehmet - 11 Ekim 2015, 19:46:33
Veri boş ise negatif değer yollayın. (-1 gibi)