C++ Fonksiyon boş değer döndürünce program çöküyor

Başlatan vitruvius, 11 Ekim 2015, 19:20:56

vitruvius

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

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr