Archief - [PROG][C] - If statement werkt niet!

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

IceSkull[BE]

Legacy Member
Ik heb even snel een klein progje gemaakt om te kijken of ik C nog steeds onder de knie had, maar nu zit ik met een klein probleem. wanneer ik het programma run, kan ik 2 getallen invoeren en geeft hij me de uitkomsten met de operators gebruikt. Voor een deling, mag geen enkel van de 2 getallen een 0 zijn, want dan kom je zoiezo 0 uit, tenzij je 0 in de noemer staat. In mijn programma is de uitkomst altijd 0 in zo'n geval.

Nu, als ik mijn programma run, lijkt deze if-statement, die ik gebruikt heb, niet te werken. Weet iemand van jullie wat ik fout gedaan heb? Thx, iceskull.

PS, ik ben nog maar beginner ;)

#include <stdio.h>
#include <stdlib.h>

int main()
{
char temp[4];
float fl_NumberA;
float fl_NumberB;

float fl_add;
float fl_subtract;
float fl_multiply;
float fl_division;

/***************************************
* GETTING THE INPUT *
***************************************/
printf("Enter a simple number: ");
scanf("%s",temp);
fl_NumberA=atoi(temp);
printf("Enter another simple number: ");
scanf("%s",temp);
fl_NumberB=atoi(temp);
printf("Reporting number A as %.2f and number B as %.2f.\n",fl_NumberA,fl_NumberB); /** SHOW INTEGER REPORT **/





/***************************************
* PROCESSING THE INPUT *
***************************************/
fl_add = fl_NumberA + fl_NumberB;
fl_subtract = fl_NumberA - fl_NumberB;
fl_multiply = fl_NumberA * fl_NumberB;
if(fl_NumberA==0 || fl_NumberB==0)
{
printf("A 0 is detected!");
fl_division=0;
}
else
{
fl_division = fl_NumberA / fl_NumberB;
}



/***************************************
* DISPLAYING OUTPUT *
***************************************/
printf("Adding result: %.2f\n",fl_add);
printf("Subtracting result: %.2f\n",fl_subtract);
printf("Multiplying result: %.2f\n",fl_multiply);
printf("Division result: %.2f\n",fl_division);

return(0);
}

Krueger

Legacy Member
Ipv met atoi te werken, kan je de inputs niet diret in een int opslaan, door het juiste character te gebruiker bij de snanf?

Tyfius

Legacy Member
scanf("%s",temp);

't Is een tijdje geleden dat ik nog iets in C gedaan heb, maar moet dat niet &temp zijn ?

S3cT0r

Legacy Member
Tyfius zei:
scanf("%s",temp);

't Is een tijdje geleden dat ik nog iets in C gedaan heb, maar moet dat niet &temp zijn ?

Neen, want dan zou je een pointer naar een pointer krijgen, een array zonder subscript [] word immers direct een pointer naar het eerste element.

wlibaers

Legacy Member
IceSkull[BE] zei:
Nu, als ik mijn programma run, lijkt deze if-statement, die ik gebruikt heb, niet te werken. Weet iemand van jullie wat ik fout gedaan heb? Thx, iceskull.

Als ik het hier uitvoer, voorbeeld:

Code:
Enter a simple number: 5
Enter another simple number: 0
Reporting number A as 5.00 and number B as 0.00.
A 0 is detected!Adding result: 5.00
Subtracting result: 5.00
Multiplying result: 0.00
Division result: 0.00

Op welke manier veschilt dit van wat je verwacht?

AcIdR3IgN

Legacy Member
printf("Enter a simple number: ");
scanf("%s",temp);
fl_NumberA=atoi(temp);

Waarom gebruik je een char array voor de nummers?
En waarom niet gewoon

printf("Enter a simple number: ");
scanf("%f",&fl_NumberA);

En dan de If Statement

//Laat || ...B==0 weg hier
if(fl_NumberA==0){
printf("A 0 is detected!");
fl_division=0;
}
else if (fl_NumberB == 0){
printf("Kan niet delen door 0");
}
else{
fl_division = fl_NumberA / fl_NumberB;
}

Dat zou misschien beter werken. Want in je originele if statement zeg je.. Als nummerA = 0 OR nummerB = 0 DAN moet de deling gelijk zijn aan 0. MAAR... In het geval dat nummerA = 5 en nummerB = 0 Dan gaat hem dit If statement uitvoeren (namelijk.. deling = 0).. wat je NIET wilt, want je kan dus niet delen door 0. Dus moet je een aparte else if tak maken (om te zeggen dat je niet kan delen door 0).

Je kan de eerste if al helemaal weglaten ook (en vervangen door de else if blok die ik heb gemaakt).. aangezien je toch uiteindelijk nummerA / nummerB doet als nummerB niet gelijk is aan 0.. wat je ook de uitkomst 0 gaat geven (als je begrijpt wat ik bedoel).

