Hirdetés
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- Luck Dragon: Asszociációs játék. :)
- norbx: Számítógép.hu
- Luck Dragon: Alza kuponok – aktuális kedvezmények, tippek és tapasztalatok (külön igényre)
- bobalazs: Microsoft Copilot és hasonló hülyeségek egyszerű kigyomlálása /örök megoldás/
- Lalikiraly: A nagy ő! Stohl...
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- sziku69: Fűzzük össze a szavakat :)
- Parci: Milyen mosógépet vegyek?
- Meggyi001: Hasznos helyek és tippek Párizsban, amiket jó eséllyel keresni is fogsz...
Új hozzászólás Aktív témák
-
dudika10
veterán
válasz
Geresics
#3889
üzenetére
#include <stdio.h>
#include <string.h>
void beolvas(char * szoveg)
{
printf("Adjon meg egy max. 70 karakter hosszu szoveget, majd usson ENTER-t!\n");
gets(szoveg);
return;
}
int szamlalas(char *szoveg)
{
int db=0;
int i=0;
while (szoveg[i]!='\0' && szoveg[i]!='.')
{
if (szoveg[i]==' ')
db++;
i++;
}
return db;
}
int main()
{
char szoveg[71];
int db;
beolvas(szoveg);
db=szamlalas(szoveg);
printf("A szoveg: %s, szavak szama: %d\n", szoveg, db);
return 0;
}Így jó.
A while ciklusod végtelenciklusba kerülne, nem logikai vagy, hanem és kapcsolat kell. Ha bármelyik megtörténik egyből ki kell lépni.
Láthatod azt is, hogy sztringet hogy kell átadni a függvénynek, és azt is, hogy a vissszatérési értéket hogyan kell használni.
Felhívnám a figyelmed az int db=0; és int i=0; sorokra. A deklarált változók memóriaszemetet tartalmaznak mindaddig, amíg értéket nem adsz nekik. Lehet, hogy az i-ben például a 2341 volt tárolva pont, és akkor úgy kezded, hogy a 71 lefoglalt bájtodból a 2341-ediket akarod olvasni, ahol lehet, hogy éppen az operációsrendszer dolgozik. Ezt nem szabad, ezért a fordító figyelmeztet, hogy adj értéket használat előtt.Remélem senki nem fogja leharapni ezért a fejem, de a BME VIK villamosmérnök hallgatók első féléves tárgya a C, és ebben a félévben nagyszerű diasort állítottak össze az oktatók.
[link]
Van gyakorlati anyag, elméleti anyag, rengeteg példa.
-
dudika10
veterán
válasz
Geresics
#3886
üzenetére
(#3885) tototos: a kettő közül az egyik kell csak, persze.

A szöveg pointerként adódik át, mivel tömb neve [] nélkül mindig pointer.(#3886) geresics:Ha mutatót akarsz átadni, akkor (int *db) igen.
Viszont ekor a main-ben &db-t kell átadni.
int db;
Ekkor a db egy változó, &db a címe.
int * db;
Ekkor *db a változó, db a memóriacím.Ha int *db; -t írsz, akkor amikor értéket akarsz adni, akkor *db= ; kell.
Ha csak db= ; -t írnál, akkor a mutatót írnád át, és elveszítenéd az értéket.Amíg csak egy értéket akarsz visszaadni a függvénnyel, addig használd a visszatérési értéket. Ezt például a rekurzióhoz muszáj tudni kezelni, a rekurzió pedig gyakran ügyes kis trükk tud lenni.

(#3887) tototos: Ezzel nem is foglalkoztam még, de teljesen igazad van, kell neki a szöveg.
Globális változókról nekünk azt tanították, hogy amíg lehet kerüljük.(#3889) geresics : az i-nek adni kell egy kezdőértéket. Ha for ciklust használsz, akkor az for (i=0; ... értékadás is egyben. De mivel while ciklust használsz, ezért nincs ilyen értékadás, és az i jelenleg memóriaszemét.
A deklaráció után írj egy =0-t.
int i=0; -
dudika10
veterán
válasz
Geresics
#3883
üzenetére
Egy függvény nem dolgozik a változóidon.
Másolatokat készít róluk.
Így ha a darab változódba beírod az 5-öt, és átadod egy függvénynek, akkor a függvény csinál ezzel valamit, átírja 6-ra, majd visszatér.
De mivel a függvény csak egy másolaton dolgozik, ezért a változóddal nem történik semmi.Erre találták ki a pointereket és/vagy globális változókat. Előbbit ajánlanám.
Pointerek segítségével átadhatod a memóriacímet, és így a függvény oda fogja írni.
Amíg csak 1 darab értéket kell módosítani a függvénynek, addig használhatod a visszatérési értékét.
Ha nem void ... a függvény, hanem int ... akkor a return darab; azt fogja eredményezni, hogy a darab értékét a függvény visszaadja.Pl.: int szamlalas ()
...
return db;
}és meghívásnál pedig:
db=szamlalas(db);Remélem érthető nagyjából és nem írtam semmi hülyeséget.
-
dudika10
veterán
válasz
Jester01
#3786
üzenetére
Erre jutottam én is, de mivel abszolút kezdő vagyok, ezért úgy gondoltam, hogy valamiről biztosan nem tudok.
Ez a sor helyezi el az adatokat:
fprintf(f1, "%s\n%s\n%s\n%d\n%d\n", shop, company, type, price, month);Van soremelés, de mégsem működik.
Lehetséges, hogy csak a wordpad nyitja meg rosszul?
Ez a sor olvassa be a fileból az adatokat:
fscanf(textF1,"%s%s%s%d%d", &u.shop, &u.company, &u.type, &u.price, &u.month)Ez viszont remekül működik akkor is, ha az első eset áll fenn, tehát egy sorban egymásra csúszik a két adat, és szerintem ekkor ennek nem kéne működnie.
-
dudika10
veterán
Üdv!
Nagyon egyszerű kérdésem volna.
Van egy file, és szeretnék bele új szöveget írni.
Két dolgot próbáltam:
fprintf(f1, "%s....Így a végeredmény az, hogy az utolsó sorba írja:
...
fileredetitartalmaújszövegHa pedig így próbálom:
fprintf(f1, "\n%s....
Akkor pedig kihagy egy sort:...
fileredetitartalmaújszöveg
Na már most nekem a kettő közötti állapot kéne:
fileredeti tartalma
újszövegNa és akkor a kérdés:
Mivel tudom a következő sorra ugrasztani a kurzort?
Új hozzászólás Aktív témák
Hirdetés
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- ÚJ SteelSeries Arctis Nova 5P Bolti ár:50k INGYEN FOXPOST
- Szép ThinkPad Edge.15,6",FullHD IPS,Core i7 (8X3,3Ghz)GT740 2/4GB VGA,8/16GB RAM,256-512SSD,JÓ akku,
- Szinte ÚJ SteelSeries Tusq Gaming Bolti ár:25k INGYEN FOXPOST
- ELADÓ Yaesu FT-70DE-B2 C4FM/FM VHF/UHF kétsávos kézi adóvevő
- Apple iPhone SE (2020) - 64 GB - fekete (249) Újszerű, 10000.- Ft ajándék kiegészítőkre, gar
- BESZÁMÍTÁS! ASRock X870 R9 7950X3D 32GB DDR5 1TB SSD RTX 4090 24GB Be quiet Pure Base 501 LX white
- GYÖNYÖRŰ iPhone 13 Mini 128GB Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS4185
- LG 34WQ75X-B - 34" Ívelt IPS Panel - 3440x1440 2K QHD - 60Hz 5ms - FreeSync - USB Type-C 90W
- Apple iPhone 15 Pro Max 256 GB White Titanium 1 év Garancia Beszámítás Házhozszállítás
- VeryBig! Akciós! Dell Precision 7760 i7-11850H 32GB 512GB SSD RTX A5000 16GB 17" FHD 1 év garancia
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Central PC számítógép és laptop szerviz - Pécs
Város: Pécs





