[C] Sortowanie w pliku

Libertarian
Użytkownik
Użytkownik
Posty: 49
Rejestracja: 14 lip 2013, o 12:40
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 7 razy
Pomógł: 1 raz

[C] Sortowanie w pliku

Post autor: Libertarian »

Cześć! Mam taki o to program: . W pliku w.txt jest nie wiecej niz 2013 liczb calkowitych. Trzeba je posortowac od najmniejszej do najwiekszej i zapisac w pliku ws.txt tak aby kazda była w nowym wierszu. Moj pomysl byl taki aby wsadzic liczby z w.txt do tabeli posortowac i potem wpisac to ws.txt. Z wykonaniem tego pomyslu juz jest gorzej. Oto moj program, kompiluje sie jednak wystakuje tylko czarne okienko i wyglada to jakby si zaciął, prosze bardzo o pomoc

Kod: Zaznacz cały

#include <stdio.h>
int main()
{

int table[2014];

FILE *plik1;
FILE *plik2;
int size=2013;
int i, liczba;


plik1=fopen("w.txt", "r");
if((plik1=fopen("w.txt", "r"))==NULL)
{
printf("Nie moge otworzyc pliku
");
return(-1);
}
plik2=fopen("ws.txt", "w");

for(i=0;i<size;i++)
{
table[i]=fscanf(plik1,"%d", &liczba);
}
liczba=table[0];
do
{
    int j, temp;
        for (i = 0; i<size; i++)
        {
                for (j=0; j<size-1-i; j++)
                {
                        if (table[j] > table[j+1])
                        {
                                temp = table[j+1];
                                table[j+1] = table[j];
                                table[j] = temp;
                        }
                }
        }
}while((fscanf(plik1,"%d",liczba))==EOF);


for(i=0;i<size;i++)
fprintf(plik2,"%d	",table[i]);
fclose(plik1);
fclose(plik2);



return(0);
}
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C] Sortowanie w pliku

Post autor: Afish »

Kod: Zaznacz cały

for(i=0;i<size;i++)
{
table[i]=fscanf(plik1,"%d", &liczba);
}
liczba=table[0];
do
{
    int j, temp;
        for (i = 0; i<size; i++)
        {
                for (j=0; j<size-1-i; j++)
                {
                        if (table[j] > table[j+1])
                        {
                                temp = table[j+1];
                                table[j+1] = table[j];
                                table[j] = temp;
                        }
                }
        }
}while((fscanf(plik1,"%d",liczba))==EOF);
Skoro już wczytałeś 2013 liczb, to po co wczytujesz ponownie w pętli? No i co to za warunek, w którym czytasz tak długo, jak długo już nic więcej przeczytać nie możesz? Nie dziwota, że program się nie kończy.
Poza tym co zrobisz w sytuacji, gdy w pliku jest mniej, niż 2013 liczb?
Libertarian
Użytkownik
Użytkownik
Posty: 49
Rejestracja: 14 lip 2013, o 12:40
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 7 razy
Pomógł: 1 raz

[C] Sortowanie w pliku

Post autor: Libertarian »

Racja pętla do-while nie ma w ogole sensu. No własnie jak to rozwiązać gdy w pliku jest mniej niż 2013 liczb?
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C] Sortowanie w pliku

Post autor: Afish »

Libertarian pisze:No własnie jak to rozwiązać gdy w pliku jest mniej niż 2013 liczb?
Wczytać tyle, ile jest?
ODPOWIEDZ