[ Príspevkov: 24 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4 | 4
NapísalOffline : 25.06.2015 18:28 | makro feof a cyklus

Caute

Mam nasledovny program:
Kód:
#include <stdio.h>

main()
{
FILE *fr1, *fr2;
int z;

z=0;


fr1 = fopen("pismena1.txt", "r");
fr2 = fopen("pismena2.txt", "r");

while (feof(fr1) == 0  ||  feof(fr2) == 0){   
if(getc(fr1) != getc(fr2)){
        z++;
    }
}
if (z == 0)
    printf("subory su naprosto zhodne");
else
    printf("subory sa nezhoduju v %d znakoch", z);

    return 0;
}


No a v prvom rade otazka znie makro feof funguje tak ze nulova hodnota je pokial nedosiahol konca subora a nenulova pokial dosiahol ale cital som nieco ze to dava nenulovu az potom ako precita eof a ze sa to potom nejak pokazi a slucka ide odznova stale. Keby mi to mohol niekto objasnit prosim.

No a druha vec je v tom mojom programe kde je podmienka while tak vlastne ked mam subory z roznou dlzkou, povedzme ten prvy obsahuje menej znakov tak logicky kedze tam je OR a v prvom sa uz nema co citat feof sa rovna 1 a cyklus sa ukonci bez toho aby sa docital ten druhy subor dokonca. No ale nie on sa nejako zazracne cita dalej lebo ked program spustim tak vypise spravne o kolko znakov sa subory lisia. Pre mna by mi tam viac sedelo AND akoze ked su obidva docitane tak skonci cyklus. Takze tomu nechapem. Mohol by mi to prosim niekto vysvetlit?


Online

Užívateľ
Užívateľ
makro feof a cyklus

Registrovaný: 01.10.06
Prihlásený: 21.06.18
Príspevky: 6040
Témy: 13 | 13
Bydlisko: Bratislava
NapísalOnline : 25.06.2015 18:58 | makro feof a cyklus

Ked tam mas OR tak while to pojde dovtedy dokym je aspon jedna z podmienok splnena to znamena ze cyklus fici ak oba subory sa == 0, aspon prvy zo suborov sa == 0, aspon druhy zo suborov sa == 0. Cyklus sa ukonci az vtedy ked sa dosiahol koniec v oboch suboroch.
Ked tam das AND tak while pojde len do vtedy kym oba subory nie su docitane cize oba sa == 0. Akonahle aspon jeden dosiahne koniec cyklus konci.


_________________
PC1: Intel Q6600, AMD Sapphire R9 280 DUAL-X BOOST, DDR2 1066 A-data 8Gb, Seagate Barracuda 7200.12 2000GB, Asus P5E X38, Samsung 225 BW,
PC2: Intel Q6600, MSI GTX 670 OC (TwinFrozr IV), DDR2 1066 A-data 4Gb + Kingston 2GB, Seagate Barracuda 7200.12 2000GB, Gigabyte EP35-DS4, LG FLATRON L226WTQ, Razer Mamba 2015
Notebook: Sony VAIO CW Series (VPC-CW1S1E/B) || Mobil: Samsung Galaxy S4 || Auto: Seat Exeo 2.0 TSI Style
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4 | 4
Napísal autor témyOffline : 25.06.2015 19:05 | makro feof a cyklus

Tak ja som nauceny tak ze : 0 0 = 0
1 0 = 1
0 1 = 1
1 1 = 1
kde =1 znamena ze opusta cyklus v cecku to funguje teda opacne?


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.08.13
Prihlásený: 13.02.16
Príspevky: 24
Témy: 6 | 6
Bydlisko: Svidnik
NapísalOffline : 25.06.2015 20:41 | makro feof a cyklus

Zdravím,

teraz ti ten while funguje týmto spôsobom:

napr. v 1. subore sú 2 znaky, v 2. subore sú 3 znaky

vezmem prvý znak a skontrolujem prvú podmienku je splnená pokračujem (druha podmienka ma nezaújma)
vezmem druhý znak a skontrolujem prvú podmienku je splnená pokračujem (druha podmienka ma nezaújma)
vezmem tretí znak a skontrolujem prvú podmienku nieje splnená tak skontrolujem druhú podmienku tá je splnená
chcem zobrat štvrý znak a skontrolujem prvú podmienku nieje splnená tak skontrolujem druhú podmienku tá tiež nieje splnená koniec

posledná vec pri práci so súbormi NEZABUDAJ ICH ZATVORIT!!!!!!!!


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4 | 4
Napísal autor témyOffline : 25.06.2015 20:51 | makro feof a cyklus

A preco ho ta druha podmienka nezaujima ? v cecku teda ked vysledok sa rovna 0 tak opusta cyklus a 1 ked neopusta?

K tomu makru feof neviete nic nasiel som nieco taketo ale nepochopil som to http://www.gidnetwork.com/b-58.html


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.08.13
Prihlásený: 13.02.16
Príspevky: 24
Témy: 6 | 6
Bydlisko: Svidnik
NapísalOffline : 25.06.2015 20:57 | makro feof a cyklus

Ked mas OR:

1 cast podmienky || 2 cast podmienky

pri OR staci ze je splnena prva cast podmienky druhu nepotrebujes kontrolovat.

while(1) cyklus bezi

takze ak je splnena prva cast

while (1 || 0) = while (1) podla tych podmienok co si si napisal tak to plati


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4 | 4
Napísal autor témyOffline : 25.06.2015 21:04 | makro feof a cyklus

NO okej takze si to teda zapametam 0 opusta, 1 zostava v cykle dakujem ;)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.08.13
Prihlásený: 13.02.16
Príspevky: 24
Témy: 6 | 6
Bydlisko: Svidnik
NapísalOffline : 25.06.2015 21:06 | makro feof a cyklus

