Jump to content
GSForum - Segélyvonal

Programozás C/C++-ban


Recommended Posts

Posted

Ez sem rossz, de ez egy leírása csak az api függvényeknek, amiket használhatsz.

Ehhez már meg kell lennie az alapoknak.

  • 4 weeks later...
Posted

Nem system parancsokkal, hanem file pointerrel szeretnék állományokat másolni. Ez megy is amíg szöveges állományokról van szó. De bináris állományt vajon hogy kell? A fájl megnyitása bináris módban megtörténik. Ahhoz, hogy másolni tudjam, be kéne írni a tartalmát egy tömbbe, ahonnét majd visszaírom fájlba. A tömbbe írás nem mûködik. Kérek segítséget. Kösz.

Posted

C-ben Windows alá:

 

BOOL CopyFile(char far* szFileSrc,char far* szFileDest)
{
 HFILE hfileSrc,hfileDest;
 int cbRead;
 PBYTE pbBuf;
 hfileSrc=_lopen(szFileSrc,OF_READ|OF_SHARE_DENY_NONE);
 if(hfileSrc==HFILE_ERROR)
   return FALSE;
 hfileDest=_lcreat(szFileDest,0);
 if(hfileDest==HFILE_ERROR)
 {
   _lclose(hfileSrc);
   return FALSE;
 }
 pbBuf=(PBYTE)GlobalAlloc(GMEM_FIXED,10000);
 do
 {
   cbRead=_lread(hfileSrc,pbBuf,10000);
   _lwrite(hfileDest,pbBuf,cbRead);
 }
 while(cbRead!=0);
 GlobalFree((HGLOBAL)pbBuf);
 _lclose(hfileSrc);
 _lclose(hfileDest);
 return TRUE;
}

 

Szintén C-ben, szintén Windows alá:

BOOL CopyFile(char far* szFileSrc,char far* szFileDest)
{
 int iCount=0;
 char szError[30];
 OFSTRUCT ofStrSrc;
 OFSTRUCT ofStrDest;
 HFILE hfileSrc=NULL,hfileDest=NULL;
 while(hfileSrc==NULL && iCount<100)
 {
   iCount++;
   hfileSrc=OpenFile((LPCSTR)szFileSrc,&ofStrSrc,OF_READ|OF_SHARE_COMPAT);
 }
 if(hfileSrc==HFILE_ERROR)
 {
   wsprintf(szError,"Olvasási hiba (0x%04lx)",(long int)ofStrSrc.nErrCode);
   MessageBox(NULL,szFileSrc,szError,MB_OK);
   return FALSE;
 }
 iCount=0;
 while(hfileDest==NULL && iCount<100)
 {
   hfileDest=OpenFile((LPCSTR)szFileDest,&ofStrDest,OF_CREATE);
   iCount++;
 }
 if(hfileDest==HFILE_ERROR)
 {
   _lclose(hfileSrc);
   wsprintf(szError,"Létrehozási hiba (0x04%lx)",(long int)ofStrDest.nErrCode);
   MessageBox(NULL,szFileDest,szError,MB_OK);
   return FALSE;
 }
 switch(CopyLZFile(hfileSrc,hfileDest))
 {
   case LZERROR_BADINHANDLE:MessageBox(NULL,"Rossz forrásfájl!","Másolás",MB_OK);break;
   case LZERROR_BADOUTHANDLE:MessageBox(NULL,"Rossz kimenõ fájl!","Másolás",MB_OK);break;
   case LZERROR_BADVALUE:MessageBox(NULL,"Rossz érték!","Másolás",MB_OK);break;
   case LZERROR_GLOBALLOC:MessageBox(NULL,"Memóriafoglalási hiba!","Másolás",MB_OK);break;
   case LZERROR_GLOBLOCK:MessageBox(NULL,"Memóriafelszabadítási hiba!","Másolás",MB_OK);break;
   case LZERROR_READ:MessageBox(NULL,"Olvasási hiba!","Másolás",MB_OK);break;
   case LZERROR_UNKNOWNALG:MessageBox(NULL,"Ismeretlen formátum!","Másolás",MB_OK);break;
   case LZERROR_WRITE:MessageBox(NULL,"Nem lehet írni!","Másolás",MB_OK);break;
 }
 _lclose(hfileSrc);
 _lclose(hfileDest);
 return TRUE;
}

Posted

Kösz arpsoft. De engem igazából egy DOS-os megoldás érdekelt volna. Ilyesmi, mint az alábbi, csak bináris állománnyal:

