-
5000 - 4901
6397 - 6001 6000 - 5901 5900 - 5801 5800 - 5701 5700 - 5601 5600 - 5501 5500 - 5401 5400 - 5301 5300 - 5201 5200 - 5101 5100 - 5001 5000 - 4901 4900 - 4801 4800 - 4701 4700 - 4601 4600 - 4501 4500 - 4401 4400 - 4301 4300 - 4201 4200 - 4101 4100 - 4001 4000 - 3901 3900 - 3801 3800 - 3701 3700 - 3601 3600 - 3501 3500 - 3401 3400 - 3301 3300 - 3201 3200 - 3101 3100 - 3001 3000 - 2901 2900 - 2801 2800 - 2701 2700 - 2601 2600 - 2501 2500 - 2401 2400 - 2301 2300 - 2201 2200 - 2101 2100 - 2001 2000 - 1
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Tabletek, E-bookok Nyomtatók, szkennerek PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
-
Frissítve: 2014-04-25 14:12 Téma összefoglaló
Új hozzászólás Aktív témák
-
DrojDtroll
veterán
Én ezt találtam az interneten:
A lényeg hogy meg kell adnod a mai dátumot és születésit. az adott formában.
5000. hsz

-
lotuska
tag
sziasztok, valaki leirja hogy lehet a legegyszerubben azt a programot megirni, hogy:
beolvasunk egy szuletesi datumot es irjuk ki hany napot elt a mai napig az illeto szemelykoszi
-
DrojDtroll
veterán
Jól megbonyolítottad a dupla tömbökkel

char string[] ="1 22 333 444 5555";
char *pch = strtok(string," ");
while (pch != NULL) {
printf("%i\n", atoi(pch));
pch = strtok(NULL, " ");
}vagy ha már belelendültem:
char *string = "1 22 333 4444 5555";
size_t i = strlen(string);
while (--i) if (string[i] == ' ') printf("%i\n", atoi(string + i));ez utóbbi jobb is, mert a strtok-al ellentétben nem módosítja a stringedet.
Köszi

Látszik, hogy még kezdő vagyok, ezért nem mindig sikerül megtalálnom a legegyszerűbb megoldást.
-
alapz@j
tag
Azert nem ilyen egyszeru mert nem tudom elore a szamokat darabszamat.
Az en megoldasom is forral es iffel mukodik:
http://baratiistok3.square7.ch/functions/str.c
Jól megbonyolítottad a dupla tömbökkel

char string[] ="1 22 333 444 5555";
char *pch = strtok(string," ");
while (pch != NULL) {
printf("%i\n", atoi(pch));
pch = strtok(NULL, " ");
}vagy ha már belelendültem:
char *string = "1 22 333 4444 5555";
size_t i = strlen(string);
while (--i) if (string[i] == ' ') printf("%i\n", atoi(string + i));ez utóbbi jobb is, mert a strtok-al ellentétben nem módosítja a stringedet.
-
DrojDtroll
veterán
-
alapz@j
tag
char *string = "2 31 457";
int i1, i2, i3;
sscanf(string, "%d %d %d", &i1, &i2, &i3); -
don_peter
senior tag
Irtam ra sajat fugvenyt ami szetszedi innentol mar minden megy az atoi()-val.

Nah akkor megoldódott.
Egyébként egy for() és if() feltéttel meg lehet oldani. -
DrojDtroll
veterán
A tordelest strtok()-al tudom megcsinalni ugye?
Irtam ra sajat fugvenyt ami szetszedi innentol mar minden megy az atoi()-val.

-
DrojDtroll
veterán
-
don_peter
senior tag
Kicsit bővebben legyszi, mert nem nagyon akart mukodni, mindig az elso szamot adta vissza
Tördeld el a stringet a szóközöknél és utána az eldarabolt stringeket már át tudod alakítani az atoi() függvénnyel.
-
DrojDtroll
veterán
-
don_peter
senior tag
atio() függvény lesz a barátod

-
DrojDtroll
veterán
Hogyan lehet egy ilyen stringbol szamokat csinalni?
"2 31 457"
-
don_peter
senior tag
Srácok, kellene írnom egy Windows programot amellyel COM porton keresztül egy PIC-nek (mikrovezérlő) adatokat tudok küldeni USART (RX/TX) adatvonalon.
Egyelőre csak kisebb 1 LED be/ki kapcsolására gondoltam.
Ahogy olvasgatok a C Sharp-ot ajánlják kinti fórumokon.
Mi a véleményetek? Milyen programot érdemes használnom?
Tudtok adni linket esetleg letöltéshez illetve, ezek ingyenesen használhatóak vagy fizetős programok?
Előre is köszi.Ja igen C nyelven írnám a profikat.
-
alapz@j
tag
Sziasztok!
Szeretnék némi segítséget kérni tőletek bináris fájlból való olvasáshoz. Találtam egy feladatot nemrégiben ami megfogott, mert nem tudok rájönni a megoldásra. Így szól:
"Olvassa be egy 'h.bin' nevű bináris fájlból a long int h[6]; tömböt, 6*sizeof(long int) méretben!"Odáig eljutottam, hogy ha minden igaz akkor fread() függvényt kell használni az eljáráshoz, viszont nem teljesen értem a függvény működését és magát a feladatnak se azt a részét, hogy egy bináris fájlból hogy olvassak be egy tömböt.
Ha valaki tudna adni bővebb magyarázatot, vagy a témához szorosan kapcsolódó anyagot azt megköszönném.
FILE *f = fopen("h.bin", "rb");
long int h[6];
fread(h, sizeof(long int), 6, f);
fclose(f); -
bucsupeti
senior tag
Illetve kicsit hiányos volt az előző:
#define elemekszama 6
#define bitszam 64
unsigned char tomb[elemekszama][bitszam] = { { "1","0","1","0",...64db }, {}, ...6db };Ebben a formában mondjuk byte-onként fogja értelmezni (6*64byte), de a lényeg talán látható, hogy mire akartam rámutatni...
Simán a sizeof(long) operátor kell. Így az adott implementáción magától fogja kiszámolni a méretet bájtokban, így nem kell ismerni a long mértete.
fread(tomb,6*sizeof(long).....) hívással simán beolvassuk a tömböt.
-
don_peter
senior tag
Nem biztos, de itt nem a bináris fájl a lényeg, hanem az, hogy a bináris fájlból olvass be 6*sizeof(long int) méretet.
Tehát van egy tömböd aminek 6 eleme van.
elemenként (long int) mérettel.
Ez végül lesz majd egy a 6*sizeof(long int).Annyit tudok hirtelen még, hogy az int típus az maximum 32bit, ha előtte van a long, akkor hosszabb is lehet, de nem tudom mennyivel.
Talán duplája kb. 64bit.
Ha ezt követjük akkor a tömböd 6*64bit-es lesz.:
tomb[6][8] ={ // (8*8==64bit)
{0b00000001}, {0b00000011}, ...stb };Ha nem jó akkor majd a szakik javítják, de én így értelmezem..
Illetve kicsit hiányos volt az előző:
#define elemekszama 6
#define bitszam 64
unsigned char tomb[elemekszama][bitszam] = { { "1","0","1","0",...64db }, {}, ...6db };Ebben a formában mondjuk byte-onként fogja értelmezni (6*64byte), de a lényeg talán látható, hogy mire akartam rámutatni...
-
don_peter
senior tag
Sziasztok!
Szeretnék némi segítséget kérni tőletek bináris fájlból való olvasáshoz. Találtam egy feladatot nemrégiben ami megfogott, mert nem tudok rájönni a megoldásra. Így szól:
"Olvassa be egy 'h.bin' nevű bináris fájlból a long int h[6]; tömböt, 6*sizeof(long int) méretben!"Odáig eljutottam, hogy ha minden igaz akkor fread() függvényt kell használni az eljáráshoz, viszont nem teljesen értem a függvény működését és magát a feladatnak se azt a részét, hogy egy bináris fájlból hogy olvassak be egy tömböt.
Ha valaki tudna adni bővebb magyarázatot, vagy a témához szorosan kapcsolódó anyagot azt megköszönném.
Nem biztos, de itt nem a bináris fájl a lényeg, hanem az, hogy a bináris fájlból olvass be 6*sizeof(long int) méretet.
Tehát van egy tömböd aminek 6 eleme van.
elemenként (long int) mérettel.
Ez végül lesz majd egy a 6*sizeof(long int).Annyit tudok hirtelen még, hogy az int típus az maximum 32bit, ha előtte van a long, akkor hosszabb is lehet, de nem tudom mennyivel.
Talán duplája kb. 64bit.
Ha ezt követjük akkor a tömböd 6*64bit-es lesz.:
tomb[6][8] ={ // (8*8==64bit)
{0b00000001}, {0b00000011}, ...stb };Ha nem jó akkor majd a szakik javítják, de én így értelmezem..
-
Cidan
tag
Sziasztok!
Szeretnék némi segítséget kérni tőletek bináris fájlból való olvasáshoz. Találtam egy feladatot nemrégiben ami megfogott, mert nem tudok rájönni a megoldásra. Így szól:
"Olvassa be egy 'h.bin' nevű bináris fájlból a long int h[6]; tömböt, 6*sizeof(long int) méretben!"Odáig eljutottam, hogy ha minden igaz akkor fread() függvényt kell használni az eljáráshoz, viszont nem teljesen értem a függvény működését és magát a feladatnak se azt a részét, hogy egy bináris fájlból hogy olvassak be egy tömböt.
Ha valaki tudna adni bővebb magyarázatot, vagy a témához szorosan kapcsolódó anyagot azt megköszönném.
-
alapz@j
tag
A billentyűzet pufferbe bennmarad egy enter és azt olvassa ki a scanf a %c-re
Ezt úgy lehet kezelni, hogy a scanf-nek megadod az elválasztó karakter, amit a beolvasáskor elnyel.
Az elválasztó karakter ez esetben a \r.Érdemes kiíratni hoyg mit is olvasott be, így hamar kiderülnek a hasonló hibák.
Javítsd ki így a scanf-es sort:
scanf("%d\r%d\r%c",&a,&b,&c);
így nekem működött linux alatt. a scanf_s nem ansi C szabvány, hanem a microsoftnak a találmánya, azzal nem tudom kipróbálni.
A scanf_s konkrétan a C11, azaz a szabványos C része, ha nem működik linux alatt, az a gcc problémája lesz...
-
lotuska
tag
A billentyűzet pufferbe bennmarad egy enter és azt olvassa ki a scanf a %c-re
Ezt úgy lehet kezelni, hogy a scanf-nek megadod az elválasztó karakter, amit a beolvasáskor elnyel.
Az elválasztó karakter ez esetben a \r.Érdemes kiíratni hoyg mit is olvasott be, így hamar kiderülnek a hasonló hibák.
Javítsd ki így a scanf-es sort:
scanf("%d\r%d\r%c",&a,&b,&c);
így nekem működött linux alatt. a scanf_s nem ansi C szabvány, hanem a microsoftnak a találmánya, azzal nem tudom kipróbálni.
Mukodik, koszonom

