Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zapis do pliku

Ostatnio zmodyfikowano 2016-11-28 22:07
Autor Wiadomość
klaphson
Temat założony przez niniejszego użytkownika
Zapis do pliku
» 2016-11-28 20:51:09
Witam! Mam problem mianowicie za każdym razem gdy próbuję wywołać funkcję zapisz cookolwiek tam proboje wpisac do pliku wyskakuje mi ERROR Stream != NULL. Poradzcie coś jak zapisać do pliku zawartość tablicy dane[j].

Program rozbity na kilka plików(PS pliku header nie wklejam):

main.c

C/C++
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include "pgm.h"
#include <string.h>


int main() {
   
    int i, j, d;
    struct pgm obrazPGM, * obpgm, * obpgm1 = NULL, * obpgm2 = NULL, * obpgm3; //definicje zmiennej i wskaznika na strukture pgmA                        
    obpgm = & obrazPGM; //inicjalizacja wskaznika na strukrure pgmA
    obpgm =( struct pgm * ) malloc( 1 * sizeof( struct pgm ) );
   
    stworz();
    printf( "Podaj nazwe pliku: " );
    gets( obpgm->nazwaPliku );
   
    while( 1 ) {
        printf( "Wczytaj - 1  Wyswietl - 2  Usun - 3 Zapisz - 4 Wyjdz - 0\n" );
        scanf( "%d", & d );
        if( d == 0 ) break;
       
        switch( d ) {
        case 1:
            obpgm1 = wczytaj( obpgm->nazwaPliku, obpgm );
            break;
        case 2:
            wyswietl( obpgm1 );
            break;
        case 3:
            usun( obpgm1 );
            break;
        case 4:
            obpgm3 = & obrazPGM;
            obpgm2 =( struct pgm * ) malloc( 1 * sizeof( struct pgm ) );
            printf( "Podaj nazwe pliku: " );
            gets( obpgm3->nazwaPliku );
            zapisz( obpgm3->nazwaPliku, obpgm1 );
           
            break;
            default:
            printf( "Nieprawidlowy wybor\n" );
            break;
        }
    }
   
    system( "pause" );
    return 0;
}
[ cpp ]

pgm.c
C/C++
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include "pgm.h"


struct pgm * wczytaj( char * nazwa, struct pgm * foto ) {
   
    int i, j;
   
    FILE * plik;
    plik = fopen( nazwa, "r" );
    if( plik == NULL ) printf( "Nie mozna otworzyc pliku\n" );
   
    foto->koment =( char * ) calloc( 100, sizeof( char ) );
   
    fgets( foto->p2, 10, plik );
    fgets( foto->koment, 100, plik );
   
    fscanf( plik, "%d %d", &( foto->k ), &( foto->w ) );
    fscanf( plik, "%d", &( foto->sk ) );
   
    //alokacja pamieci na tablice 2D
    ( foto->dane ) =( int ** ) calloc( foto->k, sizeof( int * ) ); //alokacja pamieci na kolumny
   
    for( i = 0; i <( foto->k ); i++ ) {
        foto->dane[ i ] =( int * ) calloc( foto->w, sizeof( int ) ); // akolacja pamieci na wiersze
    }
   
    //wczytanie obrazu do tablicy//
    for( i = 0; i <( foto->w ); i++ ) { // indeks i - numer wiersza
        for( j = 0; j <( foto->k ); j++ ) {
            fscanf( plik, "%d", &( foto->dane[ j ][ i ] ) ); // indeks j - numer kolumny
        }
    }
   
    fclose( plik );
    return foto;
}

