Hogyan lehet c-ben kiszámoni, hogy hány nap telt el két dátum között (beépített függvények nélkül)?
"Valami olyan lenne a lényeg, hogy külön kéne bontani a pontok mentén, és utána számolni vele"
Igy van, ezt kell csinalni.
Nyilvan erdemes felvenni elotte, hogy melyik honap hany napos, illetve figyelni a szokoevekre.
Es te vagy valaki innen esetleg segitene, hogy nez ki pontosan ez a kodreszlet? Tettem emelt info erettsegit meg gimiben, de ott java-ban szerencsetlenkedtunk, es kb. mindegy volt hogy nez ki a kod vagy milyen fuggyvenyt hasznalunk, csak mukodjon, es eleve inkabb a tobbi reszet nyomattak nekunk, progibol az volt a lenyeg hogy kaparjunk ossze par pontot a beolvasassal. Most igyekszem igenyesebben csinalni, de mar elegge belekavarodtam.
Koszonom a valaszod egyebkent! :)
Lehet hogy a következő link segít neked.
#4: A gond az, hogy a feladatban C nyelvről van szó, és nem lehet használni semmilyen dátummal kapcsolatos segédfüggvényt, a dátumok között eltelt időt manuálisan kell kiszámolgatni.
A Javascriptben a Date objektum a dátumot az 1970 január 1. 00:00:00 óta eltelt ezredmásodpercek számában reprezentálja:
"Date objects contain a Number that represents milliseconds since 1 January 1970 UTC."
úgy persze könnyű vele számolni.
Ez egy lehetséges megoldás: [link]
Itt strtok() függvénnyel darabolom fel a stringet, utána unsigned short-ra alakítom és úgy számolok vele. Fordításkor van néhány warning, de amúgy jó, nagyjából...
Itt egy másik megoldás: [link]
Ha már a scanf-re megyünk rá...
Egyik sem validálja a formátumokat, tehát ha hülyeséget adsz meg neki, akkor hülyeség lesz a végeredmény is, vagy segfault. A te dolgod lesz ellenőrzéseket tenni bele.
Illetve még egy bug van mindkettőben, ugyanis a Wikipedia szerint: "Szökőévek a következők: minden néggyel osztható év, kivéve a százzal is oszthatókat. Szökőévek viszont a 400-zal osztható évek. Vagyis a századfordulók évei közül csak azok szökőévek, amelyek 400-zal is oszthatók."
Én ebből csak a 4-gyel való oszthatóságot ellenőrzöm, így nálam minden 4-gyel osztható év szökőév.
"Pointerek is belekavarnak"
Mondjuk ezt nem csodálom.
Itt az szokott lenni a probléma, hogy az ember nem tudja, mikor kell a címképző (&) operátor, és mikor nem.
Nézzük meg ezt a kódot:
#include <stdlib.h>
#include <stdio.h>
int main() {
char s[5];
scanf("%s", s);
printf("%s\n", s);
char *p = s;
scanf("%s", p);
printf("%s\n", s);
int i;
scanf("%d", &i);
printf("%d\n", i);
return 0;
}
Első esetben nincs &, második esetben sincs, harmadik esetben szintén van.
Miért nincs az első esetben dereferencia operátor? Azért, mert a tömb az eleve egy pointer!
Pontosabban ez nem teljesen igaz, de a gyakorlatban a tömbökkel nyugodtan lehet úgy bánni, mint ha pointerek lennének. Pontosan ezért működik ez:
char *p = s;
Még warningot sem kapsz rá, mert itt gyakorlatilag az egyik pointert adod értékül a másiknak, nincs típuseltérés.
És ez is: *(++p). Így az s-re mutató pointert növeltük eggyel, majd egy erre mutató pointert adtunk vissza. Ugyanaz, mint ez: s[1]
Az utolsónál pedig azért van &, mert a scanf pointert vár, a & pedig pointert ad vissza (jelen esetben az i-re mutató pointert).
"Scanf-el allitolag fel is lehet darabolni a pontok menten."
Igen, a scanf a formátumstring mentén darabol. Pl.:
#include <stdio.h>
int main () {
char str1[20];
printf("Enter name: ");
scanf("%20s", str1);
return 0;
}
Itt a formátumstring ez: "%19s"
Ez azt jelenti a scanf számára, hogy 20 karakterből álló stringet olvasson be. Bár engedni, hogy beírj neki többet is, de a 20-on felüli karaktereket eldobja, nem teszi bele str1-be.
Ha így adod meg:
int a, b, c, d;
scanf("%d.%d.%d.%d", &a, &b, &c, &d);
Akkor a scanf azt várja, hogy a beírt string úgy néz ki, hogy egy decimális szám, aztán egy pont, megint egy decimális szám, megint egy pont, és így tovább. Ha a megadott formátumban írod be a stringet, akkor az a, b, c, d változókba bekerülnek a megadott számok.
A második programomban, amit írtam, ez van:
scanf("%u.%u.%u.", &year2, &month2, &day2);
Ez azt jelenti a scanf számára, hogy következni fog egy unsigned int, egy pont, még egy unsigned int, még egy pont, végül megint egy unsigned int és megint egy pont. Ha ebben a formátumban adod meg a stringet, akkor a számok bekerülnek a year2, month2, day2 változókba.
További kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!