-
bucsupeti
senior tag
#include <stdio.h>
void main()
{
char c;
int a, b, d;
printf("kerek ket egesz szamot es a vegezni kivant muvelet szimbolumat\n");
scanf_s("%d%d%c", &a,&b,&c, 1);
if (c == '+')
{
d = a + b;
printf("%d %c %d = %d", a, c, b, d);
}
}Miutan beolvas ket egesz szamot, miert ugrik tul? Nem keri be a karaktert, nem ertem miert... Ha kulon scanf_s irok akkor sem... Valaki tudja mi a problema?
A billentyűzet pufferbe bennmarad egy enter és azt olvassa ki a scanf a %c-re
Ezt úgy lehet kezelni, hogy a scanf-nek megadod az elválasztó karakter, amit a beolvasáskor elnyel.
Az elválasztó karakter ez esetben a \r.Érdemes kiíratni hoyg mit is olvasott be, így hamar kiderülnek a hasonló hibák.
Javítsd ki így a scanf-es sort:
scanf("%d\r%d\r%c",&a,&b,&c);
így nekem működött linux alatt. a scanf_s nem ansi C szabvány, hanem a microsoftnak a találmánya, azzal nem tudom kipróbálni.
-
lotuska
tag
#include <stdio.h>
void main()
{
char c;
int a, b, d;
printf("kerek ket egesz szamot es a vegezni kivant muvelet szimbolumat\n");
scanf_s("%d%d%c", &a,&b,&c, 1);
if (c == '+')
{
d = a + b;
printf("%d %c %d = %d", a, c, b, d);
}
}Miutan beolvas ket egesz szamot, miert ugrik tul? Nem keri be a karaktert, nem ertem miert... Ha kulon scanf_s irok akkor sem... Valaki tudja mi a problema?
-
emvy
félisten
//harom beolvasott szam kozul a legkisebbet hat. meg
#include <stdio.h>
void main()
{
int i, szam, min;
for (i = 1; i < 4; i++)
{
printf("kerem a szamot\n");
scanf_s("%d", &szam, 1);
if (i == 1)
min = szam;
else
if (szam < min)
min = szam;
}
printf("A legkisebb szam: \n", min);
getchar();
}Azt akarom megkerdezni, hogy miert nem ir ki ez semmit a kepernyore, valakine van valamilyen otlete? Koszi
A valtozoidat celszeru lenne 0-ra inicializalni.
-
lotuska
tag
//harom beolvasott szam kozul a legkisebbet hat. meg
#include <stdio.h>
void main()
{
int i, szam, min;
for (i = 1; i < 4; i++)
{
printf("kerem a szamot\n");
scanf_s("%d", &szam, 1);
if (i == 1)
min = szam;
else
if (szam < min)
min = szam;
}
printf("A legkisebb szam: \n", min);
getchar();
}Azt akarom megkerdezni, hogy miert nem ir ki ez semmit a kepernyore, valakine van valamilyen otlete? Koszi
-
tomrRRR
senior tag
Igen köszönöm szépen, hogy kijavítottál később rájöttem hogy nagy marhaságot írtam... csak nem tudtam szerkeszteni

-
alapz@j
tag
Már megbocsáss, de te nem a problémát oldottad meg, hanem a compilert sikerült rávenned arra, hogy szemet hunyjon a hibád felett. Mi akadálya volt annak, hogy a szájbarágós magyarázatnak megfelelően a scanf_s függvényt használd a scanf helyett? És akkor egy csapásra egy buffer overflow lehetőséget is kiküszöböltél volna...
char c;
scanf_s("%c", &c, 1); -
lotuska
tag
-
DrojDtroll
veterán
-
lotuska
tag
-
emvy
félisten
void visszateresi erteku fv-ben minek 0-t visszaadni?
Nem errol van szo, hanem arrol, hogy a scanf a VS2010-ben mar deprekalva volt, 2012-tol meg csak kulon kapcsoloval lehet engedelyezni a hasznalatat.
-
tomrRRR
senior tag
Sziasztok, kezdo vagyok C-ben (elso programom lenne), elso eves infos, nem Magyarorszagon. Nem nagyon ertek angolul sem sokat, utananeztem a beolvasasnak neten, de nem jottem ra mi a gond, eddig Pascalt tanultam, nem ertem mi a baj ezzel a beolvasassal: (a source file .c kiterjesztessel van elmentve)
#include <stdio.h>
void main()
{
char letter;
printf("kerem a karaktert \n");
scanf("%c", &letter);
printf("%c", letter);
}a hibauzenet:
Error 1 error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\users\roland\documents\visual studio 2013\projects\consoleapplication1\elso.c 6 1 ConsoleApplication1
Valaki elmagyarazna? koszi a segitseget (a projektem C++/win32)
return 0;
}Kihagytad...
#include <stdio.h>
void main()
{
char letter;
printf("kerem a karaktert \n");
scanf("%c", &letter);
printf("%c", letter);return 0;
} -
lotuska
tag
Sziasztok, kezdo vagyok C-ben (elso programom lenne), elso eves infos, nem Magyarorszagon. Nem nagyon ertek angolul sem sokat, utananeztem a beolvasasnak neten, de nem jottem ra mi a gond, eddig Pascalt tanultam, nem ertem mi a baj ezzel a beolvasassal: (a source file .c kiterjesztessel van elmentve)
#include <stdio.h>
void main()
{
char letter;
printf("kerem a karaktert \n");
scanf("%c", &letter);
printf("%c", letter);
}a hibauzenet:
Error 1 error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\users\roland\documents\visual studio 2013\projects\consoleapplication1\elso.c 6 1 ConsoleApplication1
Valaki elmagyarazna? koszi a segitseget (a projektem C++/win32)
-
bucsupeti
senior tag
bash scriptben akarod megtenni?
![;]](//cdn.rios.hu/dl/s/v1.gif)
-
DrojDtroll
veterán
Hogyan tudom konyen a kovetkezo bemenetet int tombbe alakitani?
21 45 3 68
-
alapz@j
tag
Igen,le is tudtam futtatni és működött csak én igazából arra vagyok kíváncsi,hogy amit megírtam programot azt összetudom "kovácsolni" egy ablakkal (nehéz elmondani mire gondolok
) vagy külön kell megírnom,bonyolult elmagyaráznom de hát a programozás is bonyolult,és ez fogott meg benne! 
Az előző hozzászólónak köszönöm a segítséget mindenféleképpen utána nézek
pl.
#include <stdio.h>
void main ()
{
printf("Hello World!\n");
}
Most leirtam a világ legegyszerűbb programját,és igazából azzal nem vagyok én kibékülve,hogy ha ablakot akarok neki késziteni akkor ezt a programot másképp kell leírnom,más szintaxis szerint vagy ezt valahogy belehet helyezni?!
C-ben is könnyedén lehet GUI-t programozni, akár közvetlenül a Win32 API-t akár valamelyik multiplatform toolkitet, mint a GTK vagy az egyébként általam is használt és imádott IUP. Ettől függetlenül én is a Java Swinget vagy a .Net-et ajánlanám kezdő programozónak, mert azok eleve adottak a Java és a .Net környezetekben, nem kell dll-ekkel vagy statikus programkönyvtárakkal bajlódni.
A kérdésedre egyébként az a válasz, hogy az ablakot a megfelelő függvényhívásokkal hozod létre (kovácsolod a programodhoz): pl. win32 API-val
...
int mydialog = DialogBox(hInstance, MAKEINTRESOURCE(DLG_MYDLG), NULL, (DLGPROC)MyDlgProc);IUP-al:
Ihandle *dlg;
...
IupShow(dlg);stb., stb.
Ja, és egy jó tanács: ne keverjétek a C-t és a C++ -t, még nevükben sem

-
DrojDtroll
veterán
Hibakeresésnél legközelebb másold ide a pontos hibaüzenetet, és hogy fordításkor vagy futáskor történt a hiba.
Egyébként szerintem az a baj, hogy egy 100^4 elemű inttömb bő 400 MB memória lenne, amit stacken nem lehet elhelyezni...
Ha ekkora memóriaterület kell, nem úszod meg a heap használatát (malloc/free), de sokkal célravezetőbb, ha újragondolod a feladatod. Több mint valószínű, hogy nincs szükséged az egész tömbre a memóriában.
igazad volt rájöttem, hogy nem kell akkora nagy tömb elég a short int t[100][100][5][9]
így már fut, minden hiba nélkül
köszönöm a segítséget

-
Karma
félisten
Mi lehet a hiba? Miért nem tudok négy dimenziós tömböt deklarálni?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int t[100][100][100][100], i, j, k, l;
int bentvan=1, tanar, tantargy, hetnapja, ora;
printf("Succesfull declaration\n");
for(i=0;i<100;i++){
for(j=0;j<100;j++){
for(k=0;k<100;k++){
for(l=0;l<100;l++){
t[i][j][k][l]=0;
}
}
}
}
do{
printf("Add meg a tanart");
scanf("%d", &tanar);
printf("Add meg a tantargyat");
scanf("%d", &tantargy);
printf("Add meg, hogy a het melyik napjan");
scanf("%d", &hetnapja);
printf("Add meg, hogy hanyadik ora");
scanf("%d", &ora);
if(tanar==0){
bentvan=0;
}else{
t[tanar][tantargy][hetnapja][ora]=1;
}
}while(bentvan);
return 0;
}Hibakeresésnél legközelebb másold ide a pontos hibaüzenetet, és hogy fordításkor vagy futáskor történt a hiba.
Egyébként szerintem az a baj, hogy egy 100^4 elemű inttömb bő 400 MB memória lenne, amit stacken nem lehet elhelyezni...
Ha ekkora memóriaterület kell, nem úszod meg a heap használatát (malloc/free), de sokkal célravezetőbb, ha újragondolod a feladatod. Több mint valószínű, hogy nincs szükséged az egész tömbre a memóriában.
-
DrojDtroll
veterán
Mi lehet a hiba? Miért nem tudok négy dimenziós tömböt deklarálni?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int t[100][100][100][100], i, j, k, l;
int bentvan=1, tanar, tantargy, hetnapja, ora;
printf("Succesfull declaration\n");
for(i=0;i<100;i++){
for(j=0;j<100;j++){
for(k=0;k<100;k++){
for(l=0;l<100;l++){
t[i][j][k][l]=0;
}
}
}
}
do{
printf("Add meg a tanart");
scanf("%d", &tanar);
printf("Add meg a tantargyat");
scanf("%d", &tantargy);
printf("Add meg, hogy a het melyik napjan");
scanf("%d", &hetnapja);
printf("Add meg, hogy hanyadik ora");
scanf("%d", &ora);
if(tanar==0){
bentvan=0;
}else{
t[tanar][tantargy][hetnapja][ora]=1;
}
}while(bentvan);
return 0;
} -
emvy
félisten
Desktopra (ha nem kell multiplatform) akkor egyertelmuen .Net.
-
bucsupeti
senior tag
C nyelven programozok,csak mi az iskolában úgy szoktuk meg a microsoft visual studio-t,hogy c++
Tehát akkor ha C nyelven szeretnék programozni akkor a fenti tutoriálok nem érvényesek,igaz?grafikus felület programozásánál felejtsd el a C-t! Természetesen lehet azzal is, csak nem épp a legjobb választás. Ha desktop alkalmazást akarsz készíteni akkor C++ (esetleg nagyon óvatosan mondom: Java Swing).
Ha suliban Visual Studiot használtok akkor hazsnáld azt.
-
Ereshkigal
őstag
C nyelven programozok,csak mi az iskolában úgy szoktuk meg a microsoft visual studio-t,hogy c++
Tehát akkor ha C nyelven szeretnék programozni akkor a fenti tutoriálok nem érvényesek,igaz?Bele lehet hegeszteni a C-t is a Qt-be (én sose próbáltam), de szerintem nem érdemes szórakoznod vele.
C-n jobban le leszel korlátozva, nem is tudom, mit szoktak ajánlani hozzá, talán GTK+-t. -
BTminishop
aktív tag
Az "összekovácsolás" egy hosszú tanulási folyamat része lesz.

