Sida 1 av 1

Krångel med return värde i C!

Postat: 05 nov 2007, 14:10
av ZerQ
Hej

Jag har i skolarbetet gjort en miniräknare som skall använda funktioner men har problem med returvärdet ifrån en funktion. Se koden nedan:

Kod: Markera allt

char felkontroll(cOperator)
{
	/* Nu kontrollerar vi om användaren har anget rätt räknesätt i raden ovan, om det 
	är fel så frågar programmet efter ett korrekt operator. Denna funktion håller kvar 
	användaren så länge som det är fel tecken i inmatningen*/
	while (TRUE){
		if ((cOperator == '+') || (cOperator == '-') || (cOperator == '*') || (cOperator == '/'))
			return;
		else{
			printf("Du har angett felaktigt r\x84knes\x84tt, korrekta \x84r: +, -, *, /\n");
			printf("Ange korrekt r\x84knes\x84tt och avsluta med enter!\n");
			scanf("%c", &cOperator);
			fflush(stdin);
			return cOperator;}}
}
Detta är en nekel felkontroll som skall kolla om användaren har skrivit korrekt tecken i uträkningen, kruxet är att den fungerar alldeles utmärkt tills jag har skrivit in fel värde och else satsen skall åtgärda detta, variabeln cOperator får värdet som jag skriver in men returvärden ifrån funktionen blir samma som skrevs in som fel ifrån början!

Om jag exempelvis har skrivit 5 h 5, då reagerar felkontrollen och vill att jag matar in rätt, skriver då + men får tillbaka h.......

Vart har jag gjort fel?

SV: Krångel med return värde i C!

Postat: 05 nov 2007, 15:29
av gasol
Det första felet du gör är att din funktion är definerad att returnera ett char värde men om operatorn stämmer så returnerar du inget alls utan bara kör return; utan något retur värde.

Det andra felet som finns i koden är att oavsett om cOperator är en giltig operator eller inte så kommer du att returnera den i else satsen.
Vad är det för mening att ha while loopen om du kommer att returnera i första iterationen?

Kod: Markera allt

			printf("Du har angett felaktigt r\x84knes\x84tt, korrekta \x84r: +, -, *, /\n");
			printf("Ange korrekt r\x84knes\x84tt och avsluta med enter!\n");
			scanf("%c", &cOperator);
			fflush(stdin);
			return cOperator; <---- den här vet du inte om den är giltig eller inte så du kan inte returnera den!

edit: Ett tips är att alltid kompilera med -Wall flaggan i gcc och alltid fixxa ALLA varningar du får av gcc, i princip alla varningar man får är fel!

SV: Krångel med return värde i C!

Postat: 07 nov 2007, 17:22
av Smygis
Jag skulle skriva såhär:

Kod: Markera allt

bool felkontroll(cOperator)
{
	while (true){
		if ((cOperator == '+') || (cOperator == '-') || 
		      (cOperator == '*') || (cOperator == '/'))
			return true;
		else
			return false;
	}
}
och i 'main' ha:

Kod: Markera allt

do{
	//inmatning
while(!felkontroll(variabel));
men det är bara jag.

Men du, Sätt måsarna rätt för helvt.!
return cOperator;}}
ser ut som skit.

SV: Krångel med return värde i C!

Postat: 07 nov 2007, 20:11
av gasol
Loopen i felkontroll är helt onödig du kommer ju att returnera i första iterationen!
Smygis skrev: Jag skulle skriva såhär:

Kod: Markera allt

bool felkontroll(cOperator)
{
	while (true){
		if ((cOperator == '+') || (cOperator == '-') || 
		      (cOperator == '*') || (cOperator == '/'))
			return true;
		else
			return false;
	}
}
och i 'main' ha:

Kod: Markera allt

do{
	//inmatning
while(!felkontroll(variabel));
men det är bara jag.

Men du, Sätt måsarna rätt för helvt.!
return cOperator;}}
ser ut som skit.


SV: Krångel med return värde i C!

Postat: 10 nov 2007, 17:26
av Smygis
gasol skrev: Loopen i felkontroll är helt onödig du kommer ju att returnera i första iterationen!
Blä, Jag började ändra på hans sedan sket jag i det. Glömde ta bort loopen :/

SV: Krångel med return värde i C!

Postat: 16 nov 2007, 11:08
av per9000
ZerQ skrev: [...]

Kod: Markera allt

char felkontroll(cOperator)
{
/* ... */
			scanf("%c", &cOperator);
/* ... */
}
[...]
Har du rätt typ här? Du tar in en char? Om jag inte har fel så antas det vara en int om man inte anger typ. Detta kanske ger dig problem när du läser in &cOperator sen också? Du vet: pekare/referens/värde och hela den historien.

/Per

SV: Krångel med return värde i C! [LÖST]

Postat: 18 nov 2007, 21:44
av ZerQ
Hej igen och tack för svaren, vad det gäller måsvingarna så är jag inte så konsekvent än på hur jag vill ha det i koden  :-[

Det andra har jag gjort om så jag slapp skicka in det till funktionen och istället gjorde kontrollen direkt i main funktionen. Vart mycket enklare då att få till det riktigt.  :-\