- iPhone topik
- Vodafone mobilszolgáltatások
- Telekom mobilszolgáltatások
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Eleglide C1 - a középérték
- Milyen okostelefont vegyek?
- Android szakmai topik
- DIGI Mobil
- Android alkalmazások - szoftver kibeszélő topik
- Xiaomi 13T és 13T Pro - nincs tétlenkedés
Hirdetés
-
Az NVIDIA szerint a partnereik prémium AI PC-ket kínálnak
ph Megkezdődött az NPU-k elleni hadjárat, de egy fontos részletet nem említ a cég.
-
VR játék lesz az Batman: Arkham Shadow (Meta Quest 3)
gp Egyelőre csak egy teaser trailert kaptunk a teljes leleplezésre a Summer Game Festen kerül sor.
-
Eleglide C1 - a középérték
ma Szintet lépett az Eleglide, az egyébként egész korrekt M2 után a C1 sokkal komfortosabb közlekedésre alkalmas.
Új hozzászólás Aktív témák
-
félisten
Hali!
Ezt javasolnám: [codeblocks-8.02mingw-setup.exe]
Free C/C++ IDE fejlesztőkörnyezet, ebben az installerben bent van a Compiler illetve linker, automatikusan telepedik, nem kell semmit állítani.
Ha csak HTML és CSS, ahogy írtad, ahhoz nem kell C programozási ismeret, azonban a PHP, JavaScript, Flash ActionScript stb nyelvek esetén nagy előny.Fire.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
PazsitZ
addikt
fordítók az első hsz-ben a Fordítóprogramok, fejlesztőkörnyezetek: után
Weboldalakhoz, főként ha pusztán HTML általi, statikus tartalmú oldalakat akarsz akkor egyáltalán nem szükséges programozási nyelv ismerete.
Ha pl. PHP alapú dinamikus oldalakat szeretnél gyártani, ahhoz már kell programozói tudás.- http://pazsitz.hu -
-
kékfej
csendes tag
nagyon köszi! majd próbálkozok!
mert igazából nekem inkább grafikai ismereteim vannak..ehhez sztnék vmilyen alkalmazott inf tudást..h pl az általam kitalált weboldalt megtudjam valósítani..
v szerintetek magasabb szinten ez inkább 2 külön ember feladata??
köszi! -
cellpeti
veterán
Sziasztok!
Nekem van egy feladatom:
a program árucikkek kódjait kezelik. kérje be a felhasználótól az árucikk azonozító kódját, az azonosító kód csak akkor érvényes ha megfelel a következő követelményeknek:
- pontosan 6 számjegy karakterből áll
- ha az első 5 számjegy összegét 6-tal elosztva a maradék megegyezik a 6. számjeggyel
egy érvényes azonosító 123453
ha az azonosító nem érvényes ezt hibaüzenettel jelezze!
a kódok bevitelét és ellenőrzését addig ismétleje amíg az árucikk kódja helyett üres karakterlánc nem érkezik.a progit sejtem,hogy kell elkezdeni:
*******************************************************
#include<stdlib.h>
#include<conio.h>int getline(char s[],int lim) {
int i,c;for (i=0;i<lim && (c=getchar())!=EOF && c!='\n';++i) s[i]=c;
s[i]='\0';
while (c!=EOF && c!='\n') c=getchar();
return i;
}void main(void){
int kod[6];
int a;
getline(kod,6);}
*******************************************************
Azt nem vágopm,hogy a tömb 5 első elemét,hogy adom össze?
Össze kell adni az első 5 bekért karaktert,majd egy tömbbe le kell tárolni őket?
Bocs,hogy hosszúra sikerült a dolog!:S[ Szerkesztve ]
Tigris, tigris, csóvafény...
-
cellpeti
veterán
int osszeg=0;
for (i=0; i<5; i++)
osszeg+=kod[i]-'0';
if (osszeg%6 != kod[5]-'0')
printf("nem jo\n");
else
printf("jo\n");Ha jól értrem akkor a for ciklus végignézi a láncot 5ig,ugye?
De hogy adja össze?osszeg+=kod[i]-'0';
if (osszeg%6 != kod[5]-'0')Mik ezek a '0'-k benne,azok mi célt szolgálnak?
[ Szerkesztve ]
Tigris, tigris, csóvafény...
-
Jester01
veterán
válasz cellpeti #656 üzenetére
Azok azért vannak, hogy megkapd a számjegyek értékét. A 0 ascii kódja (ahogy a stringben van) ugyanis 48 (másnéven '0'). Szerencsére innen sorban jön a többi 9 számjegy, tehát sima kivonással meg lehet kapni a számértéket.
Egyébként a string hosszának ellenőrzése még nincs meg.
Jester
-
Jester01
veterán
válasz cellpeti #658 üzenetére
Igen, a bekért számjegyek tömbjén megy végig, összedva őket. Azért nem <= kell mert a tömbök indexelése 0-val kezdődik. Tehát az első 5 számjegy a 0,1,2,3,4 indexeken van.
A string hosszát valóban az strlen adja meg, de mivel a te beolvasó függvényed eleve nem ad vissza csak 6 karaktert, ezért ezzel azt nem tudod kiszűrni ha többet írnak be. Ehhez a beolvasásnál kellene ellenőrizni, hogy pontosan 6 karaktert írtak-e be.
MOD: sőt, mivel egy lezáró 0 byteot is tesz, rögtön túl is címzi a 6 elemű tömböt. Uppsz.[ Szerkesztve ]
Jester
-
cellpeti
veterán
válasz Jester01 #661 üzenetére
És akkor,ha megadok egy feltételt,hogy max ennyi meg ennyi karaktert lehessen bekérni,akkor se jó az strlen? AZ strlen tesz egy lezáró 0-t?
Akkor az elején 6 elemű tömb kell,mert ugye a 6. a program generálja,vagy elég az 5 karakterű tömb is?Tigris, tigris, csóvafény...
-
Jester01
veterán
válasz cellpeti #664 üzenetére
Pl. kiveszed a 0 lezárást a getline függvényből, mert úgysem kell. Ugyanakkor az i növelését beleteszed a while ciklusba is. Így tehát a függvény legfeljebb 6 karaktert ír a tömbbe (ezzel a túlcsordulás megoldva) és a visszatérési érték alapján pedig a main-ben ellenőrizheted a hosszt (nem kell strlen).
Jester
-
Benmartin
senior tag
válasz cellpeti #667 üzenetére
valami ilyesmi:
#include <stdio.h>
int getline()
{
int sum = 0, i = 0, c, hatodik;
while((c = getchar()) && isalnum(c))
{
sum += c - '0';
hatodik = c - '0';
i++;
}
sum -= hatodik;
if(i != 6 || sum % 6 != hatodik) return 0;
return 1;
}
int main()
{
if(getline())
{
puts("Helyes!");
} else puts("Hibas");
getchar();
return 0;
}[ Szerkesztve ]
-
wiggen123
aktív tag
válasz cellpeti #672 üzenetére
az isalnum a ctype.h ansi c könyvtárban van, ez része minden c implementációnak, szóval nyugodtan használhatod. Itt egy jó referencia: [link]
A feladatodhoz az én verzióm: beolvasni használd a gets() függvényt, az char*-ot ad vissza. menj végig a karaktertömbön amíg össze kell adni őket, vedd ki őket egy 2 hosszú sztringbe, 0. karakter a számjegy 2. a \0, használd az atoi konverziós függvényt hogy számmá alakítsd, így már össze tudod adni őket. A ciklusból kilépve az utolsó számjegyet ugyanígy számmá alakíthatod és ellenőrizheted.
ZH-n érdemes megkérdezni, hogy feltételezheted e, hogy helyesek az input adatok. Tipikusan nem arra kíváncsiak még akkor, hogy ki tudod e szűrni az összes kivételes helyzetet, hanem, hogy az alapokkal tisztába vagy e.
Sometimes you win, sometimes you learn.
-
Steve-S
tag
válasz cellpeti #676 üzenetére
Hi! Itt az én verzióm, bár lehet nem a legtökéletesebb, nem vagyok valami nagy prof C-ből, de működik! Bár lehet már kicsit későn postolom. Azért remélem segítettem valamit.
#include <stdio.h>
int getline(char t[],int lim)
{
int i;
char c;
for(i=0; i<lim && (c=getchar())!=EOF && c!='\n'; i++)
t[i]=c;
return i;
}
main()
{
int s, i, osszeg, szamok;
char tomb[20];
printf("Adj meg egy 6 szamjegyu kodot: ");
while((s=getline(tomb,20))!=0)
{
osszeg=0;
szamok=0;
if(s>0 && s!=6)
{
printf("A kod nem 6 szambol all!\n");
printf("Adj meg egy 6 szamjegyu kodot: ");
continue;
}
if(s==6)
{
for(i=0; i<6; i++)
if(tomb[i]>='0' && tomb[i]<='9')
szamok++;
}
if(s==6 && szamok!=6)
{
printf("Nem jo a kod, csak szamokat tartalmazhat!\n");
printf("Adj meg egy 6 szamjegyu kodot: ");
continue;
}
if(szamok==6)
{
for(i=0; i<5; i++)
osszeg+=tomb[i]-'0';
}
if((osszeg%6)==(tomb[5]-'0'))
{
printf("Jo a kod!\n");
fflush(stdin);
printf("Adj meg egy 6 szamjegyu kodot: ");
}
else
{
printf("Nem jo a kod!\n");
fflush(stdin);
printf("Adj meg egy 6 szamjegyu kodot: ");
}
}
}Set The World On Fire!!!
-
cellpeti
veterán
Sziasztok!
Mi az a parancs,amivel újra tudom indítani a programot???
Tigris, tigris, csóvafény...
-
mmarta
senior tag
Sziasztok!
C-ben:
Sakkos feladatoknál felrakunk fehér bábukat és egy fekete pl bástyát, akkor hogyan adjuk meg, íratjuk ki, hogy melyik fehér bábut üti pl a bástya?
Uez van lóra és futóra is.
A táblát ki tudom rajzolni, a bábuk is szépen felkerülnek, de az ütési irányokat nem tudom megadni lóra, bástyára, futóra, s a tetejébe még írja is ki -legalább egyet-, hogy melyiknél mit üt.Köszönöm!
-
babyanigirl
csendes tag
Én fél éve tanulok progrmaozást és most kaptam egy olyan házit amit nem nagyon tudok megoldani, és hát szeretnék tőletek egy kis segítséget kérni abban hogy hogy is kezdjem el és hogy kellene megcsinálnom a feladatomat! Bármilyen ötletet, segítséget szívesen fogadok!
Feladat: Írjon programot ami meghatározza egy szöveges állományban szereplő betűk gyakoriságát! Az eredményt írja ki az OUT.txt nevű állományba!#include <stdio.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
FILE *fp=fopen("olvas.txt","r+" );
FILE *f=fopen("ir.txt", "w");
int szam;
char ch,kar;
printf("Az eredeti szoveg: ");
while (!feof(fp)){
ch=fgetc(fp);
printf("%c", ch);
}
printf("\nBetuszamolas vegrehajtasa: i=igen n=nem: ");
scanf("%c",&szam);
if (szam==105) {
fp=fopen("olvas.txt","r+" );
}
}
printf("\n") ;
system("pause");
fclose(fp);
fclose(f);
return 0;
sajnos csak eddig jutottam bekérem a szöveget kiíratom, de hogy utána az" if "után mit kéne írni azt nem tudom, mondjuk gondoltam vmi "sizeof" tömbös karakter számlálásra de vhogy az sem jött össze, mert nem tudtam tömbbe rakni. Látszik, sajnos nagyon amatőr vagyok benne.Előre is köszi minden segítséget!
BabyAniGirl -
Benmartin
senior tag
válasz babyanigirl #680 üzenetére
szia!
először is deklarálj egy darab tömböt, mondjuk úgy 100 elemet, de még annyi sem kell, ezután olvasd be soronként az inputot (fgets), mert így kevesebb a függvényhívás, majd iterálj végig a sor minden karakterén, vond le belőlük a nullás karaktert és növeld a darab tömb ezen indexét (darab[sor[i]-'0']++).
majd kiírásnál, ahol nem nulla a tömb értéke hozzáadod az indexhez a nullás karaktert és kiíratod a tömb értékét.
valahogy így.
-
Horgi
csendes tag
Sziasztok!
Segítséget szeretnék kérni. A feladatom a következő:
Írjon egy ellenőrző programot, e-mail címek helyességének vizsgálatáhozTipp:a string végigolvasása, majd a talált speciális karakterek ('@' '.') drabszámának feljegyzése. A jó email-címben pontosan egy '@' és legalább egy '.' karakter van.
További ellenőrzés: a '@' nem lehet az első karakter, a '@' előtt és után nem állhat '.', '@' és '.' -ból egymás után nem lehet egynél több.Szükséges libc függvények: printf()
A program a kapott paramétereket kizárólg a main függvény argc, argv[] változóin keresztül veheti át. Semmiféle getchar, scanf és egyéb felhasználói input nem elfogadható!
Előre is köszönöm a segítséget.
-
cellpeti
veterán
CS!
Mondja már el nekem valaki mit jelent ez pl:
if(!getline(szam1,30)) printf("Üres sort adtál be");
ha nem 0ad meg miért mégis üres sor lesz?
A getline 0-t ad vissza!
Akkor ha nem 0-at ad vissza getline(tehát nem üres sort) a szam1,30-re?
Mondom segg hülye vagyok hozzá és jövő kedden vizsgázokA do{ - }while();
magyarul:
csináld{
utasítás
}amíg(feltétel);
A while-ba ugyanazt a feltélet adom meg,mint az elején?
[ Szerkesztve ]
Tigris, tigris, csóvafény...
-
babyanigirl
csendes tag
#include <stdio.h>
#pragma hdrstop//---------------------------------------------------------------------------
#pragma argsused
int main( int argc, char* argv[] )
{
int i;
FILE* f;
FILE *fp;
int count[256];for(i=0; i<256; i++)
{
count[i] = 0;
}f = fopen("input.txt", "rt");
while(1)
{
int c = fgetc(f);
if( c==EOF )
break;
if( c<0 || c>255 ) {
printf("hiba: nem vart betu");
return 3;
}count[c] += 1;
}fclose(f);
printf("gyakorisagok:\n");
for(i=0; i<256; i++)
{
if( count[i] < 1 )
continue;printf("'%c': %d-szer\n", i, count[i]);
fp=fopen("output.txt", "a+");
fprintf(fp,"Gyakorisága az");
fprintf(fp,"%c betunek %d\n", i, count[i]);
fclose(fp);
}
system("pause");
return 0;
}Mit gondoltok ez így jó?
Nem lehetne vhogy egyszerűbben megcsinálni?
BabyAniGirl -
félisten
válasz babyanigirl #689 üzenetére
Hali!
Jó pár hozzáfűzni valóm lett volna, ezért inkább megírtam és a kommentekben elolvashatod.
Ha valami nem érthető, vagy más kérdésed is lenne, akkor nyugodtan írj, ahogy időm engedi válaszolok. (meg biztosan mások is)
Bocs de nem tudom berakni a kódot csak valami maszat lesz, még próbálkozom.
Fire.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
válasz babyanigirl #689 üzenetére
Hali!
Na csak meg lett. Olyan kód volt a forrásba, amit a PH is használ formázásra...
#include <stdio.h>
#include <stdlib.h>
//ha többször használod ugyanazt az értket, akkor azt célszerű így definiálni
//így megelőzhető az elgépelésekből adodó hibák
#define MAXCHAR 256
int CharCounter[MAXCHAR];
int main()
{
int i;
//a karakterek(így a betűk, számok, stb) egy byte-on tárolódnak az értékük 0-255 lehet
//ezért nem int típust, hanem unsigned char típust deklarálunk
unsigned char ch;
FILE * TextFileAsBinary;
FILE * OutputTextFile;
printf("Karakter-szamlalo\n\n");
//kinullázzuk a tömbünket. ez azonban jelen esetben teljesen felesleges
//mivel a fórdító automatikusan elvégzi ezt a feladatot. Természetesen ha
//többször kellene használni a tömböt, akkor szükséges lehet az "újranullázás"
for (i=0;i<MAXCHAR;CharCounter[i++]=0);
//minden fájl megnyitásakor kötelező a hibaellenőrzés!
if (!(TextFileAsBinary = fopen("input.txt","rb"))) {
fprintf(stderr,"Nem lehet megnyitni a fajlt...");
exit(-1);
}
//az fread függvény (jelen esetben) 1 darab, 1 byte hosszú adatot olvas be ch-be
//a korábban megnyitott "input.txt" fájlból
//a visszatérő értéke olvasás esetén mindig annyi, amennyit megadtunk neki
//jelen esetben 1. Ha nem ennyivel tér vissza, az azt jelenti, hogy a fájl végére értünk
//vagy valamilyen fájlolvasási hiba lépett fel
while (fread(&ch,1,1,TextFileAsBinary)==1) CharCounter[ch]++;
fclose(TextFileAsBinary);
//kimeneti fájl megnyitása, mindig kérdés nélkül felülírodik!
if (!(OutputTextFile = fopen("output.txt","wt"))) {
fprintf(stderr,"Nem lehet irni a fajlt...");
exit(-1);
}
//itt azért 16-ról indítom a ciklust, mert ez alatt többnyire karakteres vezérlőkódok
//találhatók(return, tab, sipolás, visszatörlés stb), amikor ezeket beleírnád a fájlba
//akkor furcsán mutatna
for (i=16;i<MAXCHAR;i++) {
//csak akkor írok fájlba, ha előfordult az 'i' karakter, ha nem akkor felesleges
if (CharCounter[i]) {
fprintf(OutputTextFile,"Gyakorisága a(z) %c karakternek: %d\n",i,CharCounter[i]);
}
}
fclose(OutputTextFile);
return 0;
}Fire.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
kiskatus
csendes tag
Sziasztok!
Kaptam egy házi feladatot programozásból. Hétfőre kellene a feladat és nem megy a megoldása. Tudnátok segíteni? Mert ha nem lesz meg, megbuktatnak. Előre is köszönöm!
A feladat: Adott két szöveges fájl (angol szöveg). Hasonlítsa össze a tartalmukat. A különbséget írja ki egy harmadik fájlba.
Üdv.: kiskatus -
félisten
válasz kiskatus #692 üzenetére
Hali!
Azt írtad, hogy Angol szöveg. Ezt azt jelenti, hogy soronként kell összehasonlítanod?
Tehát pl mindkét fájlban email címek vannak.1.fájl
a@b.cc
b@c.dd
c@d.ee2.fájl
a@b.cc
b@c.XX
c@d.ee3.fájl(kimeneti fájl)
különbség -> b@c.dd <> b@c.XXvagy esetleg byte-onként(binary compare)? Ez esetben teljesen mindegy milyen fájlról van szó, lényegtelen hogy szöveg, kép, hang stb.
Fire.
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
kiskatus
csendes tag
válasz Fire/SOUL/CD #693 üzenetére
Szia!
Én is kérdeztem a Tanár Urat, hogy mire gondol és ezt írta e-mailban, hogy: Karakterenként olvassa be a fájlok tartalmát, majd a beolvasott karaktereket hasonlítsa össze! Ha különböznek, akkor írja ki őket egy harmadik fájlba! -
cellpeti
veterán
Fire te kész vagy!
[ Szerkesztve ]
Tigris, tigris, csóvafény...
-
félisten
válasz kiskatus #694 üzenetére
Hali!
Köszi a választ, na így egyértelmű, mivel KARAKTERENKÉNT kell összehasonlítani, azaz bináris összehasonlítást kell írni.
Délutánra meglesz.
Fire.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
félisten
-
kiskatus
csendes tag
válasz Fire/SOUL/CD #696 üzenetére
Nagyon szépen köszönöm!!!
Annyit kérhetnék, hogy megjegyzésben nagyjából írd oda, hogy mit miért.
Hátha megértem úgy énis. Mégegyszer nagyon köszönöm! -
cellpeti
veterán
válasz Fire/SOUL/CD #697 üzenetére
Hát,mert mindent értesz,egyből írod pozitív értelemben értettem!
Tigris, tigris, csóvafény...
-
félisten
válasz kiskatus #698 üzenetére
Hali!
Na, elkészültem, az elején azonban pár szó...
Ezt úgy írtam ahogy kérted, tehát karakterenként olvas, azonban az ilyen jellegű progikat nem így írják. Ez a progi pár ezer byte-os fájlokon gyorsnak tűnhet, de ha pl 2 darab 50 megás fájl-t kellene összehasonlítania, akkor elidőzhet előtte az ember, a karakteres olvasásnak köszönhetően. A gyors FileComparer progikban dinamikusan lefoglalnak memóriából 2 nagyobb "darabot" a un bufferek számára. Ezekbe a bufferekbe olvassák be az adatokat a fájlokból(nem egyesével, hanem amekkora buffer, mondjuk 4mega) és a két buffert hasonlítják össze, ami nagyon gyors hisz a memóriában van.
Természetesen ezt csak plusz INFO-nak szántam.
Felkommenteztem, remélem érthető is lesz. Persze ha van kérdésed akkor írj nyugodtan.Fire.
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned long ErrorCounter;
unsigned char chFirst, chSecond;
FILE * FirstFileAsBinary;
FILE * SecondFileAsBinary;
FILE * ErrorFileAsText;
printf("Binaris osszehasonlitas\n\n");
//első fájl megnyitása binárisan
//minden fájl megnyitásakor kötelező a hibaellenőrzés!
if (!(FirstFileAsBinary = fopen("first.txt","rb"))) {
//nem sikerült megnyitni az első fájlt, ezért hibakiírás, kilépés
fprintf(stderr,"Nem lehet megnyitni a 'first.txt' fajlt...");
exit(-1);
}
//második fájl megnyitása binárisan
//minden fájl megnyitásakor kötelező a hibaellenőrzés!
if (!(SecondFileAsBinary = fopen("second.txt","rb"))) {
fprintf(stderr,"Nem lehet megnyitni a 'second.txt' fajlt...");
//nem sikerült megnyitni a második fájlt, ezért hibakiírás, kilépés
//de elötte a korábban sikeresen megnyitott első fájlt le kell zárni
fclose(FirstFileAsBinary);
exit(-1);
}
//a fseek a fájlban pozicionál, meg kell adni
//hogy melyik fájlban, egy relatív távolságot, és hogy honnan
//alábbi esetben a FirstFileAsBinary fájlban, a végétől(SEEK_END), 0 bytera
//azaz magyarul a fájl végére pozícionálunk, amit azért teszünk, hogy a továbbiakban
//az ftell függvénnyel(ami az épp aktuális fájlpoziciót adja vissza) meg tudjuk
//határozni a fájl hosszát
fseek(FirstFileAsBinary,0,SEEK_END);
fseek(SecondFileAsBinary,0,SEEK_END);
//megnézzük, hogy a két fájl mérete azonos-e, mivel ha nem
//akkor nincs értelme összehasonlítani őket
if (ftell(FirstFileAsBinary)!=ftell(SecondFileAsBinary)) {
printf("A két fájl mérete nem azonos...");
//nem azonos méretű a két fájl, ezért hibakiírás, kilépés
//de elötte a korábban sikeresen megnyitott első és második fájlt le kell zárni
fclose(FirstFileAsBinary);
fclose(SecondFileAsBinary);
exit(-1);
}
//itt azt ellenőrizzük, hogy ne legyen 0 byte hosszú a fájl, hisz akkor megint csak
//nincs értelme az összehasonlításnak
//azért csak az egyik fájlt ellenőrzöm, mert az előzőekben már kiderült, hogy
//a két fájl egyenlő méretű, és ha az első fájl netalántán 0 byte hosszú
//akkor a második is
if (!ftell(FirstFileAsBinary)) {
printf("A fajlok merete nem lehet 0 byte...");
//0 byte méretű mindkét fájl, ezért hibakiírás, kilépés
//de elötte a korábban sikeresen megnyitott első és második fájlt le kell zárni
fclose(FirstFileAsBinary);
fclose(SecondFileAsBinary);
exit(-1);
}
//most a fájlpoziciót visszaállítom a fájl elejére, azaz 0 byte-ra a fájl elejétől(SEEK_SET)
//azért kell megtenni, mert korábban a fájl végére pozicionáltam
fseek(FirstFileAsBinary,0,SEEK_SET);
fseek(SecondFileAsBinary,0,SEEK_SET);
//létrehozom azt a fájlt szövegesként, amibe az esetleges eltéréseket letároljuk
if (!(ErrorFileAsText = fopen("error.txt","wt"))) {
fprintf(stderr,"Nem lehet megnyitni az 'error.txt' fajlt...");
//nem sikerült létrehozni a fájlt, ezért hibakiírás, kilépés
//de elötte a korábban sikeresen megnyitott első és második fájlt le kell zárni
fclose(FirstFileAsBinary);
fclose(SecondFileAsBinary);
exit(-1);
}
//hibaszámláló nullázása, a későbbiekben használom
ErrorCounter=0;
//az fread függvény (jelen esetben) 1 darab, 1 byte hosszú adatot olvas be
//jelen esetben a chFirst, chSecond változóba, az első ill második fájlból
//a visszatérő értéke olvasás esetén mindig annyi, amennyit megadtunk neki
//jelen esetben 1. Ha nem ennyivel tér vissza, az azt jelenti, hogy a fájl végére értünk
//vagy valamilyen fájlolvasási hiba lépett fel
while (fread(&chFirst,1,1,FirstFileAsBinary)==1) {
fread(&chSecond,1,1,SecondFileAsBinary);
//összehasonlítjuk a két byte-ot
if (chFirst!=chSecond) {
//ha nem egyenlő, akkor kiírjuk az error.txt fájlba, méghozzá a következő módon
//filepozició,chFirst,chSecond
//a filepoziciót 0x-el kezdődő 8 számjegyes hexadecimális számként
//a chFisrt, chSecond pedig 0x-el kezdődő 2 számjegyes hexadecimális számként
fprintf(ErrorFileAsText,"File-pozicio: %#.8lx %#.2x <> %#.2x\n",ftell(FirstFileAsBinary),chFirst,chSecond);
//hibaszámláló növelése
ErrorCounter++;
}
}
//ha a hibaszámláló nem 0, akkor kiírjuk hány eltérés van a két fájl közt
if (ErrorCounter) printf("%lu elteres talalhato a ket fajl kozt.\nNezze meg az 'error.txt' fajl tartalmat...",ErrorCounter);
//ha a hibaszámláló 0, akkor nincs különbség a két fájl tartalma közt
else printf("A ket fajl azonos...");
//mindhárom korábban sikeresen megnyitott fájl lezárása
fclose(FirstFileAsBinary);
fclose(SecondFileAsBinary);
fclose(ErrorFileAsText);
//várakozás ENTER-re
printf("\n\nUsson ENTER-t a kilepeshez...");
getchar();
return 0;
}Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Milyen TV-t vegyek?
- Gördeszka topic
- Az NVIDIA szerint a partnereik prémium AI PC-ket kínálnak
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Xbox Series X|S
- Anglia - élmények, tapasztalatok
- Konzolokról KULTURÁLT módon
- BestBuy ruhás topik
- Milyen billentyűzetet vegyek?
- 3D nyomtatás
- További aktív témák...