Először is el kéne dönteni, melyik nyelven akarsz programozni (az egyik kommentedben C++-t emlegetsz, a másikban C kódot írsz), aztán lehet hozzá választani UI frameworköt. A fentebb ajánlott Qt egy elég jó választás lehet.
(Printf helyett mást fogsz használni.)
C nyelven programozok,csak mi az iskolában úgy szoktuk meg a microsoft visual studio-t,hogy c++
Tehát akkor ha C nyelven szeretnék programozni akkor a fenti tutoriálok nem érvényesek,igaz? -
Ereshkigal
őstag
Igen,le is tudtam futtatni és működött csak én igazából arra vagyok kíváncsi,hogy amit megírtam programot azt összetudom "kovácsolni" egy ablakkal (nehéz elmondani mire gondolok
) vagy külön kell megírnom,bonyolult elmagyaráznom de hát a programozás is bonyolult,és ez fogott meg benne! 
Az előző hozzászólónak köszönöm a segítséget mindenféleképpen utána nézek
pl.
#include <stdio.h>
void main ()
{
printf("Hello World!\n");
}
Most leirtam a világ legegyszerűbb programját,és igazából azzal nem vagyok én kibékülve,hogy ha ablakot akarok neki késziteni akkor ezt a programot másképp kell leírnom,más szintaxis szerint vagy ezt valahogy belehet helyezni?!
Az "összekovácsolás" egy hosszú tanulási folyamat része lesz.

Először is el kéne dönteni, melyik nyelven akarsz programozni (az egyik kommentedben C++-t emlegetsz, a másikban C kódot írsz), aztán lehet hozzá választani UI frameworköt. A fentebb ajánlott Qt egy elég jó választás lehet.
(Printf helyett mást fogsz használni.)
-
BTminishop
aktív tag
Nem egészen értem a problémát: ha a Visual Studio-ban (legalábbis gondolom, hogy ez, a sablon-név alapján) a "WindowsFormsApplication" varázsló kitett neked egy ablakot, amit saját ízlésed szerint testre tudtál szabni, akkor lényegében "írtál" egy GUI-val rendelkező programot, nem? Build solution aztán run.
Igen,le is tudtam futtatni és működött csak én igazából arra vagyok kíváncsi,hogy amit megírtam programot azt összetudom "kovácsolni" egy ablakkal (nehéz elmondani mire gondolok
) vagy külön kell megírnom,bonyolult elmagyaráznom de hát a programozás is bonyolult,és ez fogott meg benne! 
Az előző hozzászólónak köszönöm a segítséget mindenféleképpen utána nézek
pl.
#include <stdio.h>
void main ()
{
printf("Hello World!\n");
}
Most leirtam a világ legegyszerűbb programját,és igazából azzal nem vagyok én kibékülve,hogy ha ablakot akarok neki késziteni akkor ezt a programot másképp kell leírnom,más szintaxis szerint vagy ezt valahogy belehet helyezni?!
-
alapz@j
tag
Sziasztok,új vagyok még a programozásba még csakkonzol applikációt írtam és valamelyik nap nézegettem a c++-t és megtaláltam ez a WindowsFormsApplication-t megjelent egz ablak amit saját ízlésem szerint testre tudtam szabni.A kérdésem a következő,lehetséges olyan hogy ami konzolba megy program,azt úgy megoldani,hogy egy önnáló "program" legyen?! Tehát ablakja legyen ne a konzol nyitódjon meg és gyakorlatilag egy önnáló program legyen? Vagy ez,hogy lehetséges megoldani?Tudom nem egyszerű de legalább valami nekifutó kellene.Az olyan kommenteket kerülném,hogy "rossz pályát választottál" mert szerintem senki sem született programozónak.Köszönöm.
Nem egészen értem a problémát: ha a Visual Studio-ban (legalábbis gondolom, hogy ez, a sablon-név alapján) a "WindowsFormsApplication" varázsló kitett neked egy ablakot, amit saját ízlésed szerint testre tudtál szabni, akkor lényegében "írtál" egy GUI-val rendelkező programot, nem? Build solution aztán run.
-
bucsupeti
senior tag
Sziasztok,új vagyok még a programozásba még csakkonzol applikációt írtam és valamelyik nap nézegettem a c++-t és megtaláltam ez a WindowsFormsApplication-t megjelent egz ablak amit saját ízlésem szerint testre tudtam szabni.A kérdésem a következő,lehetséges olyan hogy ami konzolba megy program,azt úgy megoldani,hogy egy önnáló "program" legyen?! Tehát ablakja legyen ne a konzol nyitódjon meg és gyakorlatilag egy önnáló program legyen? Vagy ez,hogy lehetséges megoldani?Tudom nem egyszerű de legalább valami nekifutó kellene.Az olyan kommenteket kerülném,hogy "rossz pályát választottál" mert szerintem senki sem született programozónak.Köszönöm.
Előszöris a programozás szerintem az hogy egy probléma megoldására algoritmust készítesz. Ha ez megvan akkor az algoritmus köré felhasználói felületet tenni már "nem nagy ügy".
(Valójában persze a legfontosabb a felhasználói élmény, az hogy az alkalmazást használók szívesen dolgozzanak a szoftverrel.)A lényeg hogy ha C-ben tudsz algoritmusokat írni, akkor rendben vagy. Most már csak meg kell ismerni a különféle GUI keretrendszereket. Ahogy látom neked most egy picit a komponens alapú GUI fejlesztéssel kellene megismerkedned, ahol majd egy gomb megnyomására lefut az említett programod és valamilyen grafikus komponens segítségével (pl datagrid) megjeleníti az eredményt.
Rengeteg GUI építő tutorial létezik a youtobe-on. Ha C/C++ akkor én javasolni tudom a QT környezetet. Tényleg egyszerű és jól használható (ráadásul Linuxon és windowson is elérhető).
Itt egy QT oktató videósorozat.
Sok sikert!
-
BTminishop
aktív tag
Sziasztok,új vagyok még a programozásba még csakkonzol applikációt írtam és valamelyik nap nézegettem a c++-t és megtaláltam ez a WindowsFormsApplication-t megjelent egz ablak amit saját ízlésem szerint testre tudtam szabni.A kérdésem a következő,lehetséges olyan hogy ami konzolba megy program,azt úgy megoldani,hogy egy önnáló "program" legyen?! Tehát ablakja legyen ne a konzol nyitódjon meg és gyakorlatilag egy önnáló program legyen? Vagy ez,hogy lehetséges megoldani?Tudom nem egyszerű de legalább valami nekifutó kellene.Az olyan kommenteket kerülném,hogy "rossz pályát választottál" mert szerintem senki sem született programozónak.Köszönöm.
-
buherton
őstag
-
emvy
félisten
-
buherton
őstag
Most egy kicsit elbizonytalanodtam. Ha pointert deklarálunk, akkor azzal helyet nem allokálunk csak egy memória területet, ahol a pointer lesz, ugye?
int *ptr;
ptr[0] = 0;
ptr[1] = 1;Vagyis ez így helyes?
-
axioma
veterán
"Viszont az algoritmus az algoritmus barmelyik altalanos celu nyelvben,"
+1
Ezt a mondatot, gondolkodást kellene megtanítani a mai programozótanoncoknak. Sokszor hallom hogy "C-ben simán megírom, de Java-ban ez bonyolult". Ehh.
Én HT-1080Z-n írta meg ezt a számkitaláló programot majd harminc évvel ezelőtt

En nem keves esetben azt latom, hogy a munkatarsat kereso cegek sem feltetlen az algoritmus szerinti (illetve a lenti problema feletti elso bonyolultsagi lepcson mar az adatszerkezet is ide jon) gondolkodast nezik a jeloltben, hanem celnyelvben jartassagi fokot... ugyhogy sajnos azt kell mondjam, hogy a tanulok/hallgatok altalaban egyszeruen csak az igenyekhez alkalmazkodnak. Nyilvan vannak kivetelek igeny es fiatal munkaero oldalon is.
-
Ereshkigal
őstag
"Viszont az algoritmus az algoritmus barmelyik altalanos celu nyelvben,"
+1
Ezt a mondatot, gondolkodást kellene megtanítani a mai programozótanoncoknak. Sokszor hallom hogy "C-ben simán megírom, de Java-ban ez bonyolult". Ehh.
Én HT-1080Z-n írta meg ezt a számkitaláló programot majd harminc évvel ezelőtt

