Файл не удаляется после того, как отработала другая функция - 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 );  
   
}

Оцени полезность:

12   голосов , оценка 4.333 из 5
Похожие ответы