• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wczytanie liczb z pliku do tablicy

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
357 wizyt
pytanie zadane 12 maja 2019 w C i C++ przez Aleksandra01 Użytkownik (530 p.)

Mam problem z wczytaniem danych,liczb z pliku do nowej tablicy.
Efekt tego programu dla np. rozmiaru tablicy 12 :

 24  51   6  11  75  17  33  17  20  41  71  29
  0   0   0   0   0   0   0   0   0   0   0   0

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int rand_int (int a, int b){
 
  return (a + rand()%(b-a+1));
}
void wypisz(int *tab,int size)
{
    for(int i=0;i<size;i++)
        printf("%3d ",tab[i]);
}

int main(int argc, char *argv[])
{
    int *tab,*tab1,*tab2;
    time_t czas;
    srand((unsigned int)time(&czas));
    int size;
    FILE *plik_txt=fopen(argv[1],"r+");
    FILE *plik_bin=fopen(argv[2],"rb+");
    
    if(argc!=3){
        printf("Nie podałeś 2 plików wejściowych.\n");
        return(1);
    }
    
    if(plik_txt==NULL){
        perror("Error");
        printf("Nie można otworzyć pliku\n");
        }
    if(plik_bin==NULL){
        perror("Error");
        printf("Nie można otworzyć pliku\n");
        }
    
    printf("Podaj rozmiar tablicy double:");
    scanf("%d",&size);
    
    tab=malloc(size*sizeof(int));
    
    for(int i=0;i<size;i++)
        tab[i]=rand_int(0,100);
    
    for(int i=0;i<size;i++)
        printf("%3d ",tab[i]);
    printf("\n");
    
    
    for(int i=0;i<size;i++){
        fprintf(plik_txt,"%3d \n",tab[i]);
        fprintf(plik_bin,"%3d \n",tab[i]);
        fprintf(plik_bin,"%3d \n",tab[i]);
    }
    tab1=malloc(size*sizeof(int));
    tab2=malloc(size*sizeof(int));
    int i=0,k=0;
    char ch;
    
    while(!feof(plik_txt)){
        fscanf(plik_txt,"%3d ",&tab1[i]);
        //printf("%3d ",tab1[i]);
        i++;
    }

    
    
    //while(!feof(plik_bin)){
        //fscanf(plik_bin,"%d", &tab2[k]);
    //k++;}
        
    wypisz(tab1,size);
    printf("\n");
    //wypisz(tab2,size);
    printf("\n");
    
    
    fclose(plik_txt);
    fclose(plik_bin);
    
    free(tab1);
    free(tab2);
        return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 13 maja 2019 przez j23 Mędrzec (195,260 p.)
edycja 13 maja 2019 przez j23
while(i < size && fscanf(plik_txt, "%d", &tab1[i]) == 1) { ++i; }
wypisz(tab1, i);

 

komentarz 13 maja 2019 przez Aleksandra01 Użytkownik (530 p.)
niestety nie pomogło,randomowe liczby się drukują :/
jeszcze jest taki błąd nie wiem skąd,że np dla size 20 w pliku wyświetlają się 20 liczb i śmieci
np.
 

 

 31
 63
 50
  6
 16
 49
 45
 20
 78
 71
 34
  1
 35
 66
 28
 27
 75
 32
  7
 96
99

99

53

28

83

26

50

32

21

74

75

80

9

84

21

38

30

44

20

78

34

93

tak wygląda po skopiowaniu,a w notatniku ma taką formę:
 

 31  63  50  6  16  49  45  20  78  71  34  1  35  66  28  27  75  32  7  96 9999532883265022217475809842138304420783493
komentarz 13 maja 2019 przez j23 Mędrzec (195,260 p.)

Nie zauważyłem, że używasz tego samego strumienia do zapisu i odczytu. Daj przed odczytem wywołanie funkcji rewind.

 

Dlaczego podwójnie zapisujesz liczby do plik_bin?

 

PS. zmieniłem nieco kod.

Podobne pytania

+1 głos
1 odpowiedź 721 wizyt
pytanie zadane 9 stycznia 2022 w C i C++ przez Sway22 Początkujący (270 p.)
0 głosów
3 odpowiedzi 613 wizyt
0 głosów
0 odpowiedzi 356 wizyt

93,187 zapytań

142,203 odpowiedzi

322,023 komentarzy

62,515 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2581p. - dia-Chann
  2. 2537p. - Łukasz Piwowar
  3. 2528p. - Łukasz Eckert
  4. 2514p. - CC PL
  5. 2476p. - Tomasz Bielak
  6. 2445p. - Łukasz Siedlecki
  7. 2443p. - rucin93
  8. 2201p. - Michal Drewniak
  9. 2156p. - Marcin Putra
  10. 2152p. - Adrian Wieprzkowicz
  11. 2105p. - Mikbac
  12. 1941p. - Anonim 3619784
  13. 1733p. - rafalszastok
  14. 1701p. - Michał Telesz
  15. 1580p. - ssynowiec
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...