A kettő nem üti egymást szerintem. Mondjuk én inkább olyat hallok, hogy Java-ban könnyebb.

-
bucsupeti
senior tag
41 evesen? Tinilanyaim megregulazojanak, legfeljebb... amugy 10+ eve java fejleszto vagyok. Csak tudod a 80-as evekben foleg az elso feleben nem volt annyira trivialis, hogy diakkent egyaltalan valamilyen szamitogephez kerulsz, az meg plane hogy programot irsz (tit tanfolyam a programozasrol volt mar 7.-es koromban, konyv + irasvetito, egy darab commodore talan mukodott ott, de lehet hogy csak a futasi eredmenyt vestek fel. Az akkoriban elofordulo ht, primo, sinclair gepekhez kulon basic nyelvjaras volt... es akkor me'g meglehetosen butan neztek hogy egy lanyt ilyesmi erdekelhet.)
Viszont az algoritmus az algoritmus barmelyik altalanos celu nyelvben, elvileg akkor is ugyanugy kellett megoldani, pl. hogy a "meg lehetseges" szamtartomany kozepet kell mindig betippelni (sot, ha olyat kerdezett a user, ami tartomanyon kivul esett, nem is mondott kisebb-nagyobb eredmenyt, csak hogy "Ez butasag!")"Viszont az algoritmus az algoritmus barmelyik altalanos celu nyelvben,"
+1
Ezt a mondatot, gondolkodást kellene megtanítani a mai programozótanoncoknak. Sokszor hallom hogy "C-ben simán megírom, de Java-ban ez bonyolult". Ehh.
Én HT-1080Z-n írta meg ezt a számkitaláló programot majd harminc évvel ezelőtt

-
axioma
veterán
41 evesen? Tinilanyaim megregulazojanak, legfeljebb... amugy 10+ eve java fejleszto vagyok. Csak tudod a 80-as evekben foleg az elso feleben nem volt annyira trivialis, hogy diakkent egyaltalan valamilyen szamitogephez kerulsz, az meg plane hogy programot irsz (tit tanfolyam a programozasrol volt mar 7.-es koromban, konyv + irasvetito, egy darab commodore talan mukodott ott, de lehet hogy csak a futasi eredmenyt vestek fel. Az akkoriban elofordulo ht, primo, sinclair gepekhez kulon basic nyelvjaras volt... es akkor me'g meglehetosen butan neztek hogy egy lanyt ilyesmi erdekelhet.)
Viszont az algoritmus az algoritmus barmelyik altalanos celu nyelvben, elvileg akkor is ugyanugy kellett megoldani, pl. hogy a "meg lehetseges" szamtartomany kozepet kell mindig betippelni (sot, ha olyat kerdezett a user, ami tartomanyon kivul esett, nem is mondott kisebb-nagyobb eredmenyt, csak hogy "Ez butasag!") -
don_peter
senior tag
Sziasztok!
segítségeteket szeretném kérni, hogy tudnám kiírni ezt a programot C-ben ?
Írjunk egy játékot.
csinálunk egy random generátort, kérjünk be egy számot! 1-100 ig
in= 98;számítógép kiírja találgass:
beírtam: 15
A számítógép kiírja: annál nagyobb
110 beírok
A számítógép kiírja: annál kisebb
majd egy számnál kiírja hogy nyertél
winTudnatok ebben segìteni?
Ebben a videóban pontosan ezt a programot promolja sajátja ként a srác.
Mindenkinek ajánlom ezt a kis videót.
Vicces, de érthető és hasznos..
[link] -
tomrRRR
senior tag
Oh, ez a feladat! Tobb mint nosztalgia... a gimi eleje nekem mar tul regen volt
Sot, kesobb meg kellett irni a forditottjat is (a gep kerdezgessen), meg azt is hogy amikor a user kerdez, ne legyen valoban kitalalt szam, hanem ugy valaszoljon, hogy mindig kelljen a 7 kerdes minimum! Hogy izgibb legyen, az osszes tipusnal a hatar random 0-10 kozti szamtol random 90-110 kozti szamig volt
(a tol-ig inditaskor ment ki a kepernyore). Termeszetesen az egesz off, mert mindez Basic-ben ment.
Most minek tanulsz? -
tomrRRR
senior tag
-
axioma
veterán
Sziasztok!
segítségeteket szeretném kérni, hogy tudnám kiírni ezt a programot C-ben ?
Írjunk egy játékot.
csinálunk egy random generátort, kérjünk be egy számot! 1-100 ig
in= 98;számítógép kiírja találgass:
beírtam: 15
A számítógép kiírja: annál nagyobb
110 beírok
A számítógép kiírja: annál kisebb
majd egy számnál kiírja hogy nyertél
winTudnatok ebben segìteni?
Oh, ez a feladat! Tobb mint nosztalgia... a gimi eleje nekem mar tul regen volt
Sot, kesobb meg kellett irni a forditottjat is (a gep kerdezgessen), meg azt is hogy amikor a user kerdez, ne legyen valoban kitalalt szam, hanem ugy valaszoljon, hogy mindig kelljen a 7 kerdes minimum! Hogy izgibb legyen, az osszes tipusnal a hatar random 0-10 kozti szamtol random 90-110 kozti szamig volt
(a tol-ig inditaskor ment ki a kepernyore). Termeszetesen az egesz off, mert mindez Basic-ben ment. -
bucsupeti
senior tag
-
tomrRRR
senior tag
-
sztanozs
veterán
-
bucsupeti
senior tag
Sziasztok!
segítségeteket szeretném kérni, hogy tudnám kiírni ezt a programot C-ben ?
Írjunk egy játékot.
csinálunk egy random generátort, kérjünk be egy számot! 1-100 ig
in= 98;számítógép kiírja találgass:
beírtam: 15
A számítógép kiírja: annál nagyobb
110 beírok
A számítógép kiírja: annál kisebb
majd egy számnál kiírja hogy nyertél
winTudnatok ebben segìteni?
Szívesen segítek! Meddig jutottál? Hol akadtál el?
-
tomrRRR
senior tag
Sziasztok!
segítségeteket szeretném kérni, hogy tudnám kiírni ezt a programot C-ben ?
Írjunk egy játékot.
csinálunk egy random generátort, kérjünk be egy számot! 1-100 ig
in= 98;számítógép kiírja találgass:
beírtam: 15
A számítógép kiírja: annál nagyobb
110 beírok
A számítógép kiírja: annál kisebb
majd egy számnál kiírja hogy nyertél
winTudnatok ebben segìteni?
-
alpihun
senior tag
Szia,
for(s=1; !read.eof(), s<=n; elozo=a)
A vessző helyett tegyél &&-t. Vesszővel a bal fele ugyan kiértékelődik, de nem számít bele a kilépési feltételbe. Az s pedig a te esetedben nem lesz nagyobb vagy egyenlő az n-nél, és így végtelen ciklusba kerül az egész.
Egyébként, ha csak annyi a feladat, hogy megkeresd a leghosszabb sorozatot, felesleges eltenned tömbbe. Elég egyszer végigmenni a fájlon, és menet közben megkeresni a legtöbb egymás után következő ugyanolyan számot.
OMG!
Minimum a fél programkód újraírására számítottam. Elásom magam
Köszi.
Az egy fokkal még bonyolultabb, vagy csak nem látom. Ez logic ez life. Működik s kész, igaz, hogy így s igaz, hogy nem jó felfogás, de legalább van hova fejlődni. -
Kosztinho
tag
Nem a hosszával van a baj.
Csak nagyon csúf az az első ~20 sor és nem akartam magyarázkodásba kezdeni vele. Röviden annyi, hogy két sorban meg lehetne oldani azt vektorral, csak még nem tanultuk suliban, netről ellesni meg +1 hibalehetőség, megkérdezem hétfőn a tanárt (ezek érettségi feladatok és most kezdtem a tízet blabla kitérdekel), addig is megteszi ez a tömb, aminek rossz esetben is csak kevéssel van több eleme a szükségesnél.
Szóval ha működne a dolog, akkor kiírná a legtöbb egymás melletti egyforma számok számát a beolvasandó fájlból, aminek a tartalma:
32 45 56 34 34 34 34 55 11 11 11 11 11 11 12
plusz a részsorozatot, tehát:
6
11 11 11 11 11 11
Viszont nem ezt csinálja. Hol a hiba?Szia,
for(s=1; !read.eof(), s<=n; elozo=a)
A vessző helyett tegyél &&-t. Vesszővel a bal fele ugyan kiértékelődik, de nem számít bele a kilépési feltételbe. Az s pedig a te esetedben nem lesz nagyobb vagy egyenlő az n-nél, és így végtelen ciklusba kerül az egész.
Egyébként, ha csak annyi a feladat, hogy megkeresd a leghosszabb sorozatot, felesleges eltenned tömbbe. Elég egyszer végigmenni a fájlon, és menet közben megkeresni a legtöbb egymás után következő ugyanolyan számot.
-
alpihun
senior tag
Nem a hosszával van a baj.
Csak nagyon csúf az az első ~20 sor és nem akartam magyarázkodásba kezdeni vele. Röviden annyi, hogy két sorban meg lehetne oldani azt vektorral, csak még nem tanultuk suliban, netről ellesni meg +1 hibalehetőség, megkérdezem hétfőn a tanárt (ezek érettségi feladatok és most kezdtem a tízet blabla kitérdekel), addig is megteszi ez a tömb, aminek rossz esetben is csak kevéssel van több eleme a szükségesnél.
Szóval ha működne a dolog, akkor kiírná a legtöbb egymás melletti egyforma számok számát a beolvasandó fájlból, aminek a tartalma:
32 45 56 34 34 34 34 55 11 11 11 11 11 11 12
plusz a részsorozatot, tehát:
6
11 11 11 11 11 11
Viszont nem ezt csinálja. Hol a hiba? -
emvy
félisten
Dobd fel http://pastebin.com/ -re, es tedd be ide a linket.
-
alpihun
senior tag
Hali!
Nagyon alapszintű c++-os problémám akadt, többszöri átnézés után sem kapom a hibát.
Nem is csúfítanám a fórumot vele, aki tudna ésvagy hajlandó rápillantani a kódra az írjon egy privátot s elküldöm.
Ha megoldódik, akkor azt itt is jelzem majd. -
don_peter
senior tag
Közben megoldódott a probléma..
Nagyon egyszerű volt és ezért volt nehéz
Álljon itt a példa:printf("%s", valtozo[0]); //kiíratás sima srting egy tömbből
printf("%S", valtozo[0]); //kiíratás program memóriában tárolt (ROM) srting egy tömbből
l
Ennyi ..
az a fránya "%S"... -
don_peter
senior tag
Nem ír ki semmit.
Ha nem a ROM-ba teszem akkor meg simán kiírja a tömb tartamát.Tehát így kiírja a tartamát:
static unsigned char szovegek[14][19] = {
{'v','a','l','a','m','i',' ','h','e'}
}
printf("%s", szovegek[0]); -
emvy
félisten
Uraim...
Van egy kis problémám.
Van egy programmemóriába létrehozott tömböm és ebből szeretnék kiíratni.
A következő képen néz ki:rom static unsigned char szovegek[14][19] = {
{'P','r','o','f','i','l',' ','n','e','v',':'} //, ...stb sorok
};
//A kiíratást meg így
printf("%s", szovegek[i]);Az i természetesen növekszik.
Ha nem a rom-ba teszem hanem simán a memóriába akkor menne, de akkor meg a hely kevés..
Azért van szükség erre a tömbre mert szeretnék helyet spórolni...
Előtte switch() elágazással csináltam, de az zabálja a memóriát.
Előre is köszi...Oo, nem kene 0-val terminalni a sztringet? Egyebkent mit jelent az, hogy 'nem megy'?
-
don_peter
senior tag
Uraim...
Van egy kis problémám.
Van egy programmemóriába létrehozott tömböm és ebből szeretnék kiíratni.
A következő képen néz ki:rom static unsigned char szovegek[14][19] = {
{'P','r','o','f','i','l',' ','n','e','v',':'} //, ...stb sorok
};
//A kiíratást meg így
printf("%s", szovegek[i]);Az i természetesen növekszik.
Ha nem a rom-ba teszem hanem simán a memóriába akkor menne, de akkor meg a hely kevés..
Azért van szükség erre a tömbre mert szeretnék helyet spórolni...
Előtte switch() elágazással csináltam, de az zabálja a memóriát.
Előre is köszi... -
don_peter
senior tag
C-ben írt programom lassan testet ölt... pár kép róla:




KB. 3 hónapos fejlesztés eredménye kezd körvonalazódni..
Ha nem látszana akkor elmondom, hogy ez egy levegős forrasztó gép amelynek a vezérlését C-ben programoztam le..
Nem szorosan tartozik ide, de mivel sokat tanultam tőletek szívesen mutatom meg miket készítek..
Remélem nem veszitek zokon... -
Hani
aktív tag
bucsupeti, alapz@j, buherton:
Köszönöm az infókat. Kipróbálom őket, aztán kiderül - egyelőre mondjuk csak egyszerű, banális kis jószágokat gyártok, amihez akár egy online fordító is oké, csak a lépésenkénti futtatást / debugot hiányolom különösebben, hogy jobban lássam, hogy éppen mi történik.
-
buherton
őstag
Köszönöm, megpróbálom akkor ezek szerint.
Még egy kérdés: ha normálisan akar C-ben programozni az ember, akkor milyen programot érdemes használni? Eddig a notepad -> notepad++ -> Eclipse+Cygwin utat jártam be, de mindegyiknek megvoltak a maga bajai. Van olyan keretrendszer, ami különösen ajánlott, vagy bármelyik jó, csak szokjak hozzá a sajátosságaihoz?
Tapasztalatból mondom, hogy a Cygwin Eclipse páros nagyon sok szenvedést okoz.
Ha Linuxra akarsz fejleszteni, akkor virtualbox vagy tedd fel natívba. Ha ragaszkodsz a GCC-hez, akkor min-gw + Eclipse, viszont ekkor windows-os környezetet kell haszálnod.
-
alapz@j
tag
Köszönöm, megpróbálom akkor ezek szerint.
Még egy kérdés: ha normálisan akar C-ben programozni az ember, akkor milyen programot érdemes használni? Eddig a notepad -> notepad++ -> Eclipse+Cygwin utat jártam be, de mindegyiknek megvoltak a maga bajai. Van olyan keretrendszer, ami különösen ajánlott, vagy bármelyik jó, csak szokjak hozzá a sajátosságaihoz?
A NotePad++ és a Cygwin alapján feltételezem, hogy Windows OS alatt programozol - ebben az esetben a legújabb Microsoft Visual C Express-t vagy a PellesC-t ajánlanám, mindkettő ingyenes és nagyon jó fejlesztői közeg, ez utóbbi teljesen C11 konform és a resource editor is teljes benne (pl. van dialog builder, ami az msvce-ből pl. hiányzik).
-
bucsupeti
senior tag
Köszönöm, megpróbálom akkor ezek szerint.
Még egy kérdés: ha normálisan akar C-ben programozni az ember, akkor milyen programot érdemes használni? Eddig a notepad -> notepad++ -> Eclipse+Cygwin utat jártam be, de mindegyiknek megvoltak a maga bajai. Van olyan keretrendszer, ami különösen ajánlott, vagy bármelyik jó, csak szokjak hozzá a sajátosságaihoz?
Előszöris az igazzy C programozó, valamiféle Unix féle rendszert használ, természetesen c-shellel

De komolyra fordítva a szót. Szerintem először célszerű átlátni hogy a programozás egyes fázisaiban mi is történik, milyen programokat és miért kell futtatni. (szerkesztés, fordítás, futtatás, hibakeresés) Ezeket a részleteket az integrált fejlesztői környeztek jól eltakarják, ezzel "egyszerűsítve" a programozást.
Szóval az IDE-k használata (pl. Dev-C, Code-Blocks, Visual Studio, Netbeans, Eclipse) szerintem csak akkor jó ötlet ha tudod mi történik és hogyan. Ha ez a lépés kimarad akkor nagyon sok minden bonyolultnak, érthetetlennek tűnhet.Később valamelyik professzionális IDE megismerése mindenképp javasolt. Én az Eclipse mellett döntöttem, de van más lehetőség is.
-
Hani
aktív tag
A beolvasás egyszerű feladatnak tűnik, mégis meglepően bonyolult jól csinálni.
Az fflush(stdin) nem szabványos, vagy működik vagy nem. Az ajánlott módszer teljes sorok olvasása fgets használatával, majd a beolvasott sor számmá alakítása strtol segítségével. A helyes megoldás a sor olvasásnál kezeli a túl hosszú sorokat, és az átalakítás után ellenőrzi, hogy maradt-e még feldogozatlan karakter.
Ennél egyszerűbb megoldás, ha az fflush(stdin) helyett egy fgetc(stdin) ciklussal kiolvasol mindent a sor (vagy a bemenet) végéig.
Az is rossz a kódban, hogy a scanf visszatérési értékét nem ellenőrzöd. Ha ugyanis nem számot írnak be, akkor nem tud mit konvertálni és az i értéke változatlan marad. Azt pedig nem is inicializáltad, tehát bármi lehet. Ha véletlenül 1 és 5 közé esik akkor a programod kilép a ciklusból.
Köszönöm, megpróbálom akkor ezek szerint.
Még egy kérdés: ha normálisan akar C-ben programozni az ember, akkor milyen programot érdemes használni? Eddig a notepad -> notepad++ -> Eclipse+Cygwin utat jártam be, de mindegyiknek megvoltak a maga bajai. Van olyan keretrendszer, ami különösen ajánlott, vagy bármelyik jó, csak szokjak hozzá a sajátosságaihoz?
-
Jester01
veterán
Sziasztok,
újra gondom van, pontosabban egy régi dolog jött fel újra.
Egyszerű a feladat: 1 és 5 közötti számokat kell beolvasnom. Azt gondoltam, hogy megoldom ezzel:#include <stdio.h>
int main() {
int i;
do
{
printf("Adjon meg egy szamot 1 es 5 kozott:\n");
scanf("%d", i);
fflush(stdin);
if ((1>i) || (5<i)) printf("A megadott adat nem 1 es 5 kozotti szam.\n");
} while ((1>i) || (5<i));
printf("A megadott szam: %d\n", i);
return 0;
}A program megy, ha mondjuk 4-et ütök be. Működik akkor is, ha mondjuk 44-et ütök: kiírja, hogy hibás és újra kéri. De ha nem számot ütök be, hanem mondjuk egy k betűt, akkor végtelen ciklusban elkezdi kiírni, hogy "Adjon meg egy szamot 1 es 5 kozott:
A megadott adat nem 1 es 5 kozotti szam." ,Mindezt beolvasás nélkül, hiába az fflush.
Kérdés, hogy mit nézek el? Hogyan kell normálisan bekérni 1 és 5 közötti számokat?
A beolvasás egyszerű feladatnak tűnik, mégis meglepően bonyolult jól csinálni.
Az fflush(stdin) nem szabványos, vagy működik vagy nem. Az ajánlott módszer teljes sorok olvasása fgets használatával, majd a beolvasott sor számmá alakítása strtol segítségével. A helyes megoldás a sor olvasásnál kezeli a túl hosszú sorokat, és az átalakítás után ellenőrzi, hogy maradt-e még feldogozatlan karakter.
Ennél egyszerűbb megoldás, ha az fflush(stdin) helyett egy fgetc(stdin) ciklussal kiolvasol mindent a sor (vagy a bemenet) végéig.
Az is rossz a kódban, hogy a scanf visszatérési értékét nem ellenőrzöd. Ha ugyanis nem számot írnak be, akkor nem tud mit konvertálni és az i értéke változatlan marad. Azt pedig nem is inicializáltad, tehát bármi lehet. Ha véletlenül 1 és 5 közé esik akkor a programod kilép a ciklusból.
-
Hani
aktív tag
Sziasztok,
újra gondom van, pontosabban egy régi dolog jött fel újra.
Egyszerű a feladat: 1 és 5 közötti számokat kell beolvasnom. Azt gondoltam, hogy megoldom ezzel:#include <stdio.h>
int main() {
int i;
do
{
printf("Adjon meg egy szamot 1 es 5 kozott:\n");
scanf("%d", i);
fflush(stdin);
if ((1>i) || (5<i)) printf("A megadott adat nem 1 es 5 kozotti szam.\n");
} while ((1>i) || (5<i));
printf("A megadott szam: %d\n", i);
return 0;
}A program megy, ha mondjuk 4-et ütök be. Működik akkor is, ha mondjuk 44-et ütök: kiírja, hogy hibás és újra kéri. De ha nem számot ütök be, hanem mondjuk egy k betűt, akkor végtelen ciklusban elkezdi kiírni, hogy "Adjon meg egy szamot 1 es 5 kozott:
A megadott adat nem 1 es 5 kozotti szam." ,Mindezt beolvasás nélkül, hiába az fflush.
Kérdés, hogy mit nézek el? Hogyan kell normálisan bekérni 1 és 5 közötti számokat?
(A scanf("%d", i); igazából scanf("%d", &i); valamiért most lemaradt az &. )
-
Hani
aktív tag
Sziasztok,
újra gondom van, pontosabban egy régi dolog jött fel újra.
Egyszerű a feladat: 1 és 5 közötti számokat kell beolvasnom. Azt gondoltam, hogy megoldom ezzel:#include <stdio.h>
int main() {
int i;
do
{
printf("Adjon meg egy szamot 1 es 5 kozott:\n");
scanf("%d", i);
fflush(stdin);
if ((1>i) || (5<i)) printf("A megadott adat nem 1 es 5 kozotti szam.\n");
} while ((1>i) || (5<i));
printf("A megadott szam: %d\n", i);
return 0;
}A program megy, ha mondjuk 4-et ütök be. Működik akkor is, ha mondjuk 44-et ütök: kiírja, hogy hibás és újra kéri. De ha nem számot ütök be, hanem mondjuk egy k betűt, akkor végtelen ciklusban elkezdi kiírni, hogy "Adjon meg egy szamot 1 es 5 kozott:
A megadott adat nem 1 es 5 kozotti szam." ,Mindezt beolvasás nélkül, hiába az fflush.
Kérdés, hogy mit nézek el? Hogyan kell normálisan bekérni 1 és 5 közötti számokat?
-
Jester01
veterán
Sziasztok,
Nem tudom megoldani azt, hogy csak akkor olvasson be egy karaktert az stdin-ről, ha van karakter, magyarul ne várjon a karakterre, ha nincs.
while (1) {
if (checkInput()) doInput();
if (checkTimer()) doTimer();
}nos azt hiszem, sikerült megoldanom a problémát:
void ???func(void *parm) {
pthread_mutex_lock(&mutex);
...
pthread_mutex_unlock(&mutex);
sched_yield();
return NULL;
}
int main(int argc, char **argv) {
pthread_t threadid, inputid;
char f;
f = 1;
while (1) {
pthread_mutex_lock(&mutex);
pthread_create(&threadid, NULL, threadfunc, NULL);
if (f) {
f = 0;
pthread_create(&inputid, NULL, inputfunc, NULL);
}
usleep(10);
pthread_mutex_unlock(&mutex);
pthread_join(threadid, NULL);
pthread_mutex_destroy(&mutex);
}
}ahol az inputfunc a doInput() és a threadfunc a doTimer()
Magyarul, két külön szálon fut a két funkció.
A program alapját a neten találtam, és egyenlőre fogalmam sincs, hogy a pthread_xxx-ek mit is csinálnak pontosan, de a program az elvárásoknak megfelelően működik.
Ja, megoldani mi is meg tudjuk, ennél egyszerűbben is. Csak szabvány C-ben nem. A pthread az nem az.
-
zka67
őstag
Sziasztok, ismét elakadtam, így megint a segítségeteket kérem:
Nem tudom megoldani azt, hogy csak akkor olvasson be egy karaktert az stdin-ről, ha van karakter, magyarul ne várjon a karakterre, ha nincs.
while (1) {
if (checkInput()) doInput();
if (checkTimer()) doTimer();
}Itt a checkInput() a kérdéses, fogalmam sincs, hogy oldjam meg, hogy jelezze, ha van karakter az stdin-ben.
A segítségeteket előre is köszönöm.
Sziasztok,
Nem tudom megoldani azt, hogy csak akkor olvasson be egy karaktert az stdin-ről, ha van karakter, magyarul ne várjon a karakterre, ha nincs.
while (1) {
if (checkInput()) doInput();
if (checkTimer()) doTimer();
}nos azt hiszem, sikerült megoldanom a problémát:
void ???func(void *parm) {
pthread_mutex_lock(&mutex);
...
pthread_mutex_unlock(&mutex);
sched_yield();
return NULL;
}
int main(int argc, char **argv) {
pthread_t threadid, inputid;
char f;
f = 1;
while (1) {
pthread_mutex_lock(&mutex);
pthread_create(&threadid, NULL, threadfunc, NULL);
if (f) {
f = 0;
pthread_create(&inputid, NULL, inputfunc, NULL);
}
usleep(10);
pthread_mutex_unlock(&mutex);
pthread_join(threadid, NULL);
pthread_mutex_destroy(&mutex);
}
}ahol az inputfunc a doInput() és a threadfunc a doTimer()
Magyarul, két külön szálon fut a két funkció.
A program alapját a neten találtam, és egyenlőre fogalmam sincs, hogy a pthread_xxx-ek mit is csinálnak pontosan, de a program az elvárásoknak megfelelően működik.
-
alapz@j
tag
Viszont végre jól működik a program, mert az 'á' megjelent - még ha helytelen kódolással is - a feldolgozott sztringben
Egyébként ebből is látszik, hogy ez inkább konzol (terminál) probléma, mert a default 852 kódlappal ugyanaz az exe nálam is megeszi a szó eleji á-t. -
#68216320
törölt tag
-
alapz@j
tag
-
Ereshkigal
őstag

Elhittem én elsőre is. Csak leírtam, nálam mi volt a kínja. Fura. -
alapz@j
tag
Nálam is tökéletes volt, egy kivétellel: ha á-val kezdődött a szó, akkor azt levágta. Viszont ha belül volt az á, akkor nem bántotta.

-
Hani
aktív tag
-
Hani
aktív tag
1. nem lehet tudni mit ír ki, mert nem definiált működés
2. itt nem kell az L, akkor kellene esetleg ha műveleteket végzel vele ami túlcsordulhat
3. nem tudjuk ennyiből megállapítani
5. a C ilyen buta
+1. ha nem az eredetit akarod módosítani, akkor foglalj dinamikusan memóriát (malloc)buherton:

Köszönöm ezt is.
2. Akkor ezek szerint gyakorlati haszna is van.. akkor mindenképpen odaírom.
A scanf-nél mondjuk ha az lenne a feladat, hogy csak számokat olvashat be, akkor mit kéne tennem? Vagy ne használjam a scanf-et, hanem mondjuk while-lal addig kérjem be a dolgokat, amíg megfelelő inputot nem kapok?
mallocnak utánaolvasok azonnal.
-
Hani
aktív tag
1.
Ezt ne is próbáld megfejteni, mert unspecified az inkrement és dekrement kiértékelési sorrendje ilyen esetekben.2.
Nem szükséges az L, mert a fordító castolni fogja, de ajánlott, mert így szép.3.
Ilyenekkel ki lehet kergetni a világból
. Az elmúlt 4 évben egészen biztosan nem írtam le még gondolatban sem a scanf-t
.4.
Nincs különbség. Az utóbbit ajánlatos használni, mert nem típus, hanem a változó lehet pointer.5.
Lehet, mert az enum egy számot reprezentál, viszont nem ajánlatos íly módon használni, mert nagyon megtudja keverni az embert.+1.
Erre van egy uppercase vagy milyen standard függvény.Wow, ez gyors volt.
Az 1.-nél hasonló gondolatra jutottam én is, aztán negyed óra anyázás után szétszedtem külön átmeneti változókra, de azért izgatja a fantáziámat... ami könyvet meg fellapoztam, mind csak az egyszerűbb részeket mutogatta, ++i, i++, aztán annyi.2. Pöpec. Megcsinálni szívesen megcsinálom, ha így szokás, csak zavar, ha nem tudom az okát.
3. Mivel lehet akkor jól beolvasni a usertől mindenfélét? Illetve ha már itt vagyunk, akkor eszembe jut a getchar is, hogy a Jóistennek sem sikerül beolvastatnom vele egy Entert vagy Escape-et (mondjuk hogy arra kilépjen) - q-t igen, vagy más szép karaktert, de ezeket nem szereti.
4. Volt ennek valami furább verziója, talán int *const p / int const* p / const int* p / int const * const p, de ez is közben tisztázódik az órajárásos megoldással, szép lesz ez.
5. Kár, pedig szép lenne egy beépített szűrő
6. Utánakeresek akkor.
-
k.kristof
őstag
Az előző végén persze nem figyeltem és átváltoztatta nekem a [ i ] -jeimet (i)-re meg jó kis dőlt betűre, szóval az utolsó rész még egyszer:
static char copystr[255];
strcpy(copystr, string);while(string[ i ] !='\0')
{
//Csak a kisbetuket valtoztatjuk, a tobbi marad
if ( string[ i ] >= 'a' && string[ i ] <= 'z' )
copystr[ i ] = string[ i ]-32;
i++;
}
return copystr;
}illetve
char* upper_string3(char str[])
{
int i=0;while(str[ i ] !='\0')
{
if ( str[ i ] >= 'a' && str[ i ] <= 'z' )
str[ i ] = str[ i ]-32;
i++;
}
return str;
}Használd a programkód gombot, ha kódot akarsz beilleszteni.
-
Jester01
veterán
Uraim!
El vagyok keseredve.
Jó 10 év után újra elővettem a C-t, gyorsan átfutottam pár nap alatt az egészet és arra kellett rájönnöm, hogy valahol elhagytam az agyam, mert akkoriban még egész jól ment, most meg alapvető dolgokat nem értek. Persze az is lehet, hogy mindig is hülye voltam, csak akkoriban nem jöttek elő ezek a kérdések... nem tudom, mindenesetre segítséget kérek, mert magamtól nem megy és a google sem a barátom ezekben (és még egy rakás másban sem, de most ezek jutottak hirtelen eszembe):1. Van egy olyanom, hogy
int a = 1, b = 1, d = 1;
printf("%d, %d, %d", ++a + ++a + a++, a++ + ++b, ++d + d++ + a++);
Kérdés, hogy mit ír ki? A megoldás: 15, 4, 5. De miért?
2. Legyen egy long int-em:
long int li = 12345L;
Miért kell nekem az 12345 végére az L betű? A fordítónak jelzem, ha nem lenne elég, hogy odaírom, hogy long? Saját magamnak jelzem, nehogy elfelejtsem a típust? Egyéb?3. scanf és az ő filterezése.
Elvileg lehet olyat, hogy scanf("%[0-9a-fA-F]", &akarmi), hogy csak számokat és a-f / A-F karaktereket olvashasson be. Nekem mégsem megy, sem a komplementer változata ^0-9... verzióban. Mit rontok el?4. Pointeres változók.
Miben különbözik az int* i és az int *i ? Van egyáltalán bármi? Mondjuk ezt közben pont megtaláltam, miközben írtam, úgyhogy sztornó (a válasz itt)5. enum-ok.
Legyen két felsorolásom:
enum birds {SPARROW, PEACOCK=5, PARROT};
enum animals {TIGER = 8, LION, RABBIT, ZEBRA};enum birds m;
m = LION; //Ezt elvileg nem lehetne, de mégis lehet. Miért?
Szóval én eddig azt hittem, hogy ha van egy enum típusú változóm, akkor azokat az értékeket adhatom neki, amik a felsorolásban szerepelnek, de úgy tűnik, mégsem. Valahol elvesztettem a fonalat.+1. Nagybetűsíteni szeretnék egy stringet egy függvénnyel: megkapni paraméterben és visszaadni a nagybetűs verzióját. Erre több megoldás is lenne, de valahogy egyik sem az igazi:
- valamiért nem viszi a sima strupr()-t, ráadásul az az eredeti változót változtatja meg, ami nem oké. Csinálnék helyette egy másikat, de vagy kell hozzá globális változó, vagy nem ideális a memóriafelhasználás, vagy megváltoztatja az is az eredeti paramétert... Hogy kéne ezt normálisan?
Amikkel próbálkoztam, azok ezek:void upper_string(char *string)
//Ez már megy, de ez is megváltoztatja az eredeti paramétert, ugye.
{
while(*string)
{
if ( *string >= 'a' && *string <= 'z' )
*string = *string - 32;
string++;
}
}Lehetne olyan, hogy:
char* upper_string2(const char *string)
{
int i=0;/*
Namármost. Vagy definiálok egy globális char copystr[]=""; változót és annak a címét használom,
vagy definiálunk itt egy olyat, hogy char copystr[(strlen(string)]=""; , ami viszont lokális változó,
és nem jó ötlet lokális változó címét visszaadni a függvényen kívülre; vagy csinálunk egy static változót
itt helyben, aminek viszont méretet kell adni, amit nem lehet csak úgy strlen-nel. Én ezt az utóbbit választom, mondjuk 255-ös hosszal, de hát ez is milyen már.
*/static char copystr[255]; //Lehetne ez [65535] is akár.
strcpy(copystr, string);while(string [ i]!='\0')
{
//Csak a kisbetuket valtoztatjuk, a tobbi marad
if ( string(i) >= 'a' && string(i) <= 'z' )
copystr(i) = string(i)-32;
i++;
}
return copystr;
}Vagy lehetne simán ez is, de ez is megváltoztatja az eredeti változómat:
char* upper_string3(char str[])
{
int i=0;while(str(i) !='\0')
{
if ( str(i) >= 'a' && str(i) <= 'z' )
str(i) = str(i)-32;
i++;
}
return str;
}Szóval van baj, nem tudom, hogy mikorra állnak vissza a fejemben a dolgok, de elkelne egy kis segítség.
1. nem lehet tudni mit ír ki, mert nem definiált működés
2. itt nem kell az L, akkor kellene esetleg ha műveleteket végzel vele ami túlcsordulhat
3. nem tudjuk ennyiből megállapítani
5. a C ilyen buta
+1. ha nem az eredetit akarod módosítani, akkor foglalj dinamikusan memóriát (malloc)buherton:

-
Hani
aktív tag
Uraim!
El vagyok keseredve.
Jó 10 év után újra elővettem a C-t, gyorsan átfutottam pár nap alatt az egészet és arra kellett rájönnöm, hogy valahol elhagytam az agyam, mert akkoriban még egész jól ment, most meg alapvető dolgokat nem értek. Persze az is lehet, hogy mindig is hülye voltam, csak akkoriban nem jöttek elő ezek a kérdések... nem tudom, mindenesetre segítséget kérek, mert magamtól nem megy és a google sem a barátom ezekben (és még egy rakás másban sem, de most ezek jutottak hirtelen eszembe):1. Van egy olyanom, hogy
int a = 1, b = 1, d = 1;
printf("%d, %d, %d", ++a + ++a + a++, a++ + ++b, ++d + d++ + a++);
Kérdés, hogy mit ír ki? A megoldás: 15, 4, 5. De miért?
2. Legyen egy long int-em:
long int li = 12345L;
Miért kell nekem az 12345 végére az L betű? A fordítónak jelzem, ha nem lenne elég, hogy odaírom, hogy long? Saját magamnak jelzem, nehogy elfelejtsem a típust? Egyéb?3. scanf és az ő filterezése.
Elvileg lehet olyat, hogy scanf("%[0-9a-fA-F]", &akarmi), hogy csak számokat és a-f / A-F karaktereket olvashasson be. Nekem mégsem megy, sem a komplementer változata ^0-9... verzióban. Mit rontok el?4. Pointeres változók.
Miben különbözik az int* i és az int *i ? Van egyáltalán bármi? Mondjuk ezt közben pont megtaláltam, miközben írtam, úgyhogy sztornó (a válasz itt)5. enum-ok.
Legyen két felsorolásom:
enum birds {SPARROW, PEACOCK=5, PARROT};
enum animals {TIGER = 8, LION, RABBIT, ZEBRA};enum birds m;
m = LION; //Ezt elvileg nem lehetne, de mégis lehet. Miért?
Szóval én eddig azt hittem, hogy ha van egy enum típusú változóm, akkor azokat az értékeket adhatom neki, amik a felsorolásban szerepelnek, de úgy tűnik, mégsem. Valahol elvesztettem a fonalat.+1. Nagybetűsíteni szeretnék egy stringet egy függvénnyel: megkapni paraméterben és visszaadni a nagybetűs verzióját. Erre több megoldás is lenne, de valahogy egyik sem az igazi:
- valamiért nem viszi a sima strupr()-t, ráadásul az az eredeti változót változtatja meg, ami nem oké. Csinálnék helyette egy másikat, de vagy kell hozzá globális változó, vagy nem ideális a memóriafelhasználás, vagy megváltoztatja az is az eredeti paramétert... Hogy kéne ezt normálisan?
Amikkel próbálkoztam, azok ezek:void upper_string(char *string)
//Ez már megy, de ez is megváltoztatja az eredeti paramétert, ugye.
{
while(*string)
{
if ( *string >= 'a' && *string <= 'z' )
*string = *string - 32;
string++;
}
}Lehetne olyan, hogy:
char* upper_string2(const char *string)
{
int i=0;/*
Namármost. Vagy definiálok egy globális char copystr[]=""; változót és annak a címét használom,
vagy definiálunk itt egy olyat, hogy char copystr[(strlen(string)]=""; , ami viszont lokális változó,
és nem jó ötlet lokális változó címét visszaadni a függvényen kívülre; vagy csinálunk egy static változót
itt helyben, aminek viszont méretet kell adni, amit nem lehet csak úgy strlen-nel. Én ezt az utóbbit választom, mondjuk 255-ös hosszal, de hát ez is milyen már.
*/static char copystr[255]; //Lehetne ez [65535] is akár.
strcpy(copystr, string);while(string [ i]!='\0')
{
//Csak a kisbetuket valtoztatjuk, a tobbi marad
if ( string(i) >= 'a' && string(i) <= 'z' )
copystr(i) = string(i)-32;
i++;
}
return copystr;
}Vagy lehetne simán ez is, de ez is megváltoztatja az eredeti változómat:
char* upper_string3(char str[])
{
int i=0;while(str(i) !='\0')
{
if ( str(i) >= 'a' && str(i) <= 'z' )
str(i) = str(i)-32;
i++;
}
return str;
}Szóval van baj, nem tudom, hogy mikorra állnak vissza a fejemben a dolgok, de elkelne egy kis segítség.
Az előző végén persze nem figyeltem és átváltoztatta nekem a [ i ] -jeimet (i)-re meg jó kis dőlt betűre, szóval az utolsó rész még egyszer:
static char copystr[255];
strcpy(copystr, string);while(string[ i ] !='\0')
{
//Csak a kisbetuket valtoztatjuk, a tobbi marad
if ( string[ i ] >= 'a' && string[ i ] <= 'z' )
copystr[ i ] = string[ i ]-32;
i++;
}
return copystr;
}illetve
char* upper_string3(char str[])
{
int i=0;while(str[ i ] !='\0')
{
if ( str[ i ] >= 'a' && str[ i ] <= 'z' )
str[ i ] = str[ i ]-32;
i++;
}
return str;
} -
buherton
őstag
Uraim!
El vagyok keseredve.
Jó 10 év után újra elővettem a C-t, gyorsan átfutottam pár nap alatt az egészet és arra kellett rájönnöm, hogy valahol elhagytam az agyam, mert akkoriban még egész jól ment, most meg alapvető dolgokat nem értek. Persze az is lehet, hogy mindig is hülye voltam, csak akkoriban nem jöttek elő ezek a kérdések... nem tudom, mindenesetre segítséget kérek, mert magamtól nem megy és a google sem a barátom ezekben (és még egy rakás másban sem, de most ezek jutottak hirtelen eszembe):1. Van egy olyanom, hogy
int a = 1, b = 1, d = 1;
printf("%d, %d, %d", ++a + ++a + a++, a++ + ++b, ++d + d++ + a++);
Kérdés, hogy mit ír ki? A megoldás: 15, 4, 5. De miért?
2. Legyen egy long int-em:
long int li = 12345L;
Miért kell nekem az 12345 végére az L betű? A fordítónak jelzem, ha nem lenne elég, hogy odaírom, hogy long? Saját magamnak jelzem, nehogy elfelejtsem a típust? Egyéb?3. scanf és az ő filterezése.
Elvileg lehet olyat, hogy scanf("%[0-9a-fA-F]", &akarmi), hogy csak számokat és a-f / A-F karaktereket olvashasson be. Nekem mégsem megy, sem a komplementer változata ^0-9... verzióban. Mit rontok el?4. Pointeres változók.
Miben különbözik az int* i és az int *i ? Van egyáltalán bármi? Mondjuk ezt közben pont megtaláltam, miközben írtam, úgyhogy sztornó (a válasz itt)5. enum-ok.
Legyen két felsorolásom:
enum birds {SPARROW, PEACOCK=5, PARROT};
enum animals {TIGER = 8, LION, RABBIT, ZEBRA};enum birds m;
m = LION; //Ezt elvileg nem lehetne, de mégis lehet. Miért?
Szóval én eddig azt hittem, hogy ha van egy enum típusú változóm, akkor azokat az értékeket adhatom neki, amik a felsorolásban szerepelnek, de úgy tűnik, mégsem. Valahol elvesztettem a fonalat.+1. Nagybetűsíteni szeretnék egy stringet egy függvénnyel: megkapni paraméterben és visszaadni a nagybetűs verzióját. Erre több megoldás is lenne, de valahogy egyik sem az igazi:
- valamiért nem viszi a sima strupr()-t, ráadásul az az eredeti változót változtatja meg, ami nem oké. Csinálnék helyette egy másikat, de vagy kell hozzá globális változó, vagy nem ideális a memóriafelhasználás, vagy megváltoztatja az is az eredeti paramétert... Hogy kéne ezt normálisan?
Amikkel próbálkoztam, azok ezek:void upper_string(char *string)
//Ez már megy, de ez is megváltoztatja az eredeti paramétert, ugye.
{
while(*string)
{
if ( *string >= 'a' && *string <= 'z' )
*string = *string - 32;
string++;
}
}Lehetne olyan, hogy:
char* upper_string2(const char *string)
{
int i=0;/*
Namármost. Vagy definiálok egy globális char copystr[]=""; változót és annak a címét használom,
vagy definiálunk itt egy olyat, hogy char copystr[(strlen(string)]=""; , ami viszont lokális változó,
és nem jó ötlet lokális változó címét visszaadni a függvényen kívülre; vagy csinálunk egy static változót
itt helyben, aminek viszont méretet kell adni, amit nem lehet csak úgy strlen-nel. Én ezt az utóbbit választom, mondjuk 255-ös hosszal, de hát ez is milyen már.
*/static char copystr[255]; //Lehetne ez [65535] is akár.
strcpy(copystr, string);while(string [ i]!='\0')
{
//Csak a kisbetuket valtoztatjuk, a tobbi marad
if ( string(i) >= 'a' && string(i) <= 'z' )
copystr(i) = string(i)-32;
i++;
}
return copystr;
}Vagy lehetne simán ez is, de ez is megváltoztatja az eredeti változómat:
char* upper_string3(char str[])
{
int i=0;while(str(i) !='\0')
{
if ( str(i) >= 'a' && str(i) <= 'z' )
str(i) = str(i)-32;
i++;
}
return str;
}Szóval van baj, nem tudom, hogy mikorra állnak vissza a fejemben a dolgok, de elkelne egy kis segítség.
1.
Ezt ne is próbáld megfejteni, mert unspecified az inkrement és dekrement kiértékelési sorrendje ilyen esetekben.2.
Nem szükséges az L, mert a fordító castolni fogja, de ajánlott, mert így szép.3.
Ilyenekkel ki lehet kergetni a világból
. Az elmúlt 4 évben egészen biztosan nem írtam le még gondolatban sem a scanf-t
.4.
Nincs különbség. Az utóbbit ajánlatos használni, mert nem típus, hanem a változó lehet pointer.5.
Lehet, mert az enum egy számot reprezentál, viszont nem ajánlatos íly módon használni, mert nagyon megtudja keverni az embert.+1.
Erre van egy uppercase vagy milyen standard függvény. -
Hani
aktív tag
Uraim!
El vagyok keseredve.
Jó 10 év után újra elővettem a C-t, gyorsan átfutottam pár nap alatt az egészet és arra kellett rájönnöm, hogy valahol elhagytam az agyam, mert akkoriban még egész jól ment, most meg alapvető dolgokat nem értek. Persze az is lehet, hogy mindig is hülye voltam, csak akkoriban nem jöttek elő ezek a kérdések... nem tudom, mindenesetre segítséget kérek, mert magamtól nem megy és a google sem a barátom ezekben (és még egy rakás másban sem, de most ezek jutottak hirtelen eszembe):1. Van egy olyanom, hogy
int a = 1, b = 1, d = 1;
printf("%d, %d, %d", ++a + ++a + a++, a++ + ++b, ++d + d++ + a++);
Kérdés, hogy mit ír ki? A megoldás: 15, 4, 5. De miért?
2. Legyen egy long int-em:
long int li = 12345L;
Miért kell nekem az 12345 végére az L betű? A fordítónak jelzem, ha nem lenne elég, hogy odaírom, hogy long? Saját magamnak jelzem, nehogy elfelejtsem a típust? Egyéb?3. scanf és az ő filterezése.
Elvileg lehet olyat, hogy scanf("%[0-9a-fA-F]", &akarmi), hogy csak számokat és a-f / A-F karaktereket olvashasson be. Nekem mégsem megy, sem a komplementer változata ^0-9... verzióban. Mit rontok el?4. Pointeres változók.
Miben különbözik az int* i és az int *i ? Van egyáltalán bármi? Mondjuk ezt közben pont megtaláltam, miközben írtam, úgyhogy sztornó (a válasz itt)5. enum-ok.
Legyen két felsorolásom:
enum birds {SPARROW, PEACOCK=5, PARROT};
enum animals {TIGER = 8, LION, RABBIT, ZEBRA};enum birds m;
m = LION; //Ezt elvileg nem lehetne, de mégis lehet. Miért?
Szóval én eddig azt hittem, hogy ha van egy enum típusú változóm, akkor azokat az értékeket adhatom neki, amik a felsorolásban szerepelnek, de úgy tűnik, mégsem. Valahol elvesztettem a fonalat.+1. Nagybetűsíteni szeretnék egy stringet egy függvénnyel: megkapni paraméterben és visszaadni a nagybetűs verzióját. Erre több megoldás is lenne, de valahogy egyik sem az igazi:
- valamiért nem viszi a sima strupr()-t, ráadásul az az eredeti változót változtatja meg, ami nem oké. Csinálnék helyette egy másikat, de vagy kell hozzá globális változó, vagy nem ideális a memóriafelhasználás, vagy megváltoztatja az is az eredeti paramétert... Hogy kéne ezt normálisan?
Amikkel próbálkoztam, azok ezek:void upper_string(char *string)
//Ez már megy, de ez is megváltoztatja az eredeti paramétert, ugye.
{
while(*string)
{
if ( *string >= 'a' && *string <= 'z' )
*string = *string - 32;
string++;
}
}Lehetne olyan, hogy:
char* upper_string2(const char *string)
{
int i=0;/*
Namármost. Vagy definiálok egy globális char copystr[]=""; változót és annak a címét használom,
vagy definiálunk itt egy olyat, hogy char copystr[(strlen(string)]=""; , ami viszont lokális változó,
és nem jó ötlet lokális változó címét visszaadni a függvényen kívülre; vagy csinálunk egy static változót
itt helyben, aminek viszont méretet kell adni, amit nem lehet csak úgy strlen-nel. Én ezt az utóbbit választom, mondjuk 255-ös hosszal, de hát ez is milyen már.
*/static char copystr[255]; //Lehetne ez [65535] is akár.
strcpy(copystr, string);while(string [ i]!='\0')
{
//Csak a kisbetuket valtoztatjuk, a tobbi marad
if ( string(i) >= 'a' && string(i) <= 'z' )
copystr(i) = string(i)-32;
i++;
}
return copystr;
}Vagy lehetne simán ez is, de ez is megváltoztatja az eredeti változómat:
char* upper_string3(char str[])
{
int i=0;while(str(i) !='\0')
{
if ( str(i) >= 'a' && str(i) <= 'z' )
str(i) = str(i)-32;
i++;
}
return str;
}Szóval van baj, nem tudom, hogy mikorra állnak vissza a fejemben a dolgok, de elkelne egy kis segítség.
-
#68216320
törölt tag
Nálam is tökéletes volt, egy kivétellel: ha á-val kezdődött a szó, akkor azt levágta. Viszont ha belül volt az á, akkor nem bántotta.

