PDA

Tam Sürümünü Görmek İçin : fopen ile açılan dosyayı daha sonra okumuyo


tunahanabi
22/12/2004, 10:18
void yedek()
{
double X,Y;
FILE *readinput; //input.usr okunup gecici bi input2.usr dosyasi olusturulacak
readinput= fopen("input.usr","r");
while ( !feof( readinput ) )
{
fscanf( readinput , "%lf%lf",&X,&Y);
FILE *input22; //input2.usr gecici input dosyasi
input22 = fopen( "intput2.usr", "a" );
fprintf( input22, "%lf %lf\n",X,Y);
fclose( input22 );
} //end of while
fclose( readinput);
}
................
...........
.......
int main(){
yedek();
FILE *input2;
if ( ( input2 = fopen( "input2.usr", "r" ) ) == NULL )
printf( "input2.usr dosyasi acilamadi 2\n" );
else {
while (!feof(input2)){
fscanf( input2, "%lf%lf", &x, &y);
.................
...............
}
şeklinde yazdığım zaman "input2.usr dosyasi acilamadi 2" hatasını veriyor.
input2.usr dosyasını yazdıktan sonra okuyamıyor.
gördüğüm kadarı ile program tamamen sonlandıktan sonra input2.usr dosyası oluşuyor ama tabi iş işten geçmiş oluyor bu durumda.
yardımcı olursanız sevinirimm..


anov
22/12/2004, 11:07
kodlar sanırım kullandığın kodlar değil ama..
main() fonksiyonunda;
if ile kontrol etmeden önce , input2.usr dosyasını oluşturan --> yedek()
fonksiyonunu çağırıyor musun?
eğer bu atlanmış ise, hata vermesi normal.
iyi niyet ve yardım seninle olsun.

tunahanabi
22/12/2004, 11:38
kodlar kullandıklarımla birebir aynı. cpp dosyasından kopyaladım. yedek fonsiyonunu çağırıyorumm. main kısmının üst tarafları kafa karıştırmasın diye yazmadımmm. dediğin yeri düzelttim bu arada.
iyi niyet ve yardım hepimizle olsun.

acehreli
22/12/2004, 16:49
Kod tekrari yapmanin kurbani olmussun. Bir yerde intput2.usr, baska yerde input2.usr yaziyorsun.

En iyisi boyle sabitleri tek bir yerde tanimlamaktir. Ornegin:

const char * ikinciKutuk = "input2.usr";

Ayrica, printf ve scanf ailelerinden olan islevlerin double icin degisik kod kullandiklarina da dikkat etmelisin: birincisi %f, ikincisi %lf ister.

Ali

tunahanabi
22/12/2004, 19:02
Kod tekrari yapmanin kurbani olmussun. Bir yerde intput2.usr, baska yerde input2.usr yaziyorsun.
En iyisi boyle sabitleri tek bir yerde tanimlamaktir. Ornegin:
const char * ikinciKutuk = "input2.usr";
Ali
kod tekrarı derken neyi kastettiğini anlamadım. FILE *..... ları diyorsan biri input2 diğeri input22 şeklinde. bunların herikisini de input2 şeklinde de denedimm ama olmadı.
ayrıca tenımlama yaptıkan sonra *ikinciKutuk gördüğüm yere input2.usr mi yazacağım. tanımlamayı biraz daha açarmısınn. :2:

acehreli
22/12/2004, 19:16
KUtUk adlarinin icinde bir tane fazladan t harfi var. :) (Bir once yazdigim nota biraz daha dikkatlice bak...)

Eger kod icinde herhangi bir seyi iki kere yaziyorsan, kod tekrari yapiyorsun demektir. Eger iki kere "input2.usr" yaziyorsan olmaz... Bunu farkettigin anda hemen bir sabit tanimla ve iki yerde o sabiti kullan:



const char * benim_guzel_dosyam = "input2.usr";

/* ... */

input22 = fopen(benim_guzel_dosyam , "a" );

/* ... */

if ( ( input2 = fopen((benim_guzel_dosyam , "r" ) ) == NULL )


Ali

tunahanabi
22/12/2004, 22:56
.............
...........
#include <errno.h>
#include <process.h>
const char *yedek_dosya = "input2.usr";
............
.........
void yedek()
{
double X,Y;
FILE *readinput; //input.usr okunup gecici bi input2.usr dosyasi olusturulacak
readinput= fopen("input.usr","r");
while ( !feof( readinput ) )
{
fscanf( readinput , "%lf%lf",&X,&Y);
FILE *writeinput2; //input2.usr gecici input dosyasi
writeinput2 = fopen( yedek_dosya , "a" );//input2.usr olarak kayit yapiliyo
// printf("%lf %lf\n",x,y);
fprintf( writeinput2, "%lf %lf\n",X,Y);
fclose( writeinput2 );
} //end of while
fclose( readinput);
}
..............
...........
int main(){
yedek();
FILE *input2;
if ( ( input2 = fopen( yedek_dosya , "r" ) ) == NULL )
printf( "input2.usr dosyasi acilamadi 2\n" );
else {
while (!feof(input2)){
fscanf( input2, "%lf%lf", &x, &y);
..............
............

kodun son hali bu ve şu anda çalışıyorr.
teşekkürlerrr..
:super: :hiohahoha :super: