Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania bez odpowiedzi
Viewing all articles
Browse latest Browse all 21942

Błędny zapis danych do pliku C

$
0
0

EDIT Zapomniałem o tym, że posortowane zostały również znaki nowych linii, wystarczyło przewinąć plik do końca. Problem rozwiązany.

Hej! Piszę program wczytujący znaki z pliku, sortujący je według kodów ASCII, a następnie zapisujący posortowane dane do drugiego pliku. W tym momencie pojawia się problem, ponieważ do pliku zapisywane są mniej więcej tylko polskie znaki specjalne, nie wiem dlaczego tak się dzieje i proszę o jakąś wskazówkę. Jako przykładowych danych używam Pana Tadeusza, program uruchamia się z jednoczesnym podaniem parametrów będących nazwami plików do odczytu i zapisu.

 

#include <stdio.h>

int main(int argc, char*argv[])
{
    FILE *odczyt;
    FILE *zapis;

    if(argc<2)
    {
        printf("Za mala liczba argumentow.\nWprowadz dane w formacie %s plik_do_odczytu.txt plik_do_zapisu.txt",argv[0]);
        exit(1);
    }

    odczyt = fopen (argv[1], "r");
    if (odczyt==NULL)
     {
       printf ("Nie mogę otworzyć pliku %s do odczytu!\n",argv[1]);
       exit(1);
     }

    zapis = fopen (argv[2], "w");
    if (zapis==NULL)
     {
       printf ("Nie mogę otworzyć pliku %s do zapisu!\n",argv[2]);
       exit(1);
     }

    fpos_t dlugosc;
    fseek (odczyt, 0, SEEK_END);  //ustawiamy wskaŸnik na koniec pliku
    fgetpos (odczyt, &dlugosc);
    fseek (odczyt, 0, SEEK_SET);

    char tab[dlugosc];
    char pomoc[dlugosc];

 /* Scalanie dwoch posortowanych ciagow
tab[pocz...sr] i tab[sr+1...kon] i
wynik zapisuje w tab[pocz...kon] */
void scalanie(int pocz, int sr, int kon)
{
    int i,j,q;

    for (i=pocz; i<=kon; i++)
      {
        pomoc[i]=tab[i];   // Skopiowanie danych do tablicy pomocniczej
      }

    i=pocz;
    j=sr+1;
    q=pocz;
                // Ustawienie wskaźników tablic
    while (i<=sr && j<=kon)
        {                    // Przenoszenie danych z sortowaniem ze zbiorów pomocniczych do tablicy głównej
          if (pomoc[i]<pomoc[j])
           {
             tab[q++]=pomoc[i++];
           }
          else
           {
              tab[q++]=pomoc[j++];
           }
         }

    while (i<=sr)
        {
          tab[q++]=pomoc[i++];
        }
                      // Przeniesienie nie skopiowanych danych ze zbioru pierwszego w przypadku, gdy drugi zbiór się skończył
}

/* Procedura sortowania tab[pocz...kon] */
void sortowanie(int pocz, int kon)
{
    int sr;

    if (pocz<kon)
     {
       sr=(pocz+kon)/2;
       sortowanie(pocz, sr);    // Dzielenie lewej części
       sortowanie(sr+1, kon);   // Dzielenie prawej części
       scalanie(pocz, sr, kon);   // Łączenie części lewej i prawej
     }
}

    int i;

    for (i=0;i<dlugosc;i++)
      {
        tab[i]=fgetc(odczyt);
      }

    sortowanie(0,dlugosc-1);

    printf("\nZbior po sortowaniu:\n");

    for (i=0; i<dlugosc; i++) /*ZAPIS DO PLIKU*/
      {
        //fputc(tab[i],zapis); jakby co to z tym tez nie dziala
        fprintf(zapis, "%c",tab[i]);
        printf("%c ", tab[i]);
      }

    fclose(odczyt);
    fclose(zapis);

  return 0;
}

Viewing all articles
Browse latest Browse all 21942

Trending Articles


TRX Antek AVT - 2310 ver 2,0


Автовишка HAULOTTE HA 16 SPX


POTANIACZ


Zrób Sam - rocznik 1985 [PDF] [PL]


Maxgear opinie


BMW E61 2.5d błąd 43E2 - klapa gasząca a DPF


Eveline ➤ Matowe pomadki Velvet Matt Lipstick 500, 506, 5007


Auta / Cars (2006) PLDUB.BRRip.480p.XviD.AC3-LTN / DUBBING PL


Peugeot 508 problem z elektroniką


AŚ Jelenia Góra