void wyswietl( struct pgm * obpgm1 ) {
    int i, j;
    printf( "Nazwa pliku to: %s\n", obpgm1->nazwaPliku );
    printf( "P2: %s", obpgm1->p2 );
    printf( "Komantarz: %s", obpgm1->koment );
    printf( "Parametry k,w,sk: %d %d %d\n\n", obpgm1->k, obpgm1->w, obpgm1->sk );
   
    for( i = 0; i <( obpgm1->w ); i++ ) {
        for( j = 0; j <( obpgm1->k ); j++ ) {
            //printf("%d ", obpgm1->dane[j][i] );      //UWAGA - wyswietlanie duzych plikow moze dlugo trwac!!!
        }
        //printf("\n");                                //przejscie do nastepnej linii
    }
}

void stworz()
{
    FILE * plik;
    int a, b;
    plik = fopen( "gradient.pgm", "w" );
    fputs( "P2 \n", plik );
    fputs( "256 50 \n", plik );
    fputs( "255 \n", plik );
    for( a = 0; a < 50; a++ )
    {
        for( b = 0; b < 256; b++ )
        {
            fprintf( plik, " %d ", b );
        }
        fputs( "\n", plik );
    }
    fclose( plik );
}

void zapisz( char * nazwa, struct pgm * obpgm1 )
{
    FILE * plik;
    int h, g;
    plik = fopen( nazwa, "w" );
   
   
   
    fclose( plik );
   
}

void usun( struct pgm * foto ) {
    int i;
    if( foto->dane != NULL ) {
        for( i = 0; i <( foto->k ); i++ ) {
            free( foto->dane[ i ] );
        }
        free( foto->dane );
        foto->dane = NULL;
        printf( "Paniec zwolniona\n" );
    }
    else {
        printf( "Pamiec zostala juz wczesniej zwolniona\n" );
    }
}

[ cpp ]
P-154227
1aam2am1
» 2016-11-28 21:11:36
To na pierwszy ogień:
C/C++
struct pgm obrazPGM, * obpgm, * obpgm1 = NULL, * obpgm2 = NULL, * obpgm3; //po co tyle wskaźników
obpgm = & obrazPGM; //po co obiekt obrazPGM jak niżej alokujesz pamięć
obpgm =( struct pgm * ) malloc( 1 * sizeof( struct pgm ) );


//hm a niżej
obpgm3 = & obrazPGM; //jakiś nowy wskaźnik ustawiony na obiekt
obpgm2 =( struct pgm * ) malloc( 1 * sizeof( struct pgm ) ); //i nowa alokacja

zapisz( obpgm3->nazwaPliku, obpgm1 ); //a tutaj używamy obiektu nowo utworzonego na którym nie było żadnych zmian

Na razie to na tyle z mojej strony.
PS. Pomyśl co robi każda linijka.
P-154228
klaphson
Temat założony przez niniejszego użytkownika
» 2016-11-28 21:18:38
dalej to samo, dodam też że program mi się kompiluje a ten błąd wyskakuje gdy w uruchomionym programie wybieram opcje ZAPIS
P-154229
1aam2am1
» 2016-11-28 21:59:27
Bez kodu struktury nic ci więcej nie powiem. Ale zapewne pracujesz na dwóch różnych obiektach.
Użyj debugera aby dowiedzieć się jakie zmiany w danej strukturze powoduje twój kod.
P-154230
klaphson
Temat założony przez niniejszego użytkownika
» 2016-11-28 22:07:30
C/C++
#ifndef _ABC_            //sprawdzamy czy wczesniej nie definiowano podobnego pliku
#define _ABC_            //jesli NIE to definiujemy

struct pgm {
    char nazwaPliku[ 100 ];
    char p2[ 10 ];
    char * koment;
    int k, w, sk;
    int ** dane;
};

struct pgm * wczytaj( char *, struct pgm * ); //wczytanie danych z pliku pgm
void wyswietl( struct pgm * ); // wyswietla dane
void usun( struct pgm * ); // czysci pamiec
struct pgm * zapisz( char *, struct pgm * );
void stworz();
#endif                   //koniec definicji


[ cpp ]
P-154231
« 1 »
  Strona 1 z 1