|
[ [Unknown] @ 26.01.2005. 02:55 ] @
| Ja sam apsolutni pocetnik sto se tice C jezika, i malo se igram s njime pa me bih vas molio ako imate malo vremena da mi pomognete...
Sto napraviti u ovom kodu da kad me pita da unesem prvi broj, a ja unesem slova, da izbaci neki tekst s upozorenjem da se mogu samo brojevi unosit... ne obazirite se na ove passworde i te gluposti, to malo vjezbam if :-)
...kao sto sam vec reko totalni sam pocetnik pa imajte strpljenja ako vas bas odmah ne skuzim...
Puno hvala!
Code:
#include <stdio.h>
int main()
{
int password,prvi,drugi,umnozak;
printf("Unesite lozinku da biste usli dalje u program\n");
printf("\nLozinka: ");
scanf("%d",&password);
if ( password == 2005 )
{
printf("\nUnesite prvi broj: ");
scanf("%d",&prvi);
printf("\nUnesite drugi broj: " );
scanf("%d",&drugi);
umnozak=prvi*drugi;
printf("\nUmnozak ta dva broja je %d",umnozak);
} else {
printf("\nLozinka netocna!");
}
getch();
}
|
[ Reljam @ 26.01.2005. 06:11 ] @
Nazalost, naleteo si na oblast u kojoj je C standardna biblioteka tanka - ne postoji lak nacin da se uradi to sto ti hoces. Ono sto bi morao da uradis je da svaki broj tretiras kao string, i da onda rucno pogledas da li je unet string u stvari broj. A ako nije, onda izbacis poruku o gresci - sto je nazalost netrivijalan kod.
C je star jezik, a C standardna biblioteka je vrlo zastarela. To ne znaci da ne vredi uciti C, ali treba da znas da ce neke stvari koje treba da budu lake biti mnogo teze nego sto ima smisla. Samo nastavi, i pazi se ovakvih gluposti.
A kad smo vec kod toga, to sto si trazio izgleda ovako nekako (varijanta za pozitivne brojeve. Citaocu se ostavlja kao vebza da izvede kod koji podrzava i negativne brojeve):
Code:
#include <conio.h>
#include <stdio.h>
int ReadInt()
{
char buffer[20];
int i;
int uspeh = 0;
while( !uspeh )
{
scanf("%s", buffer); /* Zanemarimo neverovatnu rupu u ovom redu :) */
uspeh = 1;
for ( i = 0; i < sizeof(buffer) && buffer[i] ; i++ )
{
if ( !isdigit( buffer[i] ) )
{
uspeh = 0;
puts("Greska! Unet string nije broj!");
break;
}
}
}
return atoi( buffer );
}
[ zvrba @ 26.01.2005. 08:59 ] @
Citat: Reljam
C je star jezik, a C standardna biblioteka je vrlo zastarela. To ne znaci da ne vredi uciti C, ali treba da znas da ce neke stvari koje treba da budu lake biti mnogo teze nego sto ima smisla. Samo nastavi, i pazi se ovakvih gluposti.
Nije manjkav nego ga treba dobro upoznati i znat upotrijebit :) Zakomplicirao si ga bespotrebno. Dakle:
Code:
long enter_number(void)
{
char buf[256], *eptr;
long l;
if(!fgets(buf, sizeof(buf), stdin)) {
/* korisnik je odustao pa se desio EOF.. handlaj kako hoces */
} else {
l = strtol(buf, &eptr, 10);
if(*eptr) {
/*
korisnik je unio nesto sto nije poz/neg broj u bazi 10 ili string sadrzi
jos neke znakove iza broja
*/
}
return l;
}
}
[ 3MAJ86 @ 26.01.2005. 10:18 ] @
@ Unknown:
slichnu stvar sam i ja sam sebi postavljao pre par meseci kada sam pochinjao da uchim c. tada sam se dosetio i pocheo da pravim svoju biblioteku funkcija (koja trenutno sadrzhi cele dve funkcije :) ) a jedna od njih je "chkint" kako sam je krstio. ova funkcija proverava da li je uneti string integer broj. i proverava da li je na svakom mestu stringa broj (znachi ako korisnik unese 123456 on tje da proveri svaki od ovih da li je broj tako da automatski izbacuje sve tipa: h123456 ili 123h456 ili 123456h gde je h == neko slovo ili neki drugi znak) a u programu mozhesh da je upotrebish ovako recimo
Code:
.....
while (1) {
gets(ulaz);
if (!(chkint(ulaz))) {
fprintf(stderr, "Greshka...");
continue;
}
n = atoi(ulaz);
break;
}
uz malo izmene ovu funkciju mozhesh prepraviti, a ako hotjesh poslatju ti na mail moju malu biblioteku gde se nalazi ova funkcija? mislim da je strashno korisna - meni je mnogo puta ushtedela brdo truda i piskaranja
[ [Unknown] @ 26.01.2005. 18:14 ] @
Hvala vam svima na odgovrima. Ipak jos moram dosta uciti da bi razumio sto sve sto ste vi napisali, bas ne razumijem sve funkcije... kad naucim malo bolje onda cu probat ovo sto vi (Reljam i zvrba) kazete
@3MAJ86
ovo tvoje mi se cini zanimljivim, pa ajde molim te posalji na [email protected] da probam...
[ obranko @ 27.01.2005. 00:45 ] @
pozdrav,
mnogo ste zakomplikovali oko prostih stvari.
evo kratkog citata iz opisa scanf funkcije.
"Return Value.
The number of items succesfully read. This count doesn't include any ignored fields with asterisks (*).
If EOF is returned an error has occurred before the first assignation could be done."
prema tome. dovoljno je da proveris sta ti scanf funkicja vraca. ako vrati 1, to je znak da je korisnik uneo ono sto se trazilo (jedan integer).
[ Reljam @ 27.01.2005. 01:09 ] @
Nismo ga mi toliko zakomplikovali koliko scanf ne radi to sto ti hoces. Naime, ako ovako scanf("%d", &i); necemu otkucas 1peramikalazaHahaha, vrednost od i ce biti 1, a on ce ti vratiti da je isprocesirao jedno polje. To je mozda tako, ali to ocigledno nije ono sto bi covek hteo, a to je poruka o gresci. Dakle, scanf ne resava problem.
I dalje stojim pored tvrdnje da je sve ovo komplikovanije nego sto treba da bude.
[ vladab @ 27.01.2005. 07:01 ] @
Slazem se sa Reljam. Preporucio bih [Unknown]-u da nauci C, ali da se ne zadrzava na njemu previse, vec da kad savlada osnove C-a predje na C++.
[ yuColoniel @ 27.01.2005. 07:34 ] @
Tu postoji nekoliko lepsih resenja
Na primer uneses string i u petlji prodjes kroz string i pitas sa isdigit(s) da li je u pitanju broj (za sve znake sem zadnjeg koji je /0) (funkcija se nalazi u standardnom zaglavlju <ctype.h>) pa ako su sve brojevi iskoristis funkciju atoi(s) za int atof(s) za double i atol(s) za long (ove funkcije se nalaze u standardnom zaglavlju <stdlib.h> i pretvaraju string u navedene tipove) za realne brojeve moras da proveris da li postoji i tacka i nju nebi smeo da diras i to bi bilo ono
if (alfa && '.') continue
else break;
Ovo bi trebalo da radi bez problema .I nedaj se obeshrabriti u ucenju C-a jer samo covek koji se ozbiljno ne bavi programiranjem moze ti preporuciti da samo malo prodjes c pa predjes na c++ jer veruj mi ima rutina koje postoje u c-u i predstavljaju mnogoelegantnije resenje za mnoge probleme u c++-u.Da c nevalja nebi svaki prevodioc c++-a posedovao sve standardne biblioteke c-a.
[ 3MAJ86 @ 27.01.2005. 08:49 ] @
bash tako. poslao sam mu na mail moje zaglavlje. ona moja funkcija radi upravo to shto si napisao.
ushtedi dosta truda kada imash tako neshto zapisano jednom za svagda, jer zaista je chest sluchaj greshke prilikom unosa brojeva.
jedino shto je mana ove moje funkcije je shto radi samo za int. (ali meni nije trebalo za sada za ostale tipove, ali i to se da lako napraviti)
tezhnja ka jednostavnosti zar ne?
[ vladab @ 27.01.2005. 09:30 ] @
Citat: yuColoniel:I nedaj se obeshrabriti u ucenju C-a jer samo covek koji se ozbiljno ne bavi programiranjem moze ti preporuciti da samo malo prodjes c pa predjes na c++ jer veruj mi ima rutina koje postoje u c-u i predstavljaju mnogoelegantnije resenje za mnoge probleme u c++-u.Da c nevalja nebi svaki prevodioc c++-a posedovao sve standardne biblioteke c-a.
U pravu si kada kazes da se ozbiljno ne bavim programiranjem. Rekao sam da predje na C++ iz prostog razloga sto je C++ noviji (da li je bolji necemo da raspravljamo  ), a opet podrzava c kod, pa moze koristiti prednosti oba. I nisam rekao da c ne valja, nego sam se slozio sa Reljam da ima zastarele biblioteke. Postoji jos jedna stvar, koju ce mi mnogi osporiti: Kada dobro naucis C, onda ne mozes bas lako da se oslobodis nekih stvari koje u C++-u mogu da se odrade na elegantniji nacin, jer ipak je c++ objektno orijentisan, a c nije...  E, sad, ako mislis da ti C bude glavni jezik u kome ces da radis i neces da radis OOP, onda si 100% u pravu. 
Pozdrav
[ Riste Pejov @ 28.01.2005. 10:04 ] @
Citat: vladab: Postoji jos jedna stvar, koju ce mi mnogi osporiti: Kada dobro naucis C, onda ne mozes bas lako da se oslobodis nekih stvari koje u C++-u mogu da se odrade na elegantniji nacin, jer ipak je c++ objektno orijentisan, a c nije... :) E, sad, ako mislis da ti C bude glavni jezik u kome ces da radis i neces da radis OOP, onda si 100% u pravu. :)
Pozdrav
Evo da ja budem prvi koji ce ti to osporiti ... Zasto se neko mora osloniti na standardne C biblioteke? Evo recimo Gnomov glib implementira puno standardnih struktura, liste, stringove i sta li jos ne, i Gnome arhitektura _je_ objektno orientisana (prema nekom jest, prema nekom nije), tako da Gnome ti je prvi dokaz da se u C moze programirati objektno. E sada, objektno programiranje u C i u C++ je kao bog i sesirdzija, ali nije nemoguce. Kao sto u C++ mozes pisati ne-oop kod, tako u C mozes pisati kvazi oop kod. GLib ti moze pomoci da u C dobijes jako produktivnu razvojnu okolinu, koja mozda nije ravna C++/STL/Boost, ali je daleko produktivnija nego standardne C biblioteke.
[ vladab @ 30.01.2005. 11:47 ] @
Naravno da mozes da pises oo kod i u c-u. Koliko ja znam, postoji i objektni C, ili neka biblioteka koja implementira klase i sl. Razlika izmedju OOP-a i struktiriranog programiranja nije u jeziku, vec u filozofiji programiranja. Poenta je u tome da je C++ pravljen da DIREKTNO podrzava OOP, a C nije, a ti uvek mozes da koristis filozofiju koja je tebi bliza u oba ova jezika, samo je pitanje gde ces se vise namuciti. :O)
[ leka @ 30.01.2005. 16:36 ] @
Bez uvrede, ali se meni Reljin kod jako dopada - obozavam citak kod... - Taj kod se cita+razume onako, "u letu" sto bi se reklo. :)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|