/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
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



Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409076
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste