|
[ Target1 @ 04.10.2006. 09:42 ] @
| Pozdrav svima!
Pitanje
Kad pokrenem program C++ V.5.02 sve radi do momenta kad uđem u DOS i upišem dva broja( najjednostavnije računanje)
izbaci me iz DOS-a i piše mi program terminated.
Imam windows XP home
Što savjetujete?
TNX
|
[ X Files @ 04.10.2006. 15:16 ] @
Moraš dati taj kod da vidimo šta nije u redu.
[ Target1 @ 04.10.2006. 18:15 ] @
Kod je jako jednostavan ,tim više mi nije jasno zasto ga nece izvrsiti..
Code: #include <stdio.h>
#include <math.h>
main()
{
int a,b;
float h,o,p;
printf("Upisi vrijednosti katete jedan i katete 2 - brojeve odvoji zarezom !!\n");
scanf("%d,%d",&a,&b);
h=sqrt(a*a+b*b);
p=(a*b)/2;
o=a+b+h;
printf("Povrsina trokuta je %d . \n Opseg trokuta je %d . \n Hipotenuza je %d .",p,o,h);
}
[ android~paranoid @ 04.10.2006. 20:13 ] @
Ne znam koji kompajler koristis, ali ovo kod mene prodje
bez obzira na greske u programu.
main treba da vrati neku vrednost pa mozes
na kraju main f-je da napises retrun 0;
ili
umesto main() napises void main(void)
Kod prikaza promenjivih ne treba da stavis %d konverziju
nego %f.
Ovako:
printf("Povrsina trokuta je %f . \n Opseg trokuta je %f . \n Hipotenuza je %f .",p,o,h);
Ispravi ovo pa javi.
[ X Files @ 04.10.2006. 20:48 ] @
Citat:
umesto main() napises void main(void)
void main(void)
... po novom standardu nije dozvoljeno, iako će ga kompajleri
bez problema progutati.
main() treba uvek da vrati int (return NEŠTO), a argumente može
imati po potrebi.
[ android~paranoid @ 04.10.2006. 20:55 ] @
void main(void)
Ovako je u C-u moralo ranije, tek C++ je uveo tu mogucnost da se ne pise a da vrati vrednost.
[ SuPeR_MaSteR @ 04.10.2006. 21:42 ] @
Greska je u ovom delu koda:
Code:
scanf("%d,%d",&a,&b);
Sem konverzija nemoj da stavljas nista za argument scanf funkcije, svaki kompajleri razlicitu odreaguju .. ja koristim Dev C++ i on ignorise ovu gresku,ucita samo jednu varijablu a drugu ignorise,a eto vidis kod tebe terminise program..
Inace po konvenciji main funkcija treba uvek da vraca neku vrednost, ali nije problem ako izostavis to,pojavice se samo upozorenje ali program se izvrsava normalno.
[ yooyo @ 05.10.2006. 08:36 ] @
Code: printf("Povrsina trokuta je %d . \n Opseg trokuta je %d . \n Hipotenuza je %d .",p,o,h);
zameni sa
Code: printf("Povrsina trokuta je %f . \n Opseg trokuta je %f . \n Hipotenuza je %f .",p,o,h);
jer su p, o, i h float tipa a ne int.
[ Target1 @ 05.10.2006. 09:04 ] @
Code: scanf("%d,%d",&a,&b); Ukoliko stavim ovaj kod,program mi se pokrene.
Code: scanf("%d %d",&a &b); Ako stavim ovaj kod,ne zeli mi se pokrenit.
Code: printf("Povrsina trokuta je %f . \n Opseg trokuta je %f . \n Hipotenuza je %f .",p,o,h); Hvala,to sam ispravio cim sam kopirao kod na forum :)
Ako stavim onaj prvi kod,program se pokrene,ali cim upisem vrijednosti a i b te stisnem enter,program se prekine i pise "Process Terminated".
[ yooyo @ 05.10.2006. 12:56 ] @
Code: scanf("%d,%d", &a, &b);
prihvata samo ovakav input:
123,456
nece raditi ako ukucas:
123 456 ili 123, 456
Najsigurnije je da uradis na sledeci nacin:
Code:
int ret;
ret = scanf(" %d , %d", &a, &b); // obrati paznju na razmake u format stringu
if (ret != 2)
{
printf("Ulaz nije ispravan");
return;
}
Funkcija scanf vraca ukupan broj uspesno procitanih formata. U tvom slucaju, treba da vrati 2 uspesno procitana int-a.
Takodje... scanf format string je prilicno mocan i treba malo procitati dokumentaciju kako da ga najbolje iskoristis.
Npr. " %d , %d" znaci... preskoci sve white space (koliko god ih ima), procitaj int, preskoci white space (koliko god ih ima), procitaj zarez (,) , preskoci white space (koliko god ih ima) i procitaj int.
yooyo
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|