|
| input? Fra : Martin |
Dato : 15-08-04 15:50 |
|
Jeg har et brudstykke, stump kode i TurboC++, hvor hvis f1 er mindre end 0
skal hoppe ud af løkken men den ignorerer den fuldstændig og udfører opgaven
på tallet. Ellers virker al koden og compileren siger success.
Double f1;
int main(void)
{
do
{
cprintf("Indtast et tal: ");
iu[0]=getch();
cprintf("%c",iu[ind]);
flushall();
while((iu[ind]>=46)&&(iu[ind]<=59))
{
ind++;
iu[ind]=getch();
cprintf("%c",iu[ind]);
}
f1 = atof(iu);
value = strlen(iu);
value = value-1;
flushall();
if (f1<0&&f1>=0.01) // Den her linie bliver ikke udført
{ gotoxy(e,s+15);
strcpy(q5,"fejl");
cprintf("%.3c er ikke en g'ldende v'rdi",f1);
break;
}
.....
| |
Christoffer Olsen (15-08-2004)
| Kommentar Fra : Christoffer Olsen |
Dato : 15-08-04 15:57 |
|
"Martin" <mf_NO_Spima@digginet.dk> writes:
> if (f1<0&&f1>=0.01) // Den her linie bliver ikke udført
Det der returnerer altid false
--
Mvh
Christoffer
| |
Martin (15-08-2004)
| Kommentar Fra : Martin |
Dato : 15-08-04 16:47 |
|
"Christoffer Olsen" skrev i en meddelelse "Martin" writes:
>
> > if (f1<0&&f1>=0.01) // Den her linie bliver ikke udført
>
> Det der returnerer altid false
>
> --
> Mvh
> Christoffer
Det kunne jeg allerede før forestille mig men hvad kan jeg gøre, den skal
udføre noget hvis tallet er i minus?
Mvh.
Martin
| |
Ivan Johansen (15-08-2004)
| Kommentar Fra : Ivan Johansen |
Dato : 15-08-04 16:52 |
|
Martin wrote:
> if (f1<0&&f1>=0.01) // Den her linie bliver ikke udført
Hvordan havde du tænkt dig at f1 både skal være mindre end 0 og større
end 0.01? Hvorfor sammenligner du med 0.01 hvis du kun er interesseret i
om tallet er negativt?
Ivan Johansen
| |
Martin (15-08-2004)
| Kommentar Fra : Martin |
Dato : 15-08-04 17:14 |
|
"Ivan Johansen" <ng6@padowan.REMOVE.dk> skrev i en meddelelse
news:cfo0oa$tub$1@news.cybercity.dk...
> Martin wrote:
> > if (f1<0&&f1>=0.01) // Den her linie bliver ikke udført
>
> Hvordan havde du tænkt dig at f1 både skal være mindre end 0 og større
> end 0.01? Hvorfor sammenligner du med 0.01 hvis du kun er interesseret i
> om tallet er negativt?
>
> Ivan Johansen
Det er også en fejl som jeg fik rettet hurtigt. if (f1<0) ikke andet. Men
det fatter den vel ikke som noget negativt tal ?
Mvh.
Martin
| |
Niels Dybdahl (16-08-2004)
| Kommentar Fra : Niels Dybdahl |
Dato : 16-08-04 11:15 |
|
> Det er også en fejl som jeg fik rettet hurtigt. if (f1<0) ikke andet. Men
> det fatter den vel ikke som noget negativt tal ?
Det håber jeg ikke du mener ellers må du se om du kan få dine skolepenge
tilbage.
Iøvrigt er der en del problematiske ting i din kode: Uinitialiserede
variable, utermineret string.
Niels Dybdahl
| |
Bertel Lund Hansen (16-08-2004)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 16-08-04 16:17 |
|
Niels Dybdahl skrev:
>> Det er også en fejl som jeg fik rettet hurtigt. if (f1<0) ikke andet. Men
>> det fatter den vel ikke som noget negativt tal ?
>Det håber jeg ikke du mener ellers må du se om du kan få dine skolepenge
>tilbage.
Sidebemærkning:
Jeg kender udmærket til fejl hvor negative tal ikke opfattes som
negative tal - eller hvor positive tal opfattes som negative. Så
spørgsmålet er måske ikke helt i skoven.
--
Bertel
http://bertel.lundhansen.dk/ FIDUSO: http://fiduso.dk/
| |
Martin (16-08-2004)
| Kommentar Fra : Martin |
Dato : 16-08-04 16:23 |
|
"Bertel Lund Hansen" <nospamius@lundhansen.dk> skrev i en meddelelse
news:asj1i0h6e9qkdne3v3e4v6rmesm621232i@news.stofanet.dk...
> Niels Dybdahl skrev:
>
> >> Det er også en fejl som jeg fik rettet hurtigt. if (f1<0) ikke andet.
Men
> >> det fatter den vel ikke som noget negativt tal ?
>
> >Det håber jeg ikke du mener ellers må du se om du kan få dine skolepenge
> >tilbage.
>
> Sidebemærkning:
>
> Jeg kender udmærket til fejl hvor negative tal ikke opfattes som
> negative tal - eller hvor positive tal opfattes som negative. Så
> spørgsmålet er måske ikke helt i skoven.
>
> --
Tak for dét, Bertel. Jeg har eksperimenteret med forskellige udsagn før jeg
skrev, og noget logisk for os, ville den bare ikke udføre uden videre :)
Mvh.
Martin
| |
Mogens Hansen (17-08-2004)
| Kommentar Fra : Mogens Hansen |
Dato : 17-08-04 19:31 |
|
"Bertel Lund Hansen" <nospamius@lundhansen.dk> wrote:
[8<8<8<]
> Jeg kender udmærket til fejl hvor negative tal ikke opfattes som
> negative tal - eller hvor positive tal opfattes som negative.
Det lyder som en eller anden form for undefined behaviour, hvor man har
bevæget sig uden for hvad der kan repræsenteres.
F.eks. konverterer et negativt heltal til et unsigned heltal, eller
konverterer et stort positivt unsigned heltal til et signed heltal.
Dermed er det netop fejl i ens program, på lige fod med andre fejl.
Hvis man holder sig inden for hvad der er veldefineret opførsel bliver
negative tal opfattet som negative og positive som positive.
Venlig hilsen
Mogens Hansen
| |
Bertel Lund Hansen (17-08-2004)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 17-08-04 20:58 |
|
Mogens Hansen skrev:
>Det lyder som en eller anden form for undefined behaviour, hvor man har
>bevæget sig uden for hvad der kan repræsenteres.
>F.eks. konverterer et negativt heltal til et unsigned heltal, eller
>konverterer et stort positivt unsigned heltal til et signed heltal.
Det var sikkert noget lignende. Det var vist nok noget med nogle
danske bogstaver og test for større eller mindre end 0.
Jeg siger det ikke for at reklamere for at man skal lave den
slags fejl, men blot som en konstatering af at det ikke er
meningsløst blandt programmører at snakke om kodeproblemer hvor
positive tal opfører sig som negative (fordi der er logiske fejl
i koden).
>Dermed er det netop fejl i ens program, på lige fod med andre fejl.
Ja, men det er meningsfuldt at snakke om den slags fejl, og man
behøver ikke få sine skolepenge tilbage selv om man laver dem.
--
Bertel
http://bertel.lundhansen.dk/ FIDUSO: http://fiduso.dk/
| |
Martin (15-08-2004)
| Kommentar Fra : Martin |
Dato : 15-08-04 17:46 |
|
"Ivan Johansen" <ng6@padowan.REMOVE.dk> skrev i en meddelelse
news:cfo0oa$tub$1@news.cybercity.dk...
> Martin wrote:
> > if (f1<0&&f1>=0.01) // Den her linie bliver ikke udført
>
> Hvordan havde du tænkt dig at f1 både skal være mindre end 0 og større
> end 0.01? Hvorfor sammenligner du med 0.01 hvis du kun er interesseret i
> om tallet er negativt?
>
> Ivan Johansen
Løste det på anden måde, ikke helt korrekt men det virker.
if (f1<0&&value>1) hvor value er antal cifre. så noget ved den da.
Mvh.
Martin
| |
Nicolai Hansen (17-08-2004)
| Kommentar Fra : Nicolai Hansen |
Dato : 17-08-04 09:18 |
|
> iu[0]=getch();
> cprintf("%c",iu[ind]);
> flushall();
> while((iu[ind]>=46)&&(iu[ind]<=59))
> {
Hmm.. nu er "ind" ikke initialiseret men jeg kunne forestille mig at
den skulle initialiseres til 0. I så fald, hvordan vil du indtaste et
negativt tal? ASCII værdien for "-" er 45, så hvis du indtaster "-"
vil den ikke acceptere andre indtastninger.
Jeg aner ikke hvad atof("-") returnerer, men kunne da forestille mig
0... Måske er det det som er fejlen
/Nic
| |
Martin (17-08-2004)
| Kommentar Fra : Martin |
Dato : 17-08-04 14:13 |
|
"Nicolai Hansen" skrev i en meddelelse
news:d96764ff.0408162334.29f26b31@posting.google.com...
> > iu[0]=getch();
> > cprintf("%c",iu[ind]);
> > flushall();
> > while((iu[ind]>=46)&&(iu[ind]<=59))
> > {
>
> Hmm.. nu er "ind" ikke initialiseret men jeg kunne forestille mig at
> den skulle initialiseres til 0. I så fald, hvordan vil du indtaste et
> negativt tal? ASCII værdien for "-" er 45, så hvis du indtaster "-"
> vil den ikke acceptere andre indtastninger.
> Jeg aner ikke hvad atof("-") returnerer, men kunne da forestille mig
> 0... Måske er det det som er fejlen
>
> /Nic
Det er til at modtage en modstandsværdi som man skal taste ind, f.eks. 100M
(for Mega) altså med præfiks, og det ville være rart hvis der også må være
mellemrum mellem tal og bogstav. den while fra 46 til 59 skulle bruges til
at forhindre at man trykkede på alt muligt andet end det der kan forventes
men det kan da godt være man skal skippe lige det.(?)
Jeg har en subrutine over main som kaldes med praefiks(); og bearbejder
tallet. Den skal så også skrives lidt om da den kun forventer en værdi uden
præfiks. Den bliver brugt i ca. 14 foskellige cases. Se programmet som det
er nu på www.htmltips.dk/ohmslov.zip
Der er ingen sourcekode i der, men jeg sender den gerne eller bringer
stumper fra den.
Jeg ville bruge den her løkke med hvis tallet er minus, spring ca. 40
lininer over der kun checker når tallet er positivt. Det vil vel gøre
programmet lidt hurtigere gætter jeg.
Mvh.
Martin
| |
Nicolai Hansen (17-08-2004)
| Kommentar Fra : Nicolai Hansen |
Dato : 17-08-04 17:02 |
|
> iu[0]=getch();
> cprintf("%c",iu[ind]);
> flushall();
> while((iu[ind]>=46)&&(iu[ind]<=59))
> {
Hmm.. nu er "ind" ikke initialiseret men jeg kunne forestille mig at
den skulle initialiseres til 0. I så fald, hvordan vil du indtaste et
negativt tal? ASCII værdien for "-" er 45, så hvis du indtaster "-"
vil den ikke acceptere andre indtastninger.
Jeg aner ikke hvad atof("-") returnerer, men kunne da forestille mig
0... Måske er det det som er fejlen
/Nic
| |
Martin (17-08-2004)
| Kommentar Fra : Martin |
Dato : 17-08-04 18:30 |
|
"Nicolai Hansen" <nic@aub.dk> skrev i en meddelelse
news:d96764ff.0408170509.a5f3f8@posting.google.com...
> > iu[0]=getch();
> > cprintf("%c",iu[ind]);
> > flushall();
> > while((iu[ind]>=46)&&(iu[ind]<=59))
> > {
>
> Hmm.. nu er "ind" ikke initialiseret men jeg kunne forestille mig at
> den skulle initialiseres til 0. I så fald, hvordan vil du indtaste et
> negativt tal? ASCII værdien for "-" er 45, så hvis du indtaster "-"
> vil den ikke acceptere andre indtastninger.
> Jeg aner ikke hvad atof("-") returnerer, men kunne da forestille mig
> 0... Måske er det det som er fejlen
>
> /Nic
Jeg har prøvet at sætte ind før atof uden held. Jeg ved ikke hvad den
returnerer, andet end brugbart for opgaven til store tal.
Nu kører jeg den med atoi.
iu[0]=getch();
cprintf("%c",iu[ind]);
flushall();
while((iu[ind]>=46)&&(iu[ind]<=59))
{
ind++;
iu[ind]=getch();
cprintf("%c",iu[ind]);
}
f1 = atoi(iu);
value = strlen(iu);
value = value-1;
flushall();
if (f1<0&&value>1)
{ gotoxy(e,s+15);
strcpy(q5,"fejl");
cprintf("%.f er ikke en g'ldende v'rdi",f1);
gotoxy(e,s+16);
cprintf("Mindste modstandsv'rdi er 1 ohm: Brun sort sort, sílv.");
gotoxy(e,s+17);
cprintf("(NB:En modstand kan ikke begynde med farven sort).");
break;
}
| |
Nicolai Hansen (18-08-2004)
| Kommentar Fra : Nicolai Hansen |
Dato : 18-08-04 07:45 |
|
> Jeg har prøvet at sætte ind før atof uden held. Jeg ved ikke hvad den
> returnerer, andet end brugbart for opgaven til store tal.
> Nu kører jeg den med atoi.
Det jeg mente var at dit program så vidt jeg ku se ikke accepterede
indtastning af negative tal overhovedet - prøv at indsætte et
breakpoint, eller lav en udskrivning til skærmen, så du kan aflæse
værdien af iu.
> iu[0]=getch();
> cprintf("%c",iu[ind]);
> flushall();
> while((iu[ind]>=46)&&(iu[ind]<=59))
> {
> ind++;
> iu[ind]=getch();
> cprintf("%c",iu[ind]);
> }
-indsæt breakpoint/print her-
> f1 = atoi(iu);
> value = strlen(iu);
> value = value-1;
> flushall();
> if (f1<0&&value>1)
> { gotoxy(e,s+15);
> strcpy(q5,"fejl");
> cprintf("%.f er ikke en g'ldende v'rdi",f1);
> gotoxy(e,s+16);
> cprintf("Mindste modstandsv'rdi er 1 ohm: Brun sort sort, sílv.");
> gotoxy(e,s+17);
> cprintf("(NB:En modstand kan ikke begynde med farven sort).");
> break;
> }
| |
Martin (18-08-2004)
| Kommentar Fra : Martin |
Dato : 18-08-04 20:56 |
|
"Nicolai Hansen" <nic@aub.dk> skrev i en meddelelse
news:d96764ff.0408172245.6446b285@posting.google.com...
> > Jeg har prøvet at sætte ind før atof uden held. Jeg ved ikke hvad den
> > returnerer, andet end brugbart for opgaven til store tal.
> > Nu kører jeg den med atoi.
>
> Det jeg mente var at dit program så vidt jeg ku se ikke accepterede
> indtastning af negative tal overhovedet - prøv at indsætte et
> breakpoint, eller lav en udskrivning til skærmen, så du kan aflæse
> værdien af iu.
>
> > iu[0]=getch();
> > cprintf("%c",iu[ind]);
> > flushall();
> > while((iu[ind]>=46)&&(iu[ind]<=59))
> > {
> > ind++;
> > iu[ind]=getch();
> > cprintf("%c",iu[ind]);
> > }
> -indsæt breakpoint/print her-
> > f1 = atoi(iu);
> > value = strlen(iu);
> > value = value-1;
> > flushall();
> > if (f1<0&&value>1)
> > { gotoxy(e,s+15);
> > strcpy(q5,"fejl");
> > cprintf("%.f er ikke en g'ldende v'rdi",f1);
> > gotoxy(e,s+16);
> > cprintf("Mindste modstandsv'rdi er 1 ohm: Brun sort sort, sílv.");
> > gotoxy(e,s+17);
> > cprintf("(NB:En modstand kan ikke begynde med farven sort).");
> > break;
> > }
på breakpointet bliver indtastet 100 til 0 og efter f1=atoi(iu) til 100
Mvh.
Martin
| |
Nicolai Hansen (19-08-2004)
| Kommentar Fra : Nicolai Hansen |
Dato : 19-08-04 06:08 |
|
> på breakpointet bliver indtastet 100 til 0 og efter f1=atoi(iu) til 100
> Mvh.
> Martin
>
Og hvad hvis du indtaster et negativt tal? (det var det som var problemet) -
kig på din indtastede streng...
| |
Martin (19-08-2004)
| Kommentar Fra : Martin |
Dato : 19-08-04 21:46 |
|
"Nicolai Hansen" <nic@aub.dk> skrev i en meddelelse
news:41243591$0$301$edfadb0f@dread11.news.tele.dk...
>
> > på breakpointet bliver indtastet 100 til 0 og efter f1=atoi(iu) til 100
> > Mvh.
> > Martin
> >
>
> Og hvad hvis du indtaster et negativt tal? (det var det som var
problemet) -
> kig på din indtastede streng...
>
>
Det vil den næsten godt, men den her skal også ændres fra 46 til 45 for
minustegnet: while((iu[ind]>=45)&&(iu[ind]<=59)).
Den skriver ikke ud, hvad iu bliver med -100 og udelader helt
print-sætningen, men efter atoi vil den gerne skrive -100.
Jeg tror også jeg kan få den til at arbejde med positive tal ved at man
skriver m for milli , hvor jeg rigger subrutinen til istedetfor.
Mvh.
Martin
| |
|
|