PDA

Prikaži potpunu verziju : Zasto nestaje 0 ?


nikolica0233
13.1.2013, 22:57
pozz svima... imam jedno pitanje :
zasto kad unesem broj naprimer 023 .. i kad zelim da ga prikazem, zasto mi nestane 0. Prikaze sam 23 ... evo neki prost konkretan program ...
#include<stdio.h>
main()
{
int n;
printf("broj: ");
scanf("%d",&n);
printf("\n");
printf("Broj koji ste uneli je : %d",n);
} ?
Hvala unapred

water wizard
13.1.2013, 23:08
ako ćeš nulu onda treba da bude string

voodoo_
13.1.2013, 23:25
Ili tako, ili ako znaš koliko cifara ima broj, onda navedeš koliko cifara mora obavezno biti ispisano, recimo

printf("Broj koji ste uneli je : %03d",n);

03 znači da će broj biti ispisan kao trocifren, a ako je manji od trocifrenog, biće dopunjen nulama s leve strane. Pa ako uneseš 023, biće ispisan tačno tako.

Lucic Nemanja
14.1.2013, 0:34
Sve je to kul, ali niste dali čoveku objašnjenje zašto se to dešava.
Elem, scanf prima sa ulaza niz karaktera, u tvom slučaju to je "023". Da bi to imalo ikakvog smisla moraš scanf funkciji reći koje formatiranje da koristi kako bi znala kako da interpretira taj ulaz. Ti si ovde koristio "%d" formatiranje. Ono niz karaktera sa ulaza pretvara u decimalni celobrojni tip i to radi tako što ignoriše sve nule i blanko znakove do prvog karaktera koji je broj različit od nule, a zatim čita sve karaktere (sada ne ignorišući nulu) dok ne naiđe na sledeći blanko znak. Ako se tu nađe neko "obično" slovo ili simbol mislim da će da pukne run-time error (za ovo nisam 100% siguran).
Kratko rečeno u n će da smesti broj 23 i posle kad štampa n jednostavno će da ispiše tu vrednost.
Samo ispisivanje nule neke celobrojne promenljive možeš da postigneš nekim naprednijim formatiranjima printf funkcije, kao što je voodoo napisao.
Gledano sa logičke strane, da li u pravom životu pišeš brojeve sa nulama ispred njih :D?

Primeri sa "%d" formatiranjem za scanf i printf:
ulaz: "023"
n = 23

ulaz: " 23 "
n = 23

ulaz: " 0 230 0"
n = 230

ulaz " as023 "
greška (opet napominjem nisam siguran, ako neko zna neka ispravi)

water wizard
14.1.2013, 0:51
prosto rečeno, ako neće da računa sa tim brojem, nego ga samo ispisuje na ekranu treba da ga stavi u string, ili ako izračuna a ispisuje rezultat u tekstu treba da konvertuje u string... niti ja znam C++, pola nisam ni razumeo šta je napisao :)
Sledeći korak provera unosa, da li je broj...

nikolica0233
14.1.2013, 1:28
hvala vam... :) imam jedan program... telefonski imenik ali ne radi, tj izbacuje gresku u 79 " a=getch();
redu koda : ... a kad OBRISEM taj deo koda onda ne radi

2 opcija koja pretrazuje imenik sa zadatim imenom od 3 slova...

pa ako mozete da mi pomognete... mnogo bi mi znacilo :)

http://www.sk.rs/forum/attachment.php?attachmentid=45218&stc=1&d=1358119600

enaB
14.1.2013, 2:25
ulaz: " 0 230 0"
n = 230


Neće biti, n=0, što je i logično. Šta ako neko baš hoće da unese samo nulu


@nikolica0233
izbacuje gresku u 79 " a=getch();
Stavi getchar()

nikolica0233
14.1.2013, 2:48
Hvala puno... a mozes da vidis zasto ne radi opcija koja poredi kriterijum za imenom... tj cita iz datoteke ime i poredi sa kriterijumom... po meni je to sasvim okej... a i nece da mi prikaze ceo imenik tj ispis celog imenika jos jednom hvallaa :)

enaB
14.1.2013, 2:58
Zato što obriše ekran odmah nakon što ispiše, ispremeštaj malo taj system("cls") ili ubaci još jedan getchar() tamo gde je jedan :)

nikolica0233
14.1.2013, 4:05
uradio sam to... ali i dalje mi ne radi 2 opcija :(

enaB
14.1.2013, 14:12
Meni radi :opanachke

Jel uneseš samo 2, bez ičega posle toga?
probaj sa char a[50],

gets(a);
ili
while ( getchar() != '\n' );

i to ubaci ispod

scanf("%d",&izbor);
i ispod
scanf("%s",&kriterijum);

a tamo gde je a=getchar() stavi samo getchar(), bez a=

Lucic Nemanja
14.1.2013, 14:13
Neće biti, n=0, što je i logično. Šta ako neko baš hoće da unese samo nulu


:boodala: Šta sam ja lupio!!! Treba me išamarati! :kreza:

nikolica0233
14.1.2013, 14:32
Meni radi :opanachke

Jel uneseš samo 2, bez ičega posle toga?
probaj sa char a[50],

gets(a);
ili
while ( getchar() != '\n' );

i to ubaci ispod

scanf("%d",&izbor);
i ispod
scanf("%s",&kriterijum);

a tamo gde je a=getchar() stavi samo getchar(), bez a=


Da... samo 2 bez icega.
Radi sada... ali ne radi dobro brlja program... nekad radi dobro nekad ne... zbog cega too :O
Mesa prezime i telfon... a i nece CEO imenik da prikaze nego mora da se stisne "ENTER" i jos neki broj... a ja bi ceo odmax da ga ispise...

enaB
14.1.2013, 15:27
Daj primer šta tačno unosiš kad ne radi dobro

nikolica0233
14.1.2013, 16:14
Sad radi 2. opcija Hvala... :)
Jao... ja sam zabroljao nesto u kodu... sad sve ispisuje.... :)
Imam jos 1 pitanje
za telefon... kada hocu da stavim 0 da bude prvi broj kao 023... moram da koristim gets(); zar ne ?
stavim ovo
gets(brojTel);
while ( getchar() != '\n' );
i opet necee da sacuva ... naprimer : 023 531196 ... nego samo 23 531196

