Torsten Lange wrote:
Hallo Lug,
mal wieder was ganz banales...Ich uebe gerade Wertuebergabe in C.
Ueber eine Fkt., die int zurueckgibt, komme ich aber irgendwie nicht hinaus: "float fkt()" bringt mir Warnungen beim Compilieren und gibt fantastische Werte zurueck. Habe schon diverse Literatur durchgeguckt...
Kann mir jemand einen Tip geben? Torsten
*nachschau* ... hm nichts leichter als das ...
Die Warnungen:
gcc -o aufgabe14 aufgabe14.c
aufgabe14.c:34: warning: type mismatch with previous implicit declaration aufgabe14.c:26: warning: previous implicit declaration of `calc' aufgabe14.c:34: warning: `calc' was previously implicitly declared to return `int'
#include <stdio.h>
int main(void)
{ float x,y; char op;
printf("\n\n\n------------------------------------\n"); printf("| Kleinrechner Vers. 1 |\n"); printf("| Grundrechenarten - max 2. Zahlen |"); printf("\n------------------------------------\n\n\n"); printf("Nur Integer-Werte!\n"); printf("Operatoren: +,-,*,/\n\n"); printf(">> ");scanf("%f%c%f",&x,&op,&y);
if(op=='+'||op=='-'||op=='*'||op=='/') { /*printf("\nOperator: OK...");*/ if(y==0 && op=='/') printf("\n>> ...Division durch Null\n\n"); /*else printf("\n\nEinen Moment......\n");*/ } else printf("\nSyntax Fehler: %c kein Operator",op);
calc(&x,&y,&op);
Wenn ich richtig sehe, ist das hier das erste Auftreten der Fkt. calc(). Da sie hier keinen Rueckgabewert hat und auch vorher kein Prototyp da war, wird der Standardrueckgabewert int angenommen ...
if(calc(&x,&y,&op)==EOF) printf(">> = Fehler\n\n\n"); else printf("\n>> = %f\n\n\n",calc(&x,&y,&op)); }
float calc(float *ix, float *yp, char *op)
Was dann hier natuerlich zu Konflikten fuehrt ...
{ float gibt;
switch(*op) { case '+': gibt=*ix+*yp;break; case '-': gibt=*ix-*yp;break; case '*': gibt=(*ix)*(*yp);break; case '/': if(*yp!=0) gibt=(*ix)/(*yp); else gibt=EOF; default: gibt=EOF;break; }
return(gibt); }
Die Loesung habe ich ja schon fast gesagt. Einfach einen Prototyp fuer die Ftk. calc vor die main-Fkt. schreibt ... also in etwa so:
float calc(float *, float *, char *);
Ungetestet. Falls das nicht hilft, frag' mal nochmal. Dann schau ich naeher hin ...
Bye.
Jens