Allee, ik hoop dat het juist is.. ik heb het zelf niet getest.. hmm wacht kzal het zelf ff testen hier ;).. ok wat aangepast.. kzallet hier posten...

--------------------
Code:
#include <stdio.h>
#include <stdlib.h>

int main()
{
float fl_NumberA;
float fl_NumberB;

float fl_add;
float fl_subtract;
float fl_multiply;
float fl_division;

/***************************************
* GETTING THE INPUT *
***************************************/
printf("Enter a simple number: ");
scanf("%f",&fl_NumberA);
printf("Enter another simple number: ");
scanf("%f",&fl_NumberB);
printf("Reporting number A as %.2f and number B as %.2f.\n",fl_NumberA,fl_NumberB); /** SHOW INTEGER REPORT **/





/***************************************
* PROCESSING THE INPUT *
***************************************/
fl_add = fl_NumberA + fl_NumberB;
fl_subtract = fl_NumberA - fl_NumberB;
fl_multiply = fl_NumberA * fl_NumberB;

if(fl_NumberB == 0){
     printf("Kan niet delen door 0!\n");
     fl_division = 0;  //eigenlijk is uitkomst nog niet juist.. is nu gelijk aan 0 (wat niet het geval zou mogen zijn.
                       //Je kan best een functie maken om alles wat beter te ordenen, dan kan je
                       //output reageren op deze if statement, en kan je de printf("Division result") weglaten
}
else{
     fl_division = fl_NumberA / fl_NumberB;
}



/***************************************
* DISPLAYING OUTPUT *
***************************************/
printf("Adding result: %.2f\n",fl_add);
printf("Subtracting result: %.2f\n",fl_subtract);
printf("Multiplying result: %.2f\n",fl_multiply);
printf("Division result: %.2f\n",fl_division);
scanf("%s"); //ok mijn C zuigt :) lol.. maar anders sluit je console venster (allee hier toch)

return(0);
}


hope it helps a bit

IceSkull[BE]

Legacy Member
wel ik ben momenteel een boek aan het volgen, en een char variable bestaat maar uit 1 letter, en aangezien in de boek vermeld staat dat je beter bv voor een string intikt: char strVar[20] voor een string met maximum 20 tekens. ondertussen heb ik dat eens weggelaten en dat deed dus niet echt iets.

@wilbaers, blijkbaar werkt het wel bij jou, maar op mijn compiler, als ik dus 5 en 0 intik, krijg ik als uitkomst in division 1.HJ

met andere woorden, hij deelt toch, en doet niet wat ik vraag bij mijn if-else.

*edit: ik krijg ook de melding niet van "A 0 is detected". Hiermee weet ik dus 100% zeker dat hij 'if' overslaat. aja, op de code van acid3ign:
kan je met scanf een variable van het type float scannen? ik dacht dat dat alleen werkte met strings.., nu ja, ik ga je code even testen :)

wlibaers

Legacy Member
Ik gebruik hier gcc. Output van gcc --version is:
gcc (GCC) 3.4.2 (mingw-special)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Welke compiler gebruik jij? Het kan misschien zijn dat jouw compiler de vergelijking tussen floating-point nul en integer nul niet helemaal juist uitvoert (hoewel het in dit geval toch zou moeten lukken).

AcIdR3IgN

Legacy Member
Anyhoo.. code die ik heb aangepast werkt zeker!
(DevC++ met gcc), je had gewoon een logische fout in je if statement. (lees mijn vorige post).

Unzip Attack

Legacy Member
zeker dat je C onder de knie hebt ? ;D ik zou eens van vooraf opnieuw beginne =)

wlibaers

Legacy Member
En over het vergelijken van floating point getallen in het algemeen:

http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

Let op, de latere informatie op die pagina is afhankelijk van de voorstelling van floats en doubles in het geheugen, en maakt het noodzakelijk dat je een int type en een float type gebruikt met dezelfde grootte (wat, in sommige gevallen, nogal kan tegenvallen). Dat deel van de pagina is bedoeld voor iemand met al een zekere ervaring met floating-point. Voor eenvoudige vergelijkingen met nul gebruik je best de eerste techniek.

IceSkull[BE]

Legacy Member
wel jah, ik ga gewoon da boek verdervolgen, mss da de andere programma's wel werken, mocht het niet zo zijn, ga ik gewoon eens een andere compiler proberen. btw, weet iemand van jullie hoe ik C programma's in visual studio 2003 kan builden?

AcIdR3IgN

Legacy Member
:offtopic:
Werkt mijn code eigenlijk al voor u? Want ge ging het testen, maar meer heb ik er niet van gehoord

IceSkull[BE]

Legacy Member
ff kijke.... jep, ga perfect! blijkbaar ebk iets fout gedaan.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan