Файл не удаляется после того, как отработала другая функция - C (СИ)
Формулировка задачи:
Подскажите пожалуйста в чем проблема или как обойти это.....
все нормально удаляет
пока не воспользуюсь этой функцией
remove( "file1.dat" );
void print( FILE * tf )
{
int i;
clrscr();
tf = fopen( "file1.dat", "rb" );
i = 1;
fread( &t1, sizeof( t1 ), 1, tf );
while( !feof( tf ) )
{
printf( "\n %3d familya %s imya %s otchestvo %s", i, t1.F, t1.I, t1.O);
printf( "\n Ocenki ");
printf("\n %s %s", t1.subject[0].sub, t1.subject[0].bal);
printf("\n %s %s", t1.subject[1].sub, t1.subject[1].bal);
printf("\n %s %s", t1.subject[2].sub, t1.subject[2].bal);
printf("\n %s %s", t1.subject[3].sub, t1.subject[3].bal);
fread( &t1, sizeof( t1 ), 1, tf );
i++;
}
close(tf);
getch();
}Решение задачи: «Файл не удаляется после того, как отработала другая функция»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
/**********************************
* У меня нет clrscr. Своя замена *
**********************************/
void clrscr( )
{
int i;
for( i = 0; i < 25; i++ ) putchar( '\n' );
}
struct sport
{
char F[10];
char I[10];
char O[10];
struct subj
{
char sub[20];
char bal[5];
}subject[4];
} t1;
void input( FILE * );
void print( FILE * );
void app( FILE * );
void max_height( );
void del();
int main( int argc, char * argv[] )
{
char c;
int i;
FILE * tf;
i = 1;
while( i != 0 )
{
clrscr();
puts( " 1 - new file\n"
" 2 - look file\n"
" 3 - dobavlenie v file\n"
" 4 - find studenta po familie\n"
" 5 - udalit dvoiwnikov\n"
" 0 - vihod" );
c = getch();
switch( c )
{
case '1':
input( tf );
break;
case '2':
print( tf );
break;
case '3':
app( tf );
break;
case '4':
max_height(tf );
break;
case '5':
del(tf );
break;
case '0':
return 0;
default :
puts( "neverni rezgim" );
}
}
}
void input( FILE * tf )
{ char ch;
tf = fopen( "file1.dat", "wb" ); // открытие бинарного файла для записи
clrscr();
printf( "\n Vvod dannih \n" );
do
{ printf( "\n familiya: " );
scanf( "%s", t1.F );
printf( " Imya: " );
scanf( "%s", &t1.I );
printf( " otchestvo: " );
scanf( "%s", &t1.O );
printf( "Predmet 1 " );
scanf( "%s", &t1.subject[0].sub);
printf("Ocenka " );
scanf("%s", &t1.subject[0].bal );
printf( "Predmet 2 " );
scanf( "%s", &t1.subject[1].sub);
printf( "Ocenka " );
scanf( "%s", &t1.subject[1].bal );
printf( "Predmet 3 " );
scanf( "%s", &t1.subject[2].sub);
printf( "Ocenka " );
scanf( "%s", &t1.subject[2].bal );
printf( "Predmet 4 " );
scanf( "%s", &t1.subject[3].sub);
printf( "Ocenka " );
scanf( "%s", &t1.subject[3].bal );
fwrite( &t1, sizeof( t1 ), 1, tf ); // запись в файл одной структуры t1
printf( "\n Zakonchit? y/n " );
ch = getch();
} while( ch != 'y' );
fclose( tf );
}
void print( FILE * tf )
{
int i;
clrscr();
tf = fopen( "file1.dat", "rb" );
i = 1;
fread( &t1, sizeof( t1 ), 1, tf );
while( !feof( tf ) )
{
printf( "\n %3d familya %s imya %s otchestvo %s", i, t1.F, t1.I, t1.O);
printf( "\n Ocenki ");
printf("\n %s %s", t1.subject[0].sub, t1.subject[0].bal);
printf("\n %s %s", t1.subject[1].sub, t1.subject[1].bal);
printf("\n %s %s", t1.subject[2].sub, t1.subject[2].bal);
printf("\n %s %s", t1.subject[3].sub, t1.subject[3].bal);
fread( &t1, sizeof( t1 ), 1, tf );
i++;
}
close(tf);
getch();
}
void app( FILE * tf )
{ char ch;
tf = fopen( "file1.dat", "ab" ); // открытие бинарного файла для добавления
clrscr();
printf( "\n Vvod dannih \n" );
do
{ printf( "\n familiya: " );
scanf( "%s", t1.F );
printf( " Imya: " );
scanf( "%s", &t1.I );
printf( " otchestvo: " );
scanf( "%s", &t1.O );
printf( "Predmet 1 ocenka " );
scanf( "%s,%s", &t1.subject[0].sub, t1.subject[0].bal );
printf( "Predmet 2 ocenka " );
scanf( "%s,%s", &t1.subject[1].sub, t1.subject[0].bal );
printf( "Predmet 3 ocenka " );
scanf( "%s,%s", &t1.subject[2].sub, t1.subject[0].bal );
printf( "Predmet 4 ocenka " );
scanf( "%s,%s", &t1.subject[3].sub, t1.subject[0].bal );
fwrite( &t1, sizeof( t1.subject ), 1, tf ); // запись в файл одной структуры t1
printf( "\n Zakonchit? y/n " );
ch = getch();
}
while( ch != 'y' );
fclose( tf );
}
void max_height( FILE * fd)
{
int check = 0;
clrscr();
printf( " Vvedite familiu: " );
char name[10];
scanf( "%s", name );
fd = fopen( "file1.dat", "r+");
if( !fd )
return;
struct sport temp_buff;
fread( &t1, sizeof( t1 ), 1, fd );
char yx[0];
while( !feof( fd ))
{
if( ! strcmp (t1.F,name))
{
printf( "%s %s %s \n", t1.F, t1.I , t1.O );
printf( "\n Ocenki ");
printf("\n %s %s", t1.subject[0].sub, t1.subject[0].bal);
printf("\n %s %s", t1.subject[1].sub, t1.subject[1].bal);
printf("\n %s %s", t1.subject[2].sub, t1.subject[2].bal);
printf("\n %s %s", t1.subject[3].sub, t1.subject[3].bal);
printf( "\n Izmenit ocenki? y/n " );
scanf("%s",yx);
if( ! strcmp (yx,"y"))
{
check = 1;
FILE*tf;
tf = fopen( "file1.dat", "rb" );
fread( &t1, sizeof( t1 ), 1, tf );
char ch;
FILE*tf2;
tf2 = fopen( "file2.dat", "wb" );
while( !feof( tf ) )
{
if( ! strcmp (t1.F,name))
{
printf( "Predmet 1 " );
scanf( "%s", &t1.subject[0].sub);
printf("Ocenka " );
scanf("%s", &t1.subject[0].bal );
printf( "Predmet 2 " );
scanf( "%s", &t1.subject[1].sub);
printf( "Ocenka " );
scanf( "%s", &t1.subject[1].bal );
printf( "Predmet 3 " );
scanf( "%s", &t1.subject[2].sub);
printf( "Ocenka " );
scanf( "%s", &t1.subject[2].bal );
printf( "Predmet 4 " );
scanf( "%s", &t1.subject[3].sub);
printf( "Ocenka " );
scanf( "%s", &t1.subject[3].bal );
fwrite( &t1, sizeof( t1 ), 1, tf2 );
}
else
{
fwrite( &t1, sizeof( t1 ), 1, tf2 );
}
fread( &t1, sizeof( t1 ), 1, tf );
}
fclose(tf);
fclose( tf2 );
}
}
fread( &t1, sizeof( t1 ), 1, fd );
}
fclose( fd );
if (check =1){
remove( "file1.dat" );
rename("file2.dat","file1.dat");
}
getch();
}
void del(FILE* tf)
{
// remove( "file1.dat" );
tf = fopen( "file1.dat", "rb" );
fread( &t1, sizeof( t1 ), 1, tf );
char ch;
FILE*tf2;
tf2 = fopen( "file2.dat", "wb" );
int checker = 0;
while( !feof( tf ) )
{
checker = 0;
char lol[5];
if( ! strcmp (t1.subject[0].bal,"2"))
checker = checker +1;
if( ! strcmp (t1.subject[1].bal,"2"))
checker = checker +1;
if( ! strcmp (t1.subject[2].bal,"2"))
checker = checker +1;
if( ! strcmp (t1.subject[3].bal,"2"))
checker = checker +1;
if(checker==4)
{
}
else
{
fwrite( &t1, sizeof( t1 ), 1, tf2 );
}
fread( &t1, sizeof( t1 ), 1, tf );
}
fclose(tf);
fclose( tf2 );
}