Ezt tapasztaltam én is.
-
Ereshkigal
őstag
Új hozzászólás Aktív témák
-
5000 - 4901
6397 - 6001 6000 - 5901 5900 - 5801 5800 - 5701 5700 - 5601 5600 - 5501 5500 - 5401 5400 - 5301 5300 - 5201 5200 - 5101 5100 - 5001 5000 - 4901 4900 - 4801 4800 - 4701 4700 - 4601 4600 - 4501 4500 - 4401 4400 - 4301 4300 - 4201 4200 - 4101 4100 - 4001 4000 - 3901 3900 - 3801 3800 - 3701 3700 - 3601 3600 - 3501 3500 - 3401 3400 - 3301 3300 - 3201 3200 - 3101 3100 - 3001 3000 - 2901 2900 - 2801 2800 - 2701 2700 - 2601 2600 - 2501 2500 - 2401 2400 - 2301 2300 - 2201 2200 - 2101 2100 - 2001 2000 - 1
-
Fórumok
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Tabletek, E-bookok Nyomtatók, szkennerek PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Samsung Galaxy A52s 5G - jó S-tehetség
- Projektor topic
- Autós topik
- Vivo X200 Pro - a kétszázát!
- Lightyear - befektetési app
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Revolut
- Kamionok, fuvarozás, logisztika topik
- Speciális kiadású AMD-s alaplapot villantott az ASUS a 20 éves ROG-jubileumra
- Apple MacBook
- További aktív témák...
- 24 magos AMD Threadripper alapú munkára kiváló félgép, 128GB RAM-mal
- HP ZBook Fury 15 G7 i7-10850H 32GB 512GB SSD Quadro T2000 4GB FHD HUN bill, szép állapotban eladó
- Eladó MacBook Pro 16,1 2019 CTO
- új 0 km es garanciás lenovo loq rtx 5050 8gb
- Eladó teljesen újszerű karcmentes Samsung Galaxy Watch Ultra
- Lenovo ThinkPad X1 Nano Gen 1 2K kijelző / i7 / 1TB SSD / 1kg alatt
- AKCIÓ! MSI Z170A Krait Gaming 3X alaplap garanciával hibátlan működéssel
- Eladó új Lenovo ThinkBook 16 Ultra 5 225U 32GB DDR5 FHD+ Garancia
- BESZÁMÍTÁS! Asus ROG Strix RX 6600XT 8GB videókártya garanciával hibátlan működéssel
- BESZÁMÍTÁS! Gigabyte B450M R5 3600 16GB DDR4 512GB SSD GTX 1070 8GB Zalman S3 Chieftec 700W
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest



![;]](http://cdn.rios.hu/dl/s/v1.gif)
) vagy külön kell megírnom,bonyolult elmagyaráznom de hát a programozás is bonyolult,és ez fogott meg benne! 

Most minek tanulsz?


.