int masol(){
    FILE *fp;
    char tomb[100], c;
    int r=0, w=0;
    
    if((fp=fopen("input.txt","rt"))==NULL){    //Fájl megnyitása olvasásra.
 printf("\n\n Az input.txt allomany nem letezik. Elobb hozza letre!");//Ha nem lehet megnyitni, hibauzenet.
 
    }else{
 while(c!=EOF){    //Fájl tartalmának beolvasása tömbbe fájlvégig.
     c=fgetc(fp);
     tomb[r]=c;
     r++;
 }
    
 fclose(fp);        //Fájl lezárása.
 //printf("\n%c, r= %d",tomb[0],r);    //Elenõrzés.
 
 
 fp=fopen("output.txt","wt"); //Fájl megnyitása írásra.
 while(w<r-1){
     fputc(tomb[w],fp);    //Tömb tartalmának kiíratása fájlba.
     w++;
 }
 fclose(fp);  //Fájl lezárása.
 printf("\n\n *** A masolas befejezodott. ***");
    }
    return 0;
}

Posted
int masol(){
 FILE *fp;
 int *tomb=(int*)NULL;
 long int r=0;

 if((fp=fopen("input.txt","rb"))==NULL){ //Fájl megnyitása olvasásra.
    printf("\n\n Az input.txt allomany nem letezik. Elobb hozza letre!");//Ha nem lehet megnyitni, hibauzenet.

 }else{
   fseek(fp,0,SEEK_END);
   r=ftell(fp);
   tomb=(int*)malloc(r+1);
   fseek(fp,0,SEEK_SET);
   fread(tomb,r,1,fp);
   fclose(fp);
 }


  if(fp=fopen("output.txt","w")==NULL){ //Fájl megnyitása írásra.
     printf("\n\n Az output.txt állományt nem lehet létrehozni!");
  }else{
     fseek(fp,0,SEEK_SET);
     fwrite(tomb,r,1,fp);
     fclose(fp);
  }
  printf("\n\n *** A masolas befejezodott. ***");
  if(tomb!=(int*)NULL) free(tomb);
  return 0;
}

Posted

A lényeg, hogy mikor megnyitod a fájlt, akkor nem "rt", hanem "rb" (olvasásnál).

írásnál pedig "wt" a szöveges, "wb" a bináris.

Posted

Kösz, erre gondoltam.

Amikor deklarálom a *tomb mutatót, adok neki NULL értéket. De miért kell elé az (int*) tipusmódosító? Hiszen már int-nek van deklarálva a mutatóm.

Posted

Azért, mert így helyes. A NULL igazából void. Megérti a fordító azt is, ha nem rakod ki, de én ezt szoktam meg, hogy azonos típusokat hasonlítok össze.

  • 2 weeks later...
Posted

Kéne egy kis segítség. Kérdésem a következõ: Borland C-ben lehet-e egyáltalán, és ha igen hogyan lehet bitmapokat kitenni a képernyõre? Ha tudna valaki segíteni, annak nagyon hálás lennék. Elõlre is kösz! :upsz:

  • 2 weeks later...
Posted