enaB
14.1.2013, 17:09
Pogledaj još kako si to pisao, ja sam probao i nemam takav problem sa nulama i gets

nikolica0233
14.1.2013, 18:11
pa kako... mora da ide sa gets(); ... sa scanf nemoze da zapamti PRVU 0... ako me razumes...
radi sve... samo nece 0 da zapamti... i stavim gets funk ali i dalje ne cita 0 : (

enaB
14.1.2013, 18:56
Prvo, ako je gets onda ne može int brojTel, nego char brojTel[15]
Umesto scanf("%d",&brojTel); onda ide gets(brojTel); ili scanf("%s", brojTel);
a svuda tamo gde si u fprintf, printf, i fscanf pisao %d za brojTel ide %s.
Za telefon može da se piše bilo šta, ali mora da bude spojeno (023/12-34-567)

Probaj pa javi

nikolica0233
14.1.2013, 19:23
evo ovako sam napisao...
char brojTel[10];
...
gets(brojTel);
while ( getchar() != '\n' );...


za upis u dadoteku mi ide ovaj kod
fprintf(f,"%s %s %s %s %d %d\n",ime,prezime,brojTel,adresa,broj1,broj2); - ovako kada stavim ne upamti mi broj telefona u datoteku...



evo ti ceo kod... msm da ce ti biti lakse ovako

enaB
14.1.2013, 19:26
Na tri mesta nisi promenio %d u %s za brojTel, pogledaj bolje

while ( getchar() != '\n' ); ne treba ispod gets(), premesti ga ispod scanf("%s",&prezime);

nikolica0233
14.1.2013, 19:58
Da... nisam video ta 3 :o ... ali sad opet nesto ne radi kako treba... pazi kako ispisuje na ekranu




a gle kako pise u dadoteci... "pera petrovic 023544253 knez mihajlova 11 18 " tu je smestio kako treba

enaB
14.1.2013, 20:40
Ni u adresi ne sme da bude razmaka ako ga kasnije čitaš sa %s. Probaj kao knez_mihajlova

nikolica0233
14.1.2013, 21:40
ne kontam... pa sve sam izmenio %d u %s ...

enaB
14.1.2013, 21:58
Ti sa tastature to prihvataš sa gets(), i to pokupi ceo red i upiše u fajl, ali ako kasnije to iščitavaš iz fajla sa %s ono će da pročita samo prvu reč do razmaka, samo "knez", a "mihajlova" ostaje da pročita u sledećem prolazu, u tome mislim da je problem. Probaj samo da upišeš ulicu bez razmaka, kao "knez_mihajlova" pa vidi da li će se problem ponoviti.
Ništa što čitaš sa %s ne sme da ima razmak, ni telefon, ni adresa.

nikolica0233
15.1.2013, 0:48
Jeste ... mora zajedno... a kako znam bio sam napravio da radi sa 2 reci ... al ga nisam sacuvao


a da probam posebno da samo adresu upisem sa fputs(); ?

nikolica0233
15.1.2013, 2:50
a i imam jos jedno pitanje... zbog cega ide
scanf("%d",&izbor);
while ( getchar() != '\n' ); zar ne ide while ( getchar() != '\n' ); posle gets(); funkcije ako dalje u programu imamo scanf

enaB
15.1.2013, 2:51
Kako god hoćeš :kreza: Ako se ne varam mogao si i sa strukturom da izvedeš, npr.

typedef struct korisnik {
char ime[10];
char prezime[15];
char telefon[15];
char adresa[40];
} Korisnik;

i tako u kompletu da se upisuje/iščitava iz binarnog fajla.

A može i sa fputs / fgets, adresa u odvojenom redu i onda nema problema sa razmacima


a i imam jos jedno pitanje... zbog cega ide
scanf("%d",&izbor);
while ( getchar() != '\n' ); zar ne ide while ( getchar() != '\n' ); posle gets(); funkcije ako dalje u programu imamo scanf
gets funkcija sama pokupi sve što si pisao do kraja reda, a scanf pročita broj, a sve nakon toga šta god da je eventualno pisano ostavlja da bude pročitano sledeći put kad ne treba

nikolica0233
15.1.2013, 3:06
da, ali i dalje mi nije jasno zasto si mi reko da stavim ispod posle scanf-a... za to te pitam :)

enaB
15.1.2013, 3:24
Ti probaj kako misliš da treba, pa ako i tako radi dobro - OK :)

Evo ti za demonstraciju

int a; char b;
scanf("%d", &a);
b=getchar();
printf("%d\n", b);

Čak i da uneseš samo broj i ništa nakon toga, getchar će da pročita zaostali '\n', neće čekati da pritisneš enter

http://www.asciitable.com/index/asciifull.gif

nikolica0233
15.1.2013, 11:28
stalno bilo koji broj da ubacim izbaci mi 10 na kraju... to je max broj slova sto moze da proxvati.. ?

enaB
15.1.2013, 12:41
Nije bre, pogledaj u tabelu