Stránka: 1 z 1
| [ Príspevkov: 24 ] | |
Autor | Správa |
---|
Registrovaný: 10.11.11 Prihlásený: 26.06.15 Príspevky: 14 Témy: 4 | 4 |
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?
|
|
Registrovaný: 01.10.06 Prihlásený: 16.05.24 Príspevky: 6561 Témy: 15 | 15 Bydlisko: Bratislava |
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.
_________________ PC: Intel Q6600@3,33GHz, MSI GTX 670 OC (TwinFrozr IV), DDR2 1066 A-data 8Gb, Seagate Barracuda 7200.12 2000GB, Kingston 240GB SSD, Gigabyte EP35-DS4, MSI OPTIX G273QF , Logitech G502 Proteus Spectrum Notebook: Sony VAIO CW Series (VPC-CW1S1E/B) / LENOVO Legion 5 Pro 16ACH6H Stingray White || Mobil: Samsung Galaxy S21 FE || Auto: Audi S5 Sportback |
|
Registrovaný: 10.11.11 Prihlásený: 26.06.15 Príspevky: 14 Témy: 4 | 4 |
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?
|
|
Registrovaný: 05.08.13 Prihlásený: 13.02.16 Príspevky: 24 Témy: 6 | 6 Bydlisko: Svidnik |
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!!!!!!!!
|
|
Registrovaný: 10.11.11 Prihlásený: 26.06.15 Príspevky: 14 Témy: 4 | 4 |
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
|
|
Registrovaný: 05.08.13 Prihlásený: 13.02.16 Príspevky: 24 Témy: 6 | 6 Bydlisko: Svidnik |
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
|
|
Registrovaný: 10.11.11 Prihlásený: 26.06.15 Príspevky: 14 Témy: 4 | 4 |
NO okej takze si to teda zapametam 0 opusta, 1 zostava v cykle dakujem
|
|
Registrovaný: 05.08.13 Prihlásený: 13.02.16 Príspevky: 24 Témy: 6 | 6 Bydlisko: Svidnik | |
Registrovaný: 22.08.11 Prihlásený: 14.12.23 Príspevky: 2361 Témy: 11 | 11 |
Len tak pre zaujimavost, v akom jazyku je to naopak? A btw koniec suboru mozes kontrolovat aj s getc rovno
|
|
Registrovaný: 10.11.11 Prihlásený: 26.06.15 Príspevky: 14 Témy: 4 | 4 |
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?
|
|
Registrovaný: 22.08.11 Prihlásený: 14.12.23 Príspevky: 2361 Témy: 11 | 11 | |
Registrovaný: 10.11.11 Prihlásený: 26.06.15 Príspevky: 14 Témy: 4 | 4 |
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++; }
|
|
Registrovaný: 22.08.11 Prihlásený: 14.12.23 Príspevky: 2361 Témy: 11 | 11 | |
Registrovaný: 10.11.11 Prihlásený: 26.06.15 Príspevky: 14 Témy: 4 | 4 | |
Registrovaný: 22.08.11 Prihlásený: 14.12.23 Príspevky: 2361 Témy: 11 | 11 |
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.
|
|
Registrovaný: 05.08.13 Prihlásený: 13.02.16 Príspevky: 24 Témy: 6 | 6 Bydlisko: Svidnik |
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++; }
|
|
Registrovaný: 10.11.11 Prihlásený: 26.06.15 Príspevky: 14 Témy: 4 | 4 |
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:24Kó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
|
|
Registrovaný: 22.08.11 Prihlásený: 14.12.23 Príspevky: 2361 Témy: 11 | 11 |
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.
|
|
Registrovaný: 10.11.11 Prihlásený: 26.06.15 Príspevky: 14 Témy: 4 | 4 |
No osetrim to volako alebo tam necham fakt to feof
|
|
Registrovaný: 22.08.11 Prihlásený: 14.12.23 Príspevky: 2361 Témy: 11 | 11 |
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.
|
|
Registrovaný: 05.08.13 Prihlásený: 13.02.16 Príspevky: 24 Témy: 6 | 6 Bydlisko: Svidnik |
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);
|
|
Registrovaný: 10.11.11 Prihlásený: 26.06.15 Príspevky: 14 Témy: 4 | 4 |
zasa ked pouzijem EOF v binarnom subore mozes skoncit citanie skorej ked sa nieco bude rovnat 255
|
|
Registrovaný: 05.08.13 Prihlásený: 13.02.16 Príspevky: 24 Témy: 6 | 6 Bydlisko: Svidnik |
sorry toto je blbost 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);
|
|
Registrovaný: 22.08.11 Prihlásený: 14.12.23 Príspevky: 2361 Témy: 11 | 11 |
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.
|
|
Stránka: 1 z 1
| [ Príspevkov: 24 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v Assembler, C, C++, Pascal, Java | 2 | 375 | 30.05.2012 11:17 ewil | | v Ostatné programy | 0 | 556 | 15.02.2011 16:22 kyjak | | v Delphi, Visual Basic | 2 | 946 | 10.06.2014 21:26 bartimeus | | v Delphi, Visual Basic | 2 | 3477 | 11.01.2006 13:47 zeman | | v Ostatné programy | 4 | 1075 | 24.01.2012 15:13 kati123 | | v Delphi, Visual Basic | 3 | 770 | 21.05.2009 11:19 Patkoo | | v Ostatné | 2 | 414 | 13.06.2018 17:14 void | | v JavaScript, VBScript, Ajax | 8 | 639 | 04.09.2011 9:49 camo | | v Assembler, C, C++, Pascal, Java | 3 | 626 | 02.04.2010 13:24 vama | | v Assembler, C, C++, Pascal, Java | 10 | 875 | 26.11.2011 13:57 Fico | | v PHP, ASP | 8 | 571 | 20.11.2010 16:13 venom2 | | v Assembler, C, C++, Pascal, Java | 2 | 649 | 25.08.2017 8:20 mitko | | v Assembler, C, C++, Pascal, Java | 2 | 883 | 01.01.2010 16:58 jarrro | | v Ostatné programy | 1 | 1080 | 28.07.2009 17:10 PaloPa | | v PHP, ASP | 5 | 411 | 08.10.2010 17:37 shaggy | | v Ostatné | 3 | 761 | 17.05.2018 16:11 Winnetou |
|