Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Nesprávne načítanie písmen zo súboru

Aktivity
Avatar
Artimer
Člen
Avatar
Artimer:19.6.2016 20:57

Ahoj, chcel by som vás poprosiť o pomoc z úlohou do školy. Mám načítať písmená z textového súboru, ktorých počet dopredu neviem zoradiť ich a potom vypísať do ďalšieho súboru... Problém je že načítané písmená po vypísaní vyzerajú ako obdlžníky tj. nevie ich to zobraziť... a ak ich vypíšem do konzoli sú to smailíci... ak však pridám načítavanie znakov v cykli tak sú znaky načítané správne..., lenže ja potrebujem testovať koniec súboru v podmienke cyklu... nič iné mi nenapadá... Neviete čím by to mohlo byť ?

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

main()

{
        char x;
        FILE *fr,*fw;
        fw=fopen("vystup.txt","w");
        if((fr=fopen("vstup.txt","r"))==NULL)
                printf("Subor sa nepodarilo otvorit!");
        while(x=getc(fr)!=EOF) // tu znkaky načítava nespravne
        {
                printf("%c",x); // ak pridam nacitanie aj tu tak znaky su spravne
                putc(x,fw);     //ale podmienka hore berie kazdy druhy znak
        }
        if(fclose(fr)==EOF)
                printf("Subor sa nepodarilo zavriet!");
        if(fclose(fw)==EOF)
                printf("Subor sa nepodarilo zavriet!");
}
 
Odpovědět
19.6.2016 20:57
Avatar
martanec
Člen
Avatar
Odpovídá na Artimer
martanec:20.6.2016 8:01

Skus skontrolovat kodovanie vstupneho suboru. Mne to pride, ako keby ten subor bol kodovany v UTF-8. Ak ano, skonvertuj ho do ISO-8859-2 alebo windows cp1250 (napr. pomocou Notepadd++) a problem by mal byt odstraneny.

 
Nahoru Odpovědět
20.6.2016 8:01
Avatar
B42P6
Člen
Avatar
Odpovídá na Artimer
B42P6:20.6.2016 8:24

V C má operátor != vacsiu prioritu ako operator =. Takze toto:

x = getc(fr) != EOF

Je v C chapane ako:

x = (getc(fr)!=EOF)

Myslim si, ze to nieje to, co chces dosiahnut.

Pridaj par zatvoriek a bude to fungovat ako potrebujes.

(x=getc(fr)) != EOF
Editováno 20.6.2016 8:26
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
20.6.2016 8:24
'long long long' is too long for GCC
Avatar
Artimer
Člen
Avatar
Odpovídá na B42P6
Artimer:20.6.2016 19:26

Ďakujem veľmi pekne za vysvetlenie, už mi to funguje.

 
Nahoru Odpovědět
20.6.2016 19:26
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.