Nincs semmi megoldás? Már kezd lassan sürgetni az idõ... :pislog::(

Posted

Halisztok!

 

Hogy lehet c++ segítségével egy txt fájlt beolvasni, úgy, hogy a sortörések is, tabok is stb... helyesen mûködjön?

  • 4 weeks later...
Posted

Borland C-ben lehet-e egyáltalán, és ha igen hogyan lehet bitmapokat kitenni a képernyõre?

Lehet, bár nekem még sosem sikerült. Nem a legegyszerûbb feladatok közé tartozik. :hááát:

Posted

Akkor az ki lesz hagyva... Nembaj... Majd karakteresen heggesztek valamit :P

Posted

Akkor az ki lesz hagyva... Nembaj... Majd karakteresen heggesztek valamit :P

 

Javaslom a pgm formátumot, azt elég egyszerû olvasni, írni. Vagy a wma-t.

Posted

Meg van a "Könnyű a Windowst programozni" című könyv?

A következő függváényekre lesz szükség: CreateBitmap, CreateCOmpatibleDC, BitBlt.

Ismerni kell a BITMAP struktúrát.

 

Más lehetőséged is van, ha nem futái időben kiválasztott képről van szó.

Beszerkeszted a resource-be, belefordítod a programodba. Megjeleníteni meg így tudod:

Bitmap_Kirak(HINSTANCE hInst, HWND hwndIde, int iEzt)
{
    HDC hDC,hMemDC;
    HBITMAP hBmp,hBmpOld;
    BITMAP bm;
    hBmp=LoadBitmap(hInst,MAKEINTRESOURCE(iEzt));
    hDC=GetDC(hwndIde);
    GetObject(hBmp,sizeof(BITMAP),&bm);
    hMemDC=CreateCompatibleDC(hDC);
    hBmpOld = SelectObject(hMemDC, hBmp);
    BitBlt(hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
    SelectObject(hMemDC, hBmpOld);
    DeleteDC(hMemDC);
    ReleaseDC(hwndIde, hDC);
    UpdateWindow(hwndIde);
    DeleteObject(hBmp);
}

hInst a programod példány azonosítója, hwndIde annak az ablaknak a HWND-je, ahová rajzolni akarsz, iEzt a bitmap resource azonosítója.

Posted

Javaslom a pgm formátumot, azt elég egyszerû olvasni, írni. Vagy a wma-t.

 

Bocs elírtam, nem wma, hanem wmf (,mint Windows MetaFile). (Este volt már :upsz:) A következõ függvényeket tudod használni hozzá: CreateMetaFile, PlayMetaFile, CloseMetaFile. Sõt képet menteni is tudsz vele. Ezt szerintem sokkal könnyebb használni és a legtöbb program ismeri is (csak már régen használtam, úgyhogymost nem tudok példát írni).

 

A pgm pedig Portable GrayMap. Ez utóbbi úgy tárolja a képet, hogy van egy fejléce, amiben többek között a kép mérete is benne van, aztán a fájl többi része sorban, pixelenként az összes képpont színe. Ebbõl következik, hogy elég nagy méretû, viszont könnyû használni. Ehhez nincsenek külön függvények a C-ben, de könnyû írni hozzájuk.

Posted

Én nem windowsban programozok... Én Borland C-ben... Abban is benne vannak ezek?

Posted

Nem. Ezek WinAPI függvények. (Arpsoftéi is.) Egyébként a kettõ nem zárja ki egymást, lehet Borland C-ben Windows programokat írni. Akkor szerintem a legegyszerûbb a pgm formátum, de persze, ha van leírásod a bmp felépítésérõl, azt is megírhatod, csak elég nehéz lesz.

Posted

OK köszi, de inkább kihagyom majd a programból.

Posted

Ebben az esetben csak az a lehetõséged marad, hogy megírod a bmp kezelõ függvényeket.

Az említett könyvben megtalálod a bmp fájl formátumát. Elég egyszerû, nem lesz vele gondod.

Posted

Én is borlandod használok... (most tértem át a builder 6 os verzióra... ) tehát a GCC-t nagyon nem ismerem....

Viszont a helyzet az hogy szükségem lenne rá.. nincs sok kedvem végigolvasni egy adag angol dokumentációt... szóval ha esetleg valaki tud magyart, annak nagyon örülnék... továbbá windowst használok, tehát letöltöttem még a MinGW nevû programot, hogy a GCC-t használhassam windowsban. Mûködik is, a "hello world!" -öt sikerült lefordítattnom, és minden rendben.... DE nekem szükségem lenne OpenGL-re. Google segítségével eljutottam ide: OpenGL-GLUT3.6

Letöltöttem, kicsomagoltam.... letöltöttem az NMAKE nevü progit amivel a makefile okat tudom futtatni, és megpróbáltam futtatni... igenám, de egyszercsak kiírja, hogy nem találja a win32.mak -ot... és tényleg, rákerestem, sehol sincs olyan....

 

Szóval itt elakadtam.... Talán kicsit összevisszának tûnik a két kérdés.. leírom mégegyszer röviden:

(1)Magyar dokumentáció/leírás a GCC hez?

(2)GCC-hez OpenGL :nyíl: GLUT "telepítése"

 

Nagy szükségem van most a segítségetekre!

Posted

A második kérdéshez (OpenGL): Szerintem töltsd le a Dev-C++ fejlesztõkörnyezetet. Az használ mingw és gcc fordítót is és alapból lehet vele OpenGL-es programokat is írni (ezt az új projektnél lehet kiválasztani). A példaprogramok között (ha jól emlékszem, az expamles könyvtárban) találsz példát is, hogy hogyan lehet ilyen programot írni. Alapvetõen az a legfontosabb, hogy a fordítónak be kell adni egy paramétert, ami alapján megtalálja az OpenGL-hez használható függvényeket (ha jól emlékszem, akkor -oopenglw32 vagy valami hasonló). (Ezt is meg tudod nézni a példában.)

Posted

Nagyon köszi, tényleg mûködik!! Már csak meg kell tanulnom használni.. :D

Posted

Sziasztok!

Borland C (3.1)-el kapcsolatban lenne 2 kérdésem. (Illetve ha az elsõre van használható, mûködõképes megoldás, akkor a második nem igazán érdekes.

 

Noss: Borland C-ben szöveges állományt akarok kezelni. Azt nem tudom, hogy lehet-e (és ha igen, akkor hogyan) poziccionálni a fileban. Tulajdonképpen csak az lenne a lényeg, hogy a sorok között tudjak mászkálni, és az adott sort be tudjam olvasni.)

 

Ha az elõzõ nem megvalósítható:

Hogyan tudok Borland C-vel (dos vagy windows alatt) fájlokat létrehozni?

 

Tudnátok segíteni? (Eléggé sürgõs lenne... :upsz: )

 

Elölre is köszönöm!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...