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

Zapisywanie i odczytywanie liczb z pliku tekstowego.

Ostatnio zmodyfikowano 2018-01-18 13:42
Autor Wiadomość
Bercik97
Temat założony przez niniejszego użytkownika
Zapisywanie i odczytywanie liczb z pliku tekstowego.
» 2018-01-18 12:56:01
Witam, dopiero zacząłem pliki i mam taki problem, chce wylosować sobie 100 liczb randomowych, zapisać je i nast. je wyświetlić. Program zapisuje mi te liczby tylko nie wiem jak skrócić ten kod, tzn. nie chce dwa razy otwierać tego samego pliku i zamykać, tylko chce zrobić to za jednym razem. Pomożecie?
C/C++
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100

int main()
{
    FILE * plik;
    char nazwa[ N ];
    int x, i, y;
    srand( time( NULL ) );
    plik = fopen( "eloski.txt", "w" );
    if( plik == NULL ) {
        puts( "Nie udalo sie otworzyc pliku!" );
        exit( EXIT_FAILURE );
    }
    for( i = 0; i < N; i++ ) {
        x = rand() % 20 + 1;
        fprintf( plik, "%d\n", x );
    }
    fclose( plik );
   
    plik = fopen( "eloski.txt", "r" );
    if( plik == NULL ) {
        puts( "Nie udalo sie otworzyc pliku!" );
        exit( EXIT_FAILURE );
    }
    i = 1;
    while(( fscanf( plik, "%d\n", & x ) ) != EOF ) {
        printf( "#%d.%d\n", i, x );
        i++;
    }
   
    fclose( plik );
   
    return 0;
}

edit: ok, już zrobiłem ale nie wiem czy to jest bezpieczna składania, zamieniłem to zamiast tego drugiego otwierania pliku aż do końca programu.
C/C++
for( i = 0; i < N; i++ ) {
    fscanf( plik, "%d\n", & x[ i ] );
    printf( "%d\n", x[ i ] );
}
P-168832
geceves
» 2018-01-18 13:08:19
Po prostu nie zamykaj pliku i nie otwieraj ponownie pliku. Funkcje, które mogą Cię zainteresować to
fseek
 oraz
fflush
.

Może także, Ci się spodobać:
C/C++
#include <stdio.h>
char mybuffer[ 80 ];
int main()
{
    FILE * pFile;
    pFile = fopen( "example.txt", "r+" );
    if( pFile == NULL ) perror( "Error opening file" );
    else {
        fputs( "test", pFile );
        fflush( pFile ); // flushing or repositioning required
        fgets( mybuffer, 80, pFile );
        puts( mybuffer );
        fclose( pFile );
        return 0;
    }
}
http://www.cplusplus.com​/reference/cstdio/fflush/
P-168833
Bercik97
Temat założony przez niniejszego użytkownika
» 2018-01-18 13:12:15
To co mam wpisać jako drugi argument fopen? w+r?

edit: aa ok
P-168834
geceves
» 2018-01-18 13:42:01
Jeżeli masz problem z "w+" i "r+" to polecam przeczytać: https://stackoverflow.com​/questions/21113919​/difference-between-r-and-w-in-fopen

Albo przetestować sobie zamieszczony tam kod:

C/C++
#include <stdio.h>
int main()
{
    FILE * fp;
   
    fp = fopen( "test.txt", "w+" );
    fprintf( fp, "This is testing for fprintf...\n" );
    fputs( "This is testing for fputs...\n", fp );
    fclose( fp );
}

C/C++
#include <stdio.h>
int main()
{
    FILE * fp;
   
    fp = fopen( "test.txt", "w+" );
    fclose( fp );
}

Następnie to samo zmieniając "w+" na "r+" i porównaj sobie za każdym razem jak wyglądają pliki.
P-168835
« 1 »
  Strona 1 z 1