• 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

0 głosów
531 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,220 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,220 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ź 1,402 wizyt
pytanie zadane 9 stycznia 2022 w C i C++ przez Sway22 Początkujący (270 p.)
0 głosów
3 odpowiedzi 956 wizyt
0 głosów
0 odpowiedzi 485 wizyt

93,758 zapytań

142,716 odpowiedzi

323,363 komentarzy

63,355 pasjonatów

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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...