- Radeon RX 9060 XT: Ezt aztán jól meghúzták
- Milyen billentyűzetet vegyek?
- OLED monitor topik
- SD-kártyát vennél? Ezért ne csak a GB-ot nézd! – Tech Percek #9
- Azonnali alaplapos kérdések órája
- Azonnali notebookos kérdések órája
- Bambu Lab 3D nyomtatók
- Melyik tápegységet vegyem?
- Milyen egeret válasszak?
- Fejhallgató erősítő és DAC topik
Új hozzászólás Aktív témák
-
jattila48
aktív tag
válasz
Jester01 #3434 üzenetére
Már miért lenne fölösleges az strlen? Abban biztos lehetsz, hogy nem fog minden kiértékeléskor lefutni, ezt kioptimalizálják. Rengeteg hasonló ciklust láthatsz példa kódokban. Egyébként hirtelen nem jutna eszembe ennél hatékonyabb megoldás (esetleg neked?), úgyhogy engedd meg, hogy annak mondjam.
-
Krono91
csendes tag
válasz
Jester01 #2647 üzenetére
Ebben igazad van azt már én is átírtam, a kód lefordul utána, de ha megnézed akkor nem lát bele a ListaElem struktúrába a Lista, és nem tudom miért... a favágó megoldás az most hogy külön headerben tárolom a ListaElemet, és friend class a Lista, így látja a privát adattagokat, és így már működik...
De sajnos nem tudom a miértjét:S -
EQMontoya
veterán
válasz
Jester01 #2644 üzenetére
Nagyjából, igen.
Az stiimmel, hogy sizeof(int) != sizeof(double).
64 bit amúgy, linux, gcc. Ez viszont önmagában nem indokolja az "üres helyet".
Az egy paddig, hogy jó legyen az alignment. Elvégre 64 bites proci szereti, ha az osztály mérete 8 bájt többszöröse. Ettől még lehetne a nem használt hely az objektum végén, viszont ugye a cpu 8 bájtos egységeket olvas be 64 biten a memóriából, tehát ha ezen a nem 8-cal osztható címen kezdődne a double, akkor csak két művelettel tudná beolvasni. Ezt pedig nem szeretik. Nem is mindegyik kezeli le, ez ugye SIGBUS signal formájában tud jelentkezni. (pl. ARM-on) Ezért nem a végén tölt fel négy bájttal, hanem a közepén. -
WonderCSabo
félisten
-
Karma
félisten
válasz
Jester01 #2254 üzenetére
Igen, valóban ez a kérdése, de a probléma nem ott van, hanem hogy rossz a vezérlési szerkezet. Végtelen ciklus + break? Remekül karbantartható kódok születtek így, amiért kézeltörésnek kéne járnia.
A felsorolt alternatívákból a kilépési flagre szavaznék akkor már.
Esetleg kombinálva egy do-val a for helyett. -
Jester01
veterán
válasz
Jester01 #2218 üzenetére
Például iso8859-2 kódolásra:
#include <stdio.h>
static const unsigned char table[] = {
/* 0xC0 */ 0, 'A', 0, 0, 0, 0, 0, 0,
/* 0xC8 */ 0, 'E', 0, 0, 0, 'I', 0, 0,
/* 0xD0 */ 0, 0, 0, 'O', 0, 'O', 'O', 0,
/* 0xD8 */ 0, 0, 'U', 'U', 'U', 0, 0, 0,
/* 0xE0 */ 0, 'a', 0, 0, 0, 0, 0, 0,
/* 0xE8 */ 0, 'e', 0, 0, 0, 'i', 0, 0,
/* 0xF0 */ 0, 0, 0, 'o', 0, 'o', 'o', 0,
/* 0xF8 */ 0, 0, 'u', 'u', 'u', 0, 0, 0
};
int removeaccent(int c)
{
unsigned char mapped;
if (c < 0xc0) return c;
mapped = table[c - 0xc0];
if (mapped == 0) return c;
return mapped;
}
int main()
{
int c;
while((c = getchar()) != EOF)
{
putchar(removeaccent(c));
}
return 0;
} -
Dave-11
tag
válasz
Jester01 #2195 üzenetére
És azt a hossz ellenőrzést hogyan tudnám például megoldani?
Mondjuk legyen két példa:
1. A szöveg hosszabb mint 20 karakter, simán levágom a végét úgy, hogy egy for ciklussal átmásolom az első 20 karaktert egy másik stringbe vagy tömbbe.
2. A bemenet kisebb mint 20 karakter, ekkor pedig teljesen rendben van a dolog.
És akkor ezt a kettőt egy if-else szerkezetben. Ez így okés, vagy van rá jobb mód? -
Dave-11
tag
válasz
Jester01 #2179 üzenetére
Na hát jó de én még nem vagyok ennyire pro
A sort-ról eddig még nem hallottam, az isPrime() függvényt meg igazából a neten néztem, mert amit mi írtunk nem akart működni
A tiéd pedig egyszerű is. A static szó egyébként mit tesz? Mert ugyan láttam már, de még nem tanultam róla. -
-
amargo
addikt
válasz
Jester01 #2148 üzenetére
Oks,
modder a leirasod alapjan mar inkabb felre ertettelekAz async es pelda pedig nem bonyolult. Ha elinditod a request-et es egybol a main threaden kiakarod szedni az adatokat, akkor kapsz egy ordas hibat rosszabb esetben pedig nem erted mirt nincs benne adat. Mikozben az adatod majd az responsba jon vissza.
-
WonderCSabo
félisten
válasz
Jester01 #2086 üzenetére
Bocs, teljesen hülye vagyok, összekevertem a másik iránnyal, általában kiíró operátort szoktam írni, elnézést kérek, nem figyeltem.
#include <string>
#include <iostream>
class c {
public:
// std::ostream& operator<<(std::ostream& os) { // ez nem megy
// return os;
// }
};
std::ostream& operator<<(std::ostream& os, c& a) {
return os;
}
int main() {
c a;
std::cout << a;
return 0;
} -
Azazel999
csendes tag
válasz
Jester01 #1986 üzenetére
Köszönöm, de nem ez volt a baj. Tökéletesen értem a pointereket (szerintem) és az, hogyan működnek. A problémám az, hogy nem tudom hogyan valósítsam meg a vágás/összeragasztás műveletét az önszervező bin.ker. fáknál. Tudom rá a szabályt, meg lerajzolom füzetben az egészet, de egyszerűen nem tudom lekódolni. Már tényleg sokféleképpen próbáltam.
-
-
-
Jhonny06
veterán
válasz
Jester01 #1321 üzenetére
Mondjuk nem tudom, hogy mire kell felhívni a figyelmet, amikor a fordító szól érte és egyértelműen le se fut a kód, csak úgy, ha az x-et is konstansként deklaráljuk, akkor pedig már nem lehet trükközni. Sok ilyen dolog van a C-ben, ami egyértelműen kerülendő és észrevehető, ha másért nem, akkor azért, mert nem fut le.
-
Jhonny06
veterán
válasz
Jester01 #1316 üzenetére
Igazából azt nem értettem, hogy akkor mi is a hiba az eredetileg írt kóddal (lehet, hogy benne volt a válasz, csak nem értem):
char* x;
const char** y = &xTehát ha az y nem tudja dupla indirekcióval megváltoztatni azt az értéket, amire az x mutat (illetve címet, most mindegy), akkor követelmény, hogy az x se tudja megváltoztatni, azaz azt is konstansként kell deklarálni, nem? Tehát nem lenne értelme annak (illetve helytelen lenne), ha az y az x-en keresztül nem tudná megváltoztatni, az x viszont igen. Erre jutottam.
-
doc
nagyúr
válasz
Jester01 #1306 üzenetére
arrol nem beszelve hogy ugyanazt a ciklusvaltozot hasznalni az egymasbaagyazott ciklusokban, raadasul azokon belul meg szinten ugyanazzal a nevvel egy ujabb valtozot deklaralni...
azert vannak itt alapveto hianyossagok, szerintem elso korben nem artana gyorsan atfutni egy alapveto C-s tutorialtMOD: most latom, nincsenek is egymasba agyazva, csak baromi felrevezeto az indentalas
viszont a cikluson belul ugyanolyan nevvel masik valtozo, az megvan -
Brianiac
aktív tag
válasz
Jester01 #1228 üzenetére
Úgy látszik ez mst nagyon nem megy, így nem tudom lefuttatni mert a család név bekérésnél hibát kapok.
#include<iostream>
#include<fstream>
using namespace std;
struct ember
{
char nev[10];
int ev;
};
int main ()
{
setlocale (LC_ALL, "Hun");
ember csalad [3];
int i;
for(i=0; i<3; i++)
{
cout<<i+1<<". nev: ";
fflush (stdin);
cin.getline(csalad.nev, 10);
}
for(i=0; i<3; i++)
{
cout<<i+1<<". ev: ";
fflush (stdin);
cin>>csalad.ev;
}
cout<<"\nA nevek:\n\n";
for(i=0;i<3;i++)
cout<<csalad.nev[i]<<csalad.ev[i]<<endl;
for (i=0;i<3;i++)
system ("pause");
return 0;
} -
Brianiac
aktív tag
válasz
Jester01 #1224 üzenetére
Hát igazából már a legelejébe, tovább így még nem is jutottam. A 3 nevet bevittem egy két dimenziós tömbbe billentyűzetről, viszont a születési éveket sehogy sem tudom bevinni hogy jó legyen, próbáltam azokat is ugyanúgy egy két dimenziós tömbbe ahogy a neveket de akkor mindig valami hiba volt. A változóban pedig csak egy születési dátumot tudok tárolni és 3 kellene, tehát egy mindegyik névhez.
#include<iostream>
#include<fstream>
using namespace std;
struct csalad
{
char nev [3][10];
int ev;
};
int main ()
{
setlocale (LC_ALL, "Hun");
csalad sz;
int i;
for(i=0; i<3; i++)
{
cout<<i+1<<". nev: ";
fflush (stdin);
cin.getline(sz.nev[i], 10);
}
cout<<"\nA nevek:\n\n";
for(i=0;i<3;i++)
cout<<sz.nev[i]<<endl;
system ("pause");
return 0;
} -
Brianiac
aktív tag
válasz
Jester01 #1197 üzenetére
Értem, köszi az észrevételeket, amit tudok javítok!
1. Ezért már korábban is "kaptam" fórumon, de azért ezt használom mert csak ezt ismerem, ezt tanultuk és órán is mindig ezt használjuk.
2. Erre is csak ugyanazt tudom írni mint az előzőre, a tanárral is mindig ezt használja
3. Ok
4. Javítani fogom
5. Hiba kezelést nem igazán tudom hogyan kellene
6. Javítom
7. Ezt nem teljesen értem
8. Először azt hittem kelleni fog és elfelejtettem kiszedni -
Gyomman
aktív tag
válasz
Jester01 #1073 üzenetére
Igen, rájöttem, h az segített volna... Közbe rájöttem magamtól, hogy a const char* típusú fájlra nem akart működni (azt hittem pedig, h azt tudja kezelni, de mégse), így specializáltam a függvényt (meg átírtam végtelen ciklusból
) és most már működni látszik, köszönöm az útmutatásokat!
-
Gyomman
aktív tag
válasz
Jester01 #1066 üzenetére
Szia!
Elnézést, ha keveset másoltam be a programomból, de egész jól reprodukáltad, csak annyi a különbség, hogy nekem friend az operator>>, egyébként ugyanez (még pár plusz tagfüggvénnyel megspékelve).
Fura, h ennek ellenére amit te csináltál az lefordul, az enyém meg mégse.Természetesen ügyeltem arra, hogy a megadott bemeneti stream és elem párosra létezzen operator>>
Én ugyanúgy olyan típusokkal dolgozom, amire létezik az operator>>, csak alapból azt írja ki mégis hibának, hogy binary '>>' : no operator found which takes a left-hand operand of type 'std::istream' (or there is no acceptable conversion).Vagy mégiscsak elnézek valamit.
Azt akarnám am csinálni (ezek szerint rosszul, de arra majd rájövök, csak egyelőre ezen a problémán essek túl), hogy egy streamről jön egy adatfolyam hossza, majd utána maga az adat és a hosszát beolvasom a fájlhosszba, az adatot pedig utána a fájlba.
-
j0k3r!
őstag
válasz
Jester01 #1066 üzenetére
hello!
valoszinuleg nagyon alap kerdes, de sajnos ez a resz nem tiszta nekem a kododban:
F_file(const char* _utvonal, const char* _nev)
: file(0), length(0), nev(_nev), utvonal(_utvonal) {};mit csinal a fentebb beillesztett kod? (volna egy tippem, de nem akarok hulyeseget megjegyezni)
-
Gyomman
aktív tag
válasz
Jester01 #1063 üzenetére
template<typename G>
void operator>>(istream& in, F_file<G>& F)
{
fclose(F.file);
char* ttemp=new char[strlen(F.nev)+strlen(F.utvonal)+5];
strcpy(ttemp,F.utvonal);
strcat(ttemp,F.nev);
strcat(ttemp,".dat");
F.file=fopen(ttemp,"a");
G temp;
int len;
(in>>len).ignore(1); //szóközt eldobjuk
F.length+=len; //hosszt megnöveljük
while((in>>temp).ignore(1))
{
fwrite(temp,sizeof(G),1,F.file);
}
delete [] ttemp;
}Itt lenne szegény kód. Az eleje az csak annyi, h megnyitom a fájlt (kicsit bonyolultan van megoldva igaz), aztán az in>>temp résznél már szól, h neki az nem működik. Ha az ignore-on kívül teszem, akkor is szól, nem tudom hol lehet a baj.
-
-
papa019
senior tag
válasz
Jester01 #831 üzenetére
Eddig oké, csak nem tudom felparaméterezni. :S
van egy vektorom így: "vector<Product*>store".Ekkor ugye a sort első két paraméterével így néz ki:
"sort(store.begin(),store.end())"Viszont a 3. paramétert nem tudom hogy írjam meg... Írtam összehasonlító operátorokat a Product osztályba, de azokat nem tudom betenni paraméternek, mert a sort függvény sír, hogy két paramétert vár és 3-at adnék neki.
Valaki vmi ötlet? :$ -
Sk8erPeter
nagyúr
válasz
Jester01 #806 üzenetére
Hali!
Köszi a választ!A parám igazából éppen az, hogy ha átírom az ifstream típust istream-re, akkor a fordító már jogosan pampog, hogy miért akarok mondjuk egy close() függvényt egy ilyen tagváltozóra meghívni.
A legtöbb függvényem tulajdonképpen elsősorban fájl-specifikus, van olyan metódus, ami megnyit, van olyan, ami bezár (direkt itt nyitom meg, és nem mondjuk a main()-ből, hogy rugalmasabb legyen!), van olyan, ami megmondja a fájl méretét, fájl elejére vagy végére ugrik (a clear() metódus nélkül a fájlvégre éréskor már nem megy a seekg()-vel a fájlméret-lekérdezés, ezért tartottam érdemesnek külön függvénybe bepakolni), és így tovább.Ez a dolog egyébként a linuxos tail program megvalósításához kellene, aminek a feladat-kiírását korábban itt írtam: [link]
A standard inputról olvasás itt akkor kellene, amikor a júzer nem ad meg fájlnevet paraméterként - épp, ahogy a Linuxon is működik a tail.
Na, és a fájlkezelést, valamint egy tároló feltöltésének függvényét is bepakoltam ebbe a File osztályba, amit említettem, és gondoltam ha a paraméterben nincs megadott fájlnév, akkor lehetne cin-ről olvasni.Akkor szerinted érdemes inkább a standard inputról olvasásra külön osztályt létrehozni?
-
WonderCSabo
félisten
-
WonderCSabo
félisten
-
j0k3r!
őstag
válasz
Jester01 #797 üzenetére
setlocale(LC_ALL,"Hun"); - ebben en sem vagyok biztos, ezert a vegen kiszedtem a kodbol
numberofstars - teljesen igazad van ez inkabb numberofnotstars vagy numberofpoints
if(numberoftips<=10 && numberofstars==unknownlength) - ezt nem teljesen ertem azert nem numberoftips<10 -et irtam, mivel ha az user pont 10. tippre talalja ki, akkor is mukodjon
system("pause"); - ezt pont a tanar mutatta, hogy ne szalljon el futtatas utan a win32 console application, ergo latod, hogy nyertel-e vagy sem
+1: kellene egy #include <cstdlib> a (s)rand miatt. - mostmar ezt is tudom
es koszonom az epito jellegu kritikat!
-
papa019
senior tag
válasz
Jester01 #748 üzenetére
Köszi, rengeteget segítettél, kijavítottam az általad említett hibákat.
A Vector.h-ban a 2. paraméter elé odaírtam a const-ot, illetve beírtam az os<<' '<<v.at(i).print(os); sort is.Nekem viszont nem fordul és ezt írja ki:
"d:\egyetem\2. félév\programozás alapjai 2\khf\7.hazi\7\7\vector.cpp(127) : error C2662: 'HomeMadeString::String::print' : cannot convert 'this' pointer from 'const HomeMadeString::String' to 'HomeMadeString::String &'"
-
papa019
senior tag
válasz
Jester01 #685 üzenetére
Oké. Megfogadom a tanácsaid.
A nem fut le normálisan alatt azt értem, hogy a copy konstruktor használata esetén a cmd megállt futás közben, illetve amikor a destruktor nem volt kikommentezve, akkor is tapasztaltam ezt a jelenséget.
ez a main.cpp tartalma:
#include "fifo.h"
#include<stdio.h>
void main(){
FiFo valami;
valami.put(3.14);
valami.put(6.14);
valami.put(1.23);
valami.put(7.23);
valami.put(6.79);
printf("%lf\n",valami.get());
printf("%lf\n",valami.get());
printf("%lf\n",valami.get());
printf("%lf\n",valami.get());
printf("%lf\n",valami.get());
/*FiFo valami1(valami);
FiFo valami2=valami;
printf("%lf\n",valami1.get());
printf("%lf\n",valami1.get());
printf("%lf\n",valami1.get());
printf("%lf\n",valami1.get());
printf("%lf\n",valami1.get());*/
}Köszönöm a sok segítséget, megpróbálom kijavítani a tanácsaitok alapján.
Ezt a pData=0-t így tanítják nekünk az egyetemen... :S Eddig én is NULL-t használtam, aztán a gyakvezérünk minden programot 0-val írt fel :SA tömb újrafoglalgatása azért van, mert most kezdtünk bele a nyelvbe és még nem bonyolítjuk láncolt listával. (én meg inkább a gyakorlati anyag alapján írom meg a házimat
Mégegyszer köszönöm a hozzászólásokat.
Ha esetleg lesz valaki, aki megnézi a programom a main.cpp-vel, és úgy talál valami hibát benne, akkor kérem értesítsen. -
Lakers
tag
válasz
Jester01 #648 üzenetére
Ennél jobb ötletem nem volt a tológatásra, na mindegy, majd mond rá valamit a gyakvezér.
lnx=lny=0;
lkx=getmaxx();
lky=getmaxy();
for (i=0; i<N; ++i)
{
if (p[i].x+u>lnx)
lnx=(int)p[i].x;
if (p[i].x+u<lkx)
lkx=(int)p[i].x;
if (p[i].x+v>lny)
lny=(int)p[i].x;
if (p[i].x+v<lky)
lky=(int)p[i].x;
}
if (lnx+u>=getmaxx()-1 || lkx<=1)
dx=-dx;
if (lny+v>=getmaxy()-1 || lky<=1)
dy=-dy;
u+=dx; v+=dy; -
eXodus
őstag
válasz
Jester01 #559 üzenetére
"Valószínűleg nem ismeri fel érvényes betűnek az aktuális locale beállítások mellett."
Hát igen..Váltogattam azt és amit én írok ő,ű betű az szépen ki is írja, de ami a változóban van azt nem."A wcstombs mit ad vissza? ( If a wide character was encountered which could not be converted, (size_t)(-1) is returned.)"
Jó h írod ... -1et ad vissaz.
-
#82189568
törölt tag
válasz
Jester01 #555 üzenetére
Sikerült, de most újabb falba ütköztem:
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
int main()
{
int hofok;
char repeat;
do {
cout<<"Add meg a homersekletet: ";
cin>> hofok;
if ( 100 >= hofok && hofok >= 0 ) {
cout<<"VIZ\n";
}
else if ( hofok > 100 ) {
cout<<"GOZ\n";
}
else if ( hofok < 0 ) {
cout<<"JEG\n";
}
printf("Ujra ? (I vagy i)? ");
repeat = getchar();
putchar('\n');
}while(repeat == 'I' || repeat=='i');
system("PAUSE");
} -
#82189568
törölt tag
válasz
Jester01 #553 üzenetére
Igen, köszönöm, javítottam.
Viszont a do- while ciklus beágyazásában kérnék egy kis segítségét!
Magát a cout részt hova kell írni amikor megkérdezi, hogy szeretném e még egyszer?#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
int main()
{
int hofok;
do {
cout<<"Add meg a homersekletet: ";
cin>> hofok;
if ( hofok > -1 ) {
cout<<"VIZ\n";
}
else if ( hofok > 100 ) {
cout<<"GOZ\n";
}
else if ( hofok < 0 ) {
cout<<"JEG\n";
}while( itt kéne a segítség );
system("PAUSE");
return 0;
} -
icespeak
csendes tag
válasz
Jester01 #416 üzenetére
Köszi a választ.
Most az érdekelne, hogy ugyanebben a feladatban hogy tudnám megoldani hogy hetente legyenek a megadott összegek tehát első hét nap összege az 1. hét a második hét nap összege a 2. hét stb. és még ezt bonyolítva azzal, hogy a hetek közötti különbséget meg kell adni tehát 1. és 2. hét különbsége és a többi. Bármilyen ötletet szívesen fogadok. -
atm*RefeeZ
tag
válasz
Jester01 #261 üzenetére
hát nekem cpp kiterjesztést csinál,a program neve is c++ úgyhogy nem tudom akkor kit hol vernek át
a strcpy(m,mail); kikerült belőle,igazából rájöttem,hogy butaságot írtam,sajnos a drága tanárunk úgy gondolta,hogy háát..úgy sem értek c-hez,nem megyek bele hogy a sok hülyének megpróbálom előadni mit jelent az,hogy pointer,mikor mire mutat stb...így egyedül kellene megérezni ami egyenlőre nincs meg,de igyekszem
köszönöm szépen
-
k.t.a.
senior tag
válasz
Jester01 #257 üzenetére
Teljes mértékben igazat adok neked, én is írhattam volna visszatérési értéknek is, hogy még egy kicsit bonyolultabb legyen. Az esetek többségében a kérdések az alap C-re vonatkoznak, mégha C++-os is a topik. Egy éves fizum mertem volna rá tenni, hogy a kérdésnek semmi köze az objektumokhoz.
Mod.: Ezt a dinamikus dolgot nem tartom túl elegáns megoldásnak, mégha működik akkor sem.
Mod.2: A Konstans meg nem működik, mert ha a függvényben hozod létre, akkor már kint nem tudsz rá hivatkozni, ha meg globálisan hozod létre akkor meg elveszti értelmét ebben az esetben. Vagy valamit rosszul értek?
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- ÁRGARANCIA!Épített KomPhone Ryzen 5 4500 16/32/64GB RAM RX 6600 8GB GAMER PC termékbeszámítással
- Bomba ár! MacBook PRO 13" 2020 4TB3 - i5 I 16GB I 512SSD I OS X Sequoia I Cam I Gari!
- LG 25GR75FG - E-Sport Monitor - FHD 360Hz 1ms - NVIDIA Reflex + G-sync - AMD FreeSync - HDR 400
- ÁRGARANCIA! Épített KomPhone Ryzen 7 9700X 32/64GB RTX 5070 12GB GAMER PC termékbeszámítással
- Bomba ár! HP ProBook 430 G8 - i5-1135G7 I 16GB I 256GB SSD I HDMI I 13,3" FHD I Cam I W11 I Gari!
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest