- HBO Max & OD topic
- Otthoni hálózat és internet megosztás
- Windows 11
- Microsoft Excel topic
- Microsoft Office és Office 365 topic
- Vodafone otthoni szolgáltatások (TV, internet, telefon)
- A pápa egyre jobban tart a romlott AI veszélyeitől
- Crypto Trade
- Súlyos adatvédelmi botrányba kerülhet a ChatGPT az EU-ban
- Proxmox VE
Új hozzászólás Aktív témák
-
félisten
Hali!
Hát ime az összehasonlítás. Mindegyik fejlesztőkörnyezetben CONSOLE APPLICATION PROJECT van létrehozva
Dev c++ C PROJECT
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
printf("Hello Daneeka!\n");
printf("Press ANY KEY to continue...");
getchar();
return 0;
}Visual Studio C# 2008
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello Daneeka!");
}
}
}Dev C++ C++ PROJECT
#include <iostream>
using namespace std;
int main (int argc, char *argv[])
{
cout << "Hello Daneeka!" << endl;
cout << "Press ANY KEY to continue..." << endl;
cin.get();
return 0;
}Visual Studio C++ 2008
// Fire.cpp : main project file.
#include "stdafx.h"
using namespace System;
int main(array<System::String ^> ^args)
{
Console::WriteLine("Hello Daneeka!");
return 0;
}Szerintem is maradjunk a Dev c++-nál, aztán majd segítünk átalakítani Visual Studios-ra.
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
Hali!
Igen, azért tettem bele a négy kódot, hogy lásd mekkora a különbség.(azért a VS-ben "writeline" , miért nem írtak akkor egy pascal editort is )
Na mindegy, döntsd el miben akarsz dolgozni, aztán ha tudunk segítünk.
(lehetőleg C legyen, mivel ez C topic)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
Hali!
Biztos igazad van. Sajna nem ismerem(nem használom) ezeket a fejlesztőkörnyezeteket.
Azért bátorkodtam ezen kódokat berakni, mert Daneeka korábban arról "panaszkodott", hogy nem tudja befordítani a project-jét, ezeket meg belehet. Tehát lássa, hogy így kellene kinézni a forrásnak.
Amúgy Borland Delphi 7, Codegear Builder ill Assembler-ben írogatok, amikor ilyen melót kapok.(Rendszerprogramozó szakon végeztem 12 éve)A Dev c++ ill VS2008 csak azért raktam fel, mert mostanában sok pl diplomamunkát hoznak hozzám átnézésre vagy javításra, amit ezekben a környezetekben írnak.
(VS esetén lehet mint újra tanulni, de sebaj szeretem a kihívásokat )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
Hali!
Bevallom a a VS C++ részével nem is foglalkoztam, engem a VS C# project érdekelt, mivel ez C topic. Megtisztelnél vele rendszerprogramozó kolléga(amúgy tényleg az vagy?), ha leírnád, hogyan kell Visual C# 2008-ban Console Application-t létrehozni, amiben a PRINTF használható, nem a WRITELINE.
Fire.
UI: utánanéztem amit írtál, ha Win32 Console App van létrehozva akkor "megy" a műsor, mármint VS c++-ban.
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
Hali!
Sajna erre nem kaptam választ:
"hogyan kell Visual C# 2008-ban Console Application-t létrehozni, amiben a PRINTF használható, nem a WRITELINE."
igen, az a gáz hogy ez is ebből "él"
"A project for creating a command-line application (.NET Framework 3.5)"
Így hozza létre a Console Application-t.
Erre van valami ötleted?Fire.
UI: Amúgy szakmádban(okleveles programozó) dolgozol, esetleg szabadúszó vagy?
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
Hali!
Köszönöm a felvilágosítást, most már tiszta, hogy VS C#-ben kizárólag .NET Framework.
(Azt hittem, hogy sima ANSI C nyelvet is lehet használni benne )
Akkor marad, hogy VS C++-ban írunk ANSI C progit, "nekem a 9 is páros..."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)
-
félisten
válasz !wannabe #469 üzenetére
Hali!
Én magam(már nem tudom pontosan mikor,de a 80-as évek közepe vége felé) C64-en kezdtem el programozni, assembly-ben. Volt egy kis csapat, amiben én a 1541-II-drive-ért voltam felelős, tehát lemezes műveletek. Akkor írtam az első 4 másodperces formattert, a 10 másodperces validator, a 14-szeres irq loadert(miközben szól a zene, tölt a drive) stb.
Az egyik csapattag megvette első PC-jét(486dx4-100, 4 mega ram, 2x sony cd olvasó, s3 1megás vga, tomato alaplapmeg talán seagate vinyó), tudtam nekem is kell PC. Természetesen Assembly egyből, alig vártuk hogy a gamestar meg chip meg egyéb újságok lemezmellékleteit megnézhessük, mert nagyon sok hasznos uty ill doksi volt rajtuk.
Borland assemblerrel kezdtem, aztán borland pascal, borland c/c++, borland delphi, borland builder.....és jelenleg is borland(ill. mostmár Codegear) cuccokkal dolgozom.Persze, én is assemblyben meg más nyelven is úgy kezdtem, hogy "töröljük le a képernyőt, írjuk ki hogy Helló!". Akkoriban a net nem volt elterjedt, hogy úgy mondjam csak a "kiváltságosok" rendelkeztek vele, elsősorban anyagi ill technikai feltételek miatt. Így lemezmellékletekről meg szakirodalomból tanultunk magunktól. Ha minden könyvet eladnék, ami most a szekrényen van, egy igen jó konfigot tudnék venni..., de nem adom.
Sajnos a középiskolában szinte megutáltatták a informatikát ill matekot(ami abban merült ki, hogy valami videoton gépen egymás alá meg mellé kiirattuk 1-10-ig a számokat ).
Sajnos azt látom, hogy jelengleg is ez a legnagyobb probléma, hiába van tehetsége, szorgalma, kitartása a számítástechnika(ezen belül programozás) iránt, a középiskolákban elveszik az ember kedvét tőle. Rossz tananyag, rosszul leadott jó tananyag, diákok érdektelensége....és még sorolhatnám.Neked anyyit javasolnék és minden kezdőnek, hogy a nyelv alapjait kell első körben tökéletesen elsajátítani, megérteni. Aztán ahhoz a nyelvhez kiválasztani a megfelelő fejlesztőkörnyezetet, amikor ez megvan, kitartani a Cég mellett, mert akár mennyire is szabvány pl a C++, de az jól látszik, hogy mennyire eltérnek a fejlesztőkörnyezetek egymástól. Itt a net, tessék használni, mindent meg lehet rajt találni. Aztán meg tessék kérdezni PH-en!(nekünk anno 30km-en belül nem volt senki, akit megkérdezhettünk volna ) Nem érdekes, ha értelmetlen dolgot kérdezel, akkor megmondják hogy ez értelmetlen, ezért meg ezért meg ezért, és így meg így kellene megoldani.
Én is sok mindent megkérdezek és mindig kapok rá választ, sok mindent tanulok itt, noha elég rég óta üzöm az "ipart". Ebben a szakmában, minden nap jönnek ki újdonságok, fizikai képtelenség, hogy mindenhez értsen az ember.Van jó és van rossz tutorial. Én azokat létesítem előnyben, ahol képpel illusztrált, lépésről-lépésre magyarázó, forráskóddal fűszerezett(amit beillesztesz aztán műxik) stb dolgok találhatóak. Az egyik ilyen kedvenc oldalam ez: [www.functionx.com/]
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)
-
félisten
válasz !wannabe #471 üzenetére
Hali!
Úgy van ahogy a kolléga is mondja, azaz <= helyett <, vagy a a for ciklusban a sor és oszlop változót 1-ről indítsd.
Ezt a sort meg javítsd printf( "+%n" );
Nyíilván ezt akartad írni printf( "+\n" );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 !wannabe #474 üzenetére
Nos, egy sakktábla 8x8-as, gondolom ez nem ujdonság, tehát kell egy plusz sor az oszlop azonosítóknak (A-H) ill egy plusz oszlop a sor azonosítóknak(1-8).
Viszont a oszlopnevek meg sorszámok (ha már nagyon szakszerűen akarsz eljárni), nem hasraütésre megy. Ha leraksz magad elé egy táblát, akkor a feléd eső oldalon a bal kezednél van az A1, ami fekete.(esetleg ha ki is akarod szinezni).
Ha akarod tömbözhetsz is, de felesleges(ha csak nincs a tarsojodba valami más terv is a táblával kapcsolatban), simán minden sornál 8-től lefelé ill minden oszlopnál A-H ig kiírod pluszba.Fire.
Közbe beugrott a kód, megnézem
[ 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 !wannabe #475 üzenetére
Alapvetően a kód jó, csak módosítani kell hogy tényleg "szabványos" sakktábla legyen.
Ilyen legyen: [link]Fire.
UI: remélem nem cseszegetésnek veszed, de legyünk precízek
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
-
félisten
válasz !wannabe #480 üzenetére
Rendben, csak azért kérdeztem, mert én teljesen megszokásból, használok cikluson belül deklarációt. PL: for(int i=1;i<=10;i++); Na ezt alapban a Dev c++ nem szereti, mert nem a régi c89 módot használja, hanem a c99-et. Ilenykor ezt a hibát dobja:
for loop initial declaration used outside C99 modeA "hiba" megszüntethető, ha a compiler parancssorához hozzáadod a -std=c99 utasítást vagy kapcsolót, ahogy tetszik.
A CodeBlocks nem tudom, hogy foglalkozik-e vele, próbáld ki...
Fire.
UI: Amúgy VS c++-ban írok C-t(most ismerkedem a környezettel), de a Dev c++ is fent van.
[ 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 rothkrisz #482 üzenetére
Hali!
A progi CodeBlocksban íródott. Bár írtad, hogy most kezdtél C-ben írni, de ennak ellenére úgy írtam, hogy legyen bent valami "újdonság" is, ami hasznos. Nézd át, ha valami nem tiszta írj.
Fire.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[255];
unsigned char ndx[10];
int i,j,maxndx;
for(i=0;i<sizeof(ndx);ndx[i]=0, i++);
printf("Enter numbers (0-9): ");
gets(str);
for (i=0;i<strlen(str);i++) {
if (str[i]<'0' || str[i]>'9') {
printf("Illegal char found, skipped.. -> %c\n",str[i]);
continue;
};
ndx[str[i] & 0x0f]++;
}
//Horizontal
for(i=0;i<sizeof(ndx);i++) {
printf("\n%c ",i+'0');
for (j=ndx[i];j>0;j--) { printf("*"); }
}
printf("\n\n\n");
//Vertical
for(i=0, maxndx=0;i<sizeof(ndx);i++) {
maxndx=ndx[i]>=maxndx ? ndx[i] : maxndx;
}
for(;maxndx>0;maxndx--) {
for(i=0;i<sizeof(ndx);i++) {
ndx[i]<maxndx ? printf(" ") : printf("*");
}
printf("\n");
}
for(i=0;i<sizeof(ndx);printf("%c",'0'+i),i++);
printf("\n");
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)
-
félisten
válasz !wannabe #484 üzenetére
Hali!
Újra kellet pakolnom a vista-t, és még nem raktam fel a VS-t. (de lehet hogy nem is fogom, csak ha kell). Jó ez a CodeBlocks (Kösz mégegyszer, hogy javasoltad!)
Ez a példa, függölegesen, meg vizszintesen is kiírja a számokat ill kirajzolja a csillagokat......
(Horizontal/Vertical rész)
Valamit félreértettem?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 !wannabe #486 üzenetére
Hali!
Semmi gáz! Ismerős az érzés, Én is ha lefárasztom az agyam, 5-10 másodpercnek ell kell telnie, mire felismerem édesanyámat . Ha meg hirtelen kell felkelnem, akkor órákig "beszámíthatattlan" vagyok...
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)
-
félisten
válasz !wannabe #489 üzenetére
Hali!
Az ndx tömben van tárolva ugyebár, hogy melyik számjegy hányszor fordul elő.
Mivel én STRING-ként olvasom be, ezért a '0'-'9' számjegyek a karakterkódjukkal vannak jelen a STRING-be, vagyis hexa 0x30-0x39. Ebből kell 0-9 indexet csinálni.
pla '9' ascii kódja 0x39 binárisan 00111001, a 0x0f binárisan 00001111
00111001 AND 00001111 = 0000 1001 azaz 9.
( az AND ott lesz 1, ahol mindkét számban az azonos bitpozíción 1 van)
tehát ebben az esetben az ndx[str[i] & 0x0f]++ az ndx[9]++ lesz, azaz a tömb 9. indexén lévő elem értékét megnöveli egyel.Meg lehetett volna így is oldani ndx[str[i]-0x30]++ vagy ndx[str[i]-'0']++
Csak azért választottam az AND-es módszert, mert a logikai műveletek fontos része minden programozási nyelvnek(AND, OR, XOR, NOT stb)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
Hali!
Nincs baj azzal a strupr() függvénnyel, csak a bemenete (char*). Így használd:
#include <iostream>
using namespace std;
int main()
{
char str[]="Test text";
cout << strlwr((char*)str) << endl;
cout << strupr((char*)str) << endl;
return 0;
}Ebből gondolom nyílvánvaló, hogy mit kell módosítanod a kódodban.
Azonban ez valóban C programozás topic, van C++ topic is, oda tedd a C++ kérdéseket.
Ígérem ott is ránézek, és ha tudok segítek.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)
-
félisten
Hali!
Hát szomorú ha nem hallottál róla, a MATH.H-ban van. Egy lebegőpontos számot "oszt" két részre, egész ill törtrészre. (vagy egyszerűbben a tizedespont jobb oldalára ill bal oldalára)
persze abban egyetértek, hogy eldönteni egy számról, hogy páros vagy páratlan tök felesleges használni(de lehet)Fire.
UI: amargo kódja, már kerekítéssel is foglalkozik(0,5-től felfelé kerekítünk, egyébként meg lefeleé)
Annyi "kritika", ha valami NEM NAGYOBB EGYENLŐ MINT 0,5, akkor felesleges az ELSE után az összehasonlítás.... (Amargo kódjáról van szó)[ 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 rothkrisz #511 üzenetére
Hali!
Kellemes feladatokat kaptok, nekem is jó, mert "retrózhatok".
Nos, több megoldása is lehet a feladatnak, Én az alábbi módszert választottam, elsősorban mert x64 Vista alatt ne futnak a DOS-os c/cpp editorok, ebből adódóan a kurzorpozicíóval, assembly betéttel, megszakításokkal nem tudok mit kezdeni.(ugyanis úgy is meg lehetett volna oldani, hogy egyből megjelenik a tábla, és egyből megjelenik rajt a bevitt mezőn az "érme"....)Lesz bent egy teljesen kikommentezett rész, azt csak azért hagytam bent, hogy még egy mátrix definíciót is láss. Sajna ott viszont már "keményen" mútatókkal lehet volna csak operálni, és ha valaki nincs tisztában velük, akkor tényleg nem fog érteni belőle semmit....
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define CB_XY 17
/*
unsigned char ChessBoard_Matrix[][CB_XY]={
"╔","═","╦","═","╦","═","╦","═","╦","═","╦","═","╦","═","╦","═","╗",
"║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║",
"╠","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╣",
"║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║",
"╠","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╣",
"║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║",
"╠","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╣",
"║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║",
"╠","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╣",
"║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║",
"╠","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╣",
"║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║",
"╠","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╣",
"║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║",
"╠","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╣",
"║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║",
"╚","═","╩","═","╩","═","╩","═","╩","═","╩","═","╩","═","╩","═","╝"
};
*/
int ChessBoard_Matrix[CB_XY][CB_XY]={
{0xC9,0xCD,0xCB,0xCD,0xCB,0xCD,0xCB,0xCD,0xCB,0xCD,0xCB,0xCD,0xCB,0xCD,0xCB,0xCD,0xBB},
{0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA},
{0xCC,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xB9},
{0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA},
{0xCC,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xB9},
{0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA},
{0xCC,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xB9},
{0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA},
{0xCC,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xB9},
{0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA},
{0xCC,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xB9},
{0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA},
{0xCC,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xB9},
{0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA},
{0xCC,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xB9},
{0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA},
{0xC8,0xCD,0xCA,0xCD,0xCA,0xCD,0xCA,0xCD,0xCA,0xCD,0xCA,0xCD,0xCA,0xCD,0xCA,0xCD,0xBC}
};
int main()
{
int i,j,k;
char str[256];
while(0==0) {
printf("Enter coordinate and value: ");
strupr(gets(str));
if (str[0]=='*') { printf("\nGenerating Chessboard\n\n"); break; }
if (!strlen(str) || strlen(str)>3) { printf("Bad SIZE found [%s=>%d], skipped...\n",str,strlen(str)); continue; }
if (str[0]<'A' || str[0]>'H') { printf("Bad COLUMN found [%c], skipped...\n",str[0]); continue; }
if (str[1]<'1' || str[1]>'8') { printf("Bad ROW found [%c], skipped...\n",str[1]); continue; }
if (str[2]!='1' && str[2]!='2' && str[2]!='5') { printf("Bad VALUE found [%c], skipped...\n",str[2]); continue; }
ChessBoard_Matrix[('8'-str[1])*2+1][(str[0]-'A')*2+1]=str[2];
}
for(i=0,k=8;i<CB_XY;i++) {
if ((i % 2)) printf("%d ",k--);
else printf(" ");
for(j=0;j<CB_XY;j++)
printf("%c",ChessBoard_Matrix[i][j]);
printf("\n");
}
for(printf(" "),i=0;i<8;printf("%c ",'A'+i),i++);
printf("\n\n");
return 0;
}Fire.
UI: remélem jól értelmeztem a feladatot...
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 rothkrisz #511 üzenetére
Hali!
Elnézésedet kérem, de voltam olyan ügyes, hogy nem olvastam el a privát üzeneted.
Majd ránézek ígérem, mert az általam kreált kód, "enyhén szólva" nem hasonlít a forrásodra a privátban.Mégegyszer, bocsi!
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)
-
félisten
válasz Fire/SOUL/CD #513 üzenetére
Hali!
Küldtem privbe.
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)
-
félisten
Hali!
Még az a páros-páratlan dolog érdekel? Esetleg a "teljes" forrás érdekel?
Írd le mégegyszer légyszives(vagy link), ha tudok segítek...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)
-
félisten
válasz speedtouch #518 üzenetére
Hali!
Sajna VS-ben nem dolgozom, de ha egy példával illusztrálnád, hogy VS-ben mi is az a LDC formátum, az sokat segítene...
pl: 1234567 a szám és ebből lesz 1980.01.01 vagy valami
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 speedtouch #520 üzenetére
Hali!
Így már más, LCD nem LDC, így érthető....NET-be sajna nem tudok segíteni(ezért most nem pakolom fel a VS-t), de ha sima C megfelel, akkor oké.
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)
-
félisten
válasz speedtouch #522 üzenetére
Hali!
A kód Code::blocks-ban íródott, sima Ansi C. Ha valami nem érthető esetleg, akkor írj nyugodtan.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define CS_Y 38
#define CS_X 5
int LCD_Digits[CS_X][CS_Y]={
{0x20,0xC9,0xCD,0xBB, 0x20,0xCB, 0x20,0xCD,0xCD,0xBB, 0x20,0xCD,0xCD,0xBB, 0x20,0xCB,0x20,0xCB, 0x20,0xC9,0xCD,0xCD, 0x20,0xC9,0xCD,0xCD, 0x20,0xCD,0xCD,0xBB, 0x20,0xC9,0xCD,0xBB, 0x20,0xC9,0xCD,0xBB},
{0x20,0xBA,0x20,0xBA, 0x20,0xBA, 0x20,0x20,0x20,0xBA, 0x20,0x20,0x20,0xBA, 0x20,0xBA,0x20,0xBA, 0x20,0xBA,0x20,0x20, 0x20,0xBA,0x20,0x20, 0x20,0x20,0x20,0xBA, 0x20,0xBA,0x20,0xBA, 0x20,0xBA,0x20,0xBA},
{0x20,0xBA,0x20,0xBA, 0x20,0xBA, 0x20,0xC9,0xCD,0xBC, 0x20,0xCD,0xCD,0xB9, 0x20,0xC8,0xCD,0xB9, 0x20,0xC8,0xCD,0xBB, 0x20,0xCC,0xCD,0xBB, 0x20,0x20,0x20,0xBA, 0x20,0xCC,0xCD,0xB9, 0x20,0xC8,0xCD,0xB9},
{0x20,0xBA,0x20,0xBA, 0x20,0xBA, 0x20,0xBA,0x20,0x20, 0x20,0x20,0x20,0xBA, 0x20,0x20,0x20,0xBA, 0x20,0x20,0x20,0xBA, 0x20,0xBA,0x20,0xBA, 0x20,0x20,0x20,0xBA, 0x20,0xBA,0x20,0xBA, 0x20,0x20,0x20,0xBA},
{0x20,0xC8,0xCD,0xBC, 0x20,0xCA, 0x20,0xC8,0xCD,0xCD, 0x20,0xCD,0xCD,0xBC, 0x20,0x20,0x20,0xCA, 0x20,0xCD,0xCD,0xBC, 0x20,0xC8,0xCD,0xBC, 0x20,0x20,0x20,0xCA, 0x20,0xC8,0xCD,0xBC, 0x20,0xCD,0xCD,0xBC}
};
int main()
{
int i,j,LCD_Digit_Index,LCD_Digit_Width,k;
char num[255];
printf("Type INTEGER number: ");
if (!strlen(gets(num))) {
printf("\n\nINTEGER not found...\nShow all LCD digits and EXIT\n\n");
for (i=0;i<CS_X;i++) {
for (j=0;j<CS_Y;j++)
printf("%c",LCD_Digits[i][j]);
printf("\n");
}
return -1;
}
printf("\n\n");
for (i=0;i<strlen(num);i++)
if(num[i]<'0' || num[i]>'9') {
printf("Is NAN [Not A Number]...\nEXIT");
return -1;
}
for (i=0;i<CS_X;i++) {
for (j=0;j<strlen(num);j++) {
LCD_Digit_Index = num[j]-'0'>1 ? (num[j]-'0')*4-2 : (num[j]-'0')*4;
LCD_Digit_Width = num[j]-'0'==1 ? 2 : 4;
for (k=0;k<LCD_Digit_Width;k++)
printf("%c",LCD_Digits[i][LCD_Digit_Index+k]);
}
printf("\n");
}
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)
-
félisten
válasz cellpeti #538 üzenetére
Hali!
Gyorsan megcsináltam(több megoldás is létezik persze), mielött ellépek itthonról. Ha valami nem tiszta írj. Késő este vagy holnap leszek majd.
(mivel ez csak példa, nem foglalkoztam azzal hogy kitudja mekkora számot lehessen beírni, ezért 2 gigánál nagyobbat ne írj be, mert hibásan fog működni. Bár kipróbálhatod )#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define C_Y 14
int cimlet[C_Y] = {20000,10000,5000,2000,1000,500,200,100,50,20,10,5,2,1};
int hanyszor[C_Y] = {0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0,0,0};
int main()
{
long int i, cash;
char money[255];
printf("Enter money: ");
if (!strlen(gets(money))) {
printf("\n\nMoney not found...EXIT");
return -1;
}
printf("\n\n");
for (i=0;i<strlen(money);i++)
if(money[i]<'0' || money[i]>'9') {
printf("Is NAN [Not A Number]...\nEXIT");
return -1;
}
cash=atoi(money);
for (i=0;i<C_Y;i++) {
hanyszor[i]=cash / cimlet[i];
cash-=hanyszor[i]*cimlet[i];
if (hanyszor[i]) printf("%5d db\t %d\n",hanyszor[i],cimlet[i]);
}
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)
-
félisten
-
félisten
válasz sghc_toma #543 üzenetére
Hali!
Elöször is bocsesz a "költői visszakérdezésért", de már előfordult, hogy valaki minden szakmai alapot nélkülöző hozzászólással gazdagított, amikor meg visszakérdeztem, hogy hát azért mégis elmagyarázhatná nekem(amúgy nem kellett volna) hogy hogyis van az, na azóta nem hallottam felőle.
Való igaz (ahogy Te illetve dabadab kolléga is írta) a GETS magában rejti ezt a fajta hibalehetőséget, de csak ezt, és ez jól látható(money[255]). Nyílván nem létezik olyan bankautomata amibe be lehet írni 255 számjegyből álló összeget, hogy adja ki 20ezresekbe, vagy ha igen szóljatok, mert kérek kölcsön egy MTZ traktort azt elhozzuk, mert akkor k... sok pénz van benne...Azért nem szeretem a pl SCANF-t, mert az viszont rejtett "hibákat" tartalmaz és aki most ismerkedik a C-vel(lásd CELLPETI) azt nem tudhatja(mert sajnos a informatika vagy prográmozást oktató tanárbácsik is gyakran megfeletkeznek ennek elmagyarázásáról). Mire gondolok? Hát például Te is említést teszel ama bizonyos STDIN-ről ugyebár, amit a SCANF is "használ". Ha valaki tényleg korrekt INPUT-ot akar írni, annak erre oda kell figyelni. egy példával illusztrálom:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
int n1,n2;
do {
printf("Enter 2 numbers [num1,num2]: ");
if (scanf("%d,%d",&n1,&n2)!=2) {
printf("Bad INPUT, try again or * to EXIT...\n");
continue;
}
printf("SUM(%d,%d) = %d\n",n1,n2,n1+n2);
} while (getch()!='*');
return 0;
}Nos, első ránézésre hibátlan, de mégsem. A következőképp működik az adott értékek mellett:
ha 5,7 akkor hibátlanul fut
ha 12345678901,12345678901, akkor hibás eredmény
ha a,b akkor hibás működés
ha 5.0,7.0 akkor hibás működésA hibás értékkel nem kell foglalkozni, az nyílvánvaló, azonban mi okozza a hibás működést? Nos annyit elárulok hogy a STDIN.
Természetesen nem Tőletek kérdem a megoldást(hisz biztosan tudjátok), hanem azoktól a leendő programozópalántáktól akik most ismerkednek a C-vel, és remélhetőleg elolvassák mások szakmai hozzászólását.
Szóval ezzel csak azt akartam illusztrálni, hogy kézenfekvő alap C input fx-ek is megtudják nehezíteni az ember életét, és ráadásul ezt úgy teszik hogy amúgy a kód hibátlan(vagy annak tűnik)Nos ezért szoktam kezdő programozóknál inkább a GETS-et alkalmazni.
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
-
félisten
Hali!
Használd a getch()-t csak így simán, ez egy billentyűleütésre vár.
Codeblocks alkalmas rá, mert amikor új projectet kreálsz, akkor kiválasztható, hogy C vagy C++ project legyen.magyarul függvényleírást meg keresgélek, bár nem ártana az angol alapfok
Fire.
UI: bár ha megvan a "Programozzunk C nyelven" című könyv, akkor nem ártana a 483. oldaltól átolvasni(ott vannak a függvények leírása)
[ 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 Benmartin #572 üzenetére
Hali!
Nos, a getch() ill a conio.h mióta C létezik azóta van és használják. Még a tankönyvek is mindenféle extra magyarázat nélkül alkalmazzák. Persze ma 2008-at írunk, és nem 1990-es évek elején vagyunk. Ezért teljesen egyetértek veled abban, hogy manapság(de csakis manapság), már más megoldásokkal kell(ene) operálni.
Az viszont elég szomorú, hogy 2008-ban olyan feladatokat kapnak a tanulók, amikhez Console Application-okhoz kell nyúlni"márpedig egyetemen úgy tudom standard ANSI C-t tanítanak."
Ehhez annyi a hozzáfűznivalóm, hogy ha ANSI C-t vagy CPP-t is tanítanak, akkor legalább olyan fejlesztőkörnyezetek segítségével(CodeGear Builder, VS C#, VS CPP) mutatnák meg a programozás rejtelmeit, szépségeit, amiket a későbbiekben hasznosítani is lehet.Mire gondolok? példáúl: írjuk ki 1-től 10-ig a számokat. Primitív feladat. De akkor legalább tennék hozzá hogy mondjuk egy StringGrid objektumban, annak legalább van értelme, nem pedig 80x25-ös karakteres képernyőn "maszatolni". A FOR ciklus ugyanaz, de legalább megismerkedne egy objektummal is egyúttal, ami hasznos is. Vagy
A korábbiakban volt olyan feladat hogy "sakktáblát" kellen kirajzolni, azon elhelyezni valamilyen betűt. Lehet pixelekkel dolgozni, ha ki tud rakni egy pixelt, adott színnel, adott helyre, akkor ki tud rajzolni is egy sakktáblát is(ami legalább hasonlít is valamelyest ), azután megtanulna két pixelt összekötni, már tudna vonalat rajzolni, ha tud vonalat rajzolni akkor azt meg lehetne forgatni 3D-be is, ha az is megy és tetszik a dolog, akkor meg neki lehet ugrani a DirectX programozásnak is... De nem, inkább a scanf() fx-t tanulja meg mert az fontos...
Tudom, hogy ezt most nagyon leegyszerűsítettem, de remélem a lényeg érthető belőle.
Mégegyszer: teljesen egyetértek a hozzászólásoddal, csak ez úgy "kikivánkozott" belőlem.
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)
-
félisten
Hali!
Azért megy nálad, mert Te idézőjeleket használsz(ahogy kell), a rossz kódba meg valami dupla "valami" van(nem idézőjel), ahogy Lortech kolléga is említí.
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
-
félisten
Hali!
ha nem jó, akkor telepítsd újra. Innen letöltheted :[link]
Lehetőleg a MinGW-s változatot töltsd le, mert abban bent van GCC compiler meg a GDB debugger is, amit normálisan a telpítés után konfigurál is.Ha megvan indítsd el, aztán settings/compiler and debugger/toolchain executables fülön auto-detect gomb, okézd le aztán próbáld meg újra létrehozni egy új projectet.
Fire.
UI: gondolom nem egy létező project nevével akarsz új projectet létrehozni?
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 Gergello #596 üzenetére
Hali!
Nincs baj azzal amit írsz, csak ugye le kellene ellenőrizni, hogy van-e helyes adat a STR-be.
Ezt megteheted a strlen() függvénnyel, vagy ahogy a példa mutatja, magával a scanf()-el is.
A scanf() egy egésszel tér vissza, mely jelzi, hogy hány értéket tudott feldolgozni.
(ha egyszerre pl 5 adatot kérsz be scanf()-el, akkor 5-tel tér vissza, ha minden oké volt)
Jelen esetben 1-gyel fog visszatérni, ha a bevitt szöveg megfelel a scanf()-ben megadott szűrésnek.#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[256];
printf("Kérem a szöveget: ");
if (scanf("%20[a-z]",str)!=1) {
printf("Hibás adatbevitel");
return -1;
}
printf(str);
return 0;
}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
Hali!
Remélem erre gondoltál, lista-szerkezetnek vagy láncolt listának(ahogy tetszik) hívják.
#include <stdio.h>
#include <stdlib.h>
struct Alma {
int value;
struct Alma *next;
};
int main()
{
struct Alma KORTE[2];
KORTE[0].value=10;
KORTE[0].next=&KORTE[1];
KORTE[1].value=20;
KORTE[1].next=NULL;
printf("Korte 1 erteke: %d\n",KORTE[1].value);
(KORTE[0].next)->value=30;
printf("Korte 1 erteke uj ertke: %d\n",KORTE[1].value);
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)
-
félisten
Hali!
Akkor remélem ez megfelel, másra már nem tudok gondolni...
Bocsi ha megint mellétrafálnék...#include <iostream>
using namespace std;
typedef class T_ALMA {
int i, j;
public:
void beallit(int a, int b) {
i = a;
j = b;
}
void almakiir() {
cout << "En a T_ALMA vagyok: ";
cout << i << " " << j << endl;
}
}ALMA;
typedef class T_KORTE : public ALMA {
public:
void kortekiir() {
cout << "En a T_KORTE vagyok\n";
}
}KORTE;
int main()
{
KORTE kortek[2];
kortek[0].beallit(1,2);
kortek[1].beallit(3,4);
kortek[0].almakiir();
kortek[1].almakiir();
kortek[0].kortekiir();
kortek[1].kortekiir();
return 0;
}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
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)
-
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)
-
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)
-
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
-
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)
-
félisten
válasz kiskatus #702 üzenetére
Hali!
Miben is írsz?
Fire.
UI: remélem a "bemásolás" alatt azt érted, hogy kijelölöd a kódót a HSZ-ben, jobb egér/másol
aztán a fejlesztőkörnyezetben meg egy üres xxxxxx.C fájlba beilleszted(jobb egér/beillesztés?[ 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 kiskatus #702 üzenetére
Hali!
Minden olyan sor elé, ahol az exit(-1) van, tegyél be egy getchar() -t.
Bocsi, az én hibám, csak mindig elfeledkezem, hogy a CodeBlocks nem csukja be az ablakot automatikusan, más fejlesztőkörnyezet meg esetleg igen....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
-
félisten
válasz kiskatus #707 üzenetére
Hali!
Na akkor már sínen vagyunk!
Létre kell hoznod egy first.txt nevű fájlt, abban a könyvtárban ahol a forrásfájl(C) van vagy oda ahova az exe generálódik.(esetenként ez ugyanaz a könyvtár)
Ha ez megvan és megint elindítod, akkor keresni fogja a second.txt fájlt, azt is hozd létre.
Ez a két fájl amit a progi összehasonlít. Írjál beléjük valamit, mondjuk az egyikbe egy 'a' a másikba egy 'b' betűt. Ha most futtatod, akkor kiírja a végén, hogy egy eltérés van, létrehoz egy error.txt nevű fájlt, amibe ha belekukkantasz akkor bent lesz, hogy hol van eltérés és miFire.
[ 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 kiskatus #709 üzenetére
Hali!
Na, akkor elöször kiderítjük, hogy hol jön létre az exe fájl.
Hova mented a forrásfájl-t? Milyen könyvtárba?
Na ebbe a könyvtárba kell létrehozni a first.txt meg a second.txt fájlokatFire.
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!