V C som už dlho nerobil ale pozri si feof tu

http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1046476070&id=1043284351


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.08.11
Prihlásený: 21.06.18
Príspevky: 2364
Témy: 11 | 11
Bydlisko: Turany/Brno
NapísalOffline : 25.06.2015 21:10 | makro feof a cyklus

Len tak pre zaujimavost, v akom jazyku je to naopak?
A btw koniec suboru mozes kontrolovat aj s getc rovno ;)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4 | 4
Napísal autor témyOffline : 25.06.2015 21:18 | makro feof a cyklus

Vies co ani sam neviem som mal nejako zafixovane v hlave ze to je takto ale zda sa mi ze v pascale to je naopak

myslis ako ked getc == EOF?


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.08.11
Prihlásený: 21.06.18
Príspevky: 2364
Témy: 11 | 11
Bydlisko: Turany/Brno
NapísalOffline : 25.06.2015 22:24 | makro feof a cyklus

Ano, alebo nerovna.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4 | 4
Napísal autor témyOffline : 25.06.2015 22:41 | makro feof a cyklus

No tak dal som to cez to EOF a vyhadzuje vacsi pocet znakov jak ma :
Kód:
while ((a = getc(fr1)) != EOF  ||  (b = getc(fr2) != EOF)){
    if(a != b){
        z++;
    }


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.08.11
Prihlásený: 21.06.18
Príspevky: 2364
Témy: 11 | 11
Bydlisko: Turany/Brno
NapísalOffline : 25.06.2015 22:54 | makro feof a cyklus

a, b su akeho typu ?


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4 | 4
Napísal autor témyOffline : 25.06.2015 22:56 | makro feof a cyklus

integer


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.08.11
Prihlásený: 21.06.18
Príspevky: 2364
Témy: 11 | 11
Bydlisko: Turany/Brno
NapísalOffline : 25.06.2015 23:13 | makro feof a cyklus

V cecku sa OR vyhodnocuje tak, ze ak je hned prvy vyraz true, druhy uz ani nepocita. Takze v jednom subore sa zacne pocuvat az ked je prvy vyraz false.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.08.13
Prihlásený: 13.02.16
Príspevky: 24
Témy: 6 | 6
Bydlisko: Svidnik
NapísalOffline : 25.06.2015 23:20 | makro feof a cyklus

Možes poslať vstup aj vysup?

ten while by mal byt takto ozatvorkovany:

Kód:
while (((a = getc(fr1)) != EOF)  ||  ((b = getc(fr2)) != EOF)){
    if(a != b){
        z++;
    }


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4 | 4
Napísal autor témyOffline : 25.06.2015 23:21 | makro feof a cyklus

cize najprv spocita znaky v prvom potom v druhom subore spolu je to 37 v mojom pripade a to vypise. cize z getc to nebude fungovat len s feof?

// Spojený príspevok Štv 25.06.15 23:24

Kód:
#include <stdio.h>

main()
{
FILE *fr1, *fr2;
int a, b, z;

z = 0;
fr1 = fopen("pismena1.txt", "r");
fr2 = fopen("pismena2.txt", "r");

while (((a = getc(fr1)) != EOF)  ||  ((b = getc(fr2) != EOF))){
    if(a != b){
        z++;
    }
}
if (z == 0)
    printf("subory su naprosto zhodne");
else
    printf("subory sa nezhoduju v %d znakoch", z);

    return 0;
}


vystup je: subory sa nezhoduju v 37 znakoch


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.08.11
Prihlásený: 21.06.18
Príspevky: 2364
Témy: 11 | 11
Bydlisko: Turany/Brno
NapísalOffline : 25.06.2015 23:24 | makro feof a cyklus

No ono celkovo musis domysliet, co sa stane ak niesu rovnakej dlzky. Ci sa odignoruje ten ostatok alebo to budes osetrovat. Da sa to spravit oboma sposobmi.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4 | 4
Napísal autor témyOffline : 25.06.2015 23:29 | makro feof a cyklus

No osetrim to volako alebo tam necham fakt to feof


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.08.11
Prihlásený: 21.06.18
Príspevky: 2364
Témy: 11 | 11
Bydlisko: Turany/Brno
NapísalOffline : 25.06.2015 23:35 | makro feof a cyklus

Kludne to pouzi ale aj tak to neriesi ten povodny problem a je to nebezpecne. getc() vrati EOF aj ked nastane chyba v citani, feof() iba na konci suboru.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.08.13
Prihlásený: 13.02.16
Príspevky: 24
Témy: 6 | 6
Bydlisko: Svidnik
NapísalOffline : 25.06.2015 23:38 | makro feof a cyklus

Ak feof funguje tak ako si pisal v prvom prispevku tak skus toto

Kód:
while (feof(fr1) =! 1  &&  feof(fr2) =! 1){
        if(getc(fr1) != getc(fr2)){
              z++;
        }
}

fclose (fr1);
fclose (fr2);


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4 | 4
Napísal autor témyOffline : 25.06.2015 23:40 | makro feof a cyklus

zasa ked pouzijem EOF v binarnom subore mozes skoncit citanie skorej ked sa nieco bude rovnat 255


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.08.13
Prihlásený: 13.02.16
Príspevky: 24
Témy: 6 | 6
Bydlisko: Svidnik
NapísalOffline : 25.06.2015 23:41 | makro feof a cyklus

sorry toto je blbost

Spown3 píše:
Ak feof funguje tak ako si pisal v prvom prispevku tak skus toto

Kód:
while (feof(fr1) =! 1  &&  feof(fr2) =! 1){
        if(getc(fr1) != getc(fr2)){
              z++;
        }
}

fclose (fr1);
fclose (fr2);


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.08.11
Prihlásený: 21.06.18
Príspevky: 2364
Témy: 11 | 11
Bydlisko: Turany/Brno
NapísalOffline : 25.06.2015 23:43 | makro feof a cyklus

Kód:
while(!feof(fr1) && !feof(fr2))

V Ccku je true vsetko okrem 0, takze ak to porovnas s 1 nemusi to byt spravne.
A EOF je -1 a kedze getc vracia integer, ktory nema urcite len 1 byte tak to absolutne nevadi.


 [ Príspevkov: 24 ] 


makro feof a cyklus



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

makro

v Assembler, C, C++, Pascal, Java

2

157

30.05.2012 11:17

ewil

V tomto fóre nie sú ďalšie neprečítané témy.

excel makro

v Ostatné programy

0

247

15.02.2011 16:22

kyjak

V tomto fóre nie sú ďalšie neprečítané témy.

Makro-excel-VisualBasic

v Delphi, Visual Basic

2

3217

11.01.2006 13:47

zeman

V tomto fóre nie sú ďalšie neprečítané témy.

Excel, vyhladavacie makro

v Delphi, Visual Basic

2

394

10.06.2014 21:26

bartimeus

V tomto fóre nie sú ďalšie neprečítané témy.

Makro-odstranenie diakritiky v excely

v Ostatné programy

4

627

24.01.2012 15:13

kati123

V tomto fóre nie sú ďalšie neprečítané témy.

Nekonečný cyklus

v JavaScript, VBScript, Ajax

8

400

04.09.2011 9:49

camo

V tomto fóre nie sú ďalšie neprečítané témy.

VB - cyklus

v Delphi, Visual Basic

3

584

21.05.2009 11:19

Patkoo

V tomto fóre nie sú ďalšie neprečítané témy.

diagram cyklus

v Ostatné

2

53

13.06.2018 17:14

void

V tomto fóre nie sú ďalšie neprečítané témy.

[pascal] nekonecny cyklus

v Assembler, C, C++, Pascal, Java

3

384

02.04.2010 13:24

vama

V tomto fóre nie sú ďalšie neprečítané témy.

C cyklus for

v Assembler, C, C++, Pascal, Java

10

583

26.11.2011 13:57

Fico

V tomto fóre nie sú ďalšie neprečítané témy.

PHP cyklus for

v PHP, ASP

8

321

20.11.2010 16:13

venom2

V tomto fóre nie sú ďalšie neprečítané témy.

JAVA, FOREACH CYKLUS

v Assembler, C, C++, Pascal, Java

2

193

25.08.2017 8:20

mitko

V tomto fóre nie sú ďalšie neprečítané témy.

nekonečný cyklus v jave

v Assembler, C, C++, Pascal, Java

2

672

01.01.2010 16:58

jarrro

V tomto fóre nie sú ďalšie neprečítané témy.

EXCEL - cyklus na combobox

v Ostatné programy

1

865

28.07.2009 17:10

PaloPa

V tomto fóre nie sú ďalšie neprečítané témy.

update velkeho mnozstva dat - cyklus?

v PHP, ASP

4

131

02.02.2013 16:36

Ďuri

V tomto fóre nie sú ďalšie neprečítané témy.

Cyklus v dopyte na databazu

v PHP, ASP

5

227

08.10.2010 17:37

shaggy



© 2005 - 2018 PCforum, edited by JanoF