[C] Funktionsaufruf Problem

over9dausnd

Grünschnabel
Hallo,

ich beisse mir schon seit Stunden die Zähne an folgendem Programm aus,
es soll eine Vertreternummer und ein Quartal einlesen, wenn dies erfolgreich war soll ein Umsatz eingelesen und eingelesen (aufaddiert wenn der Vertreter schon einen umsatz hat) werden.

Desweiteren soll nach belieben ein entsprechender Umsatz wieder ausgegeben werden.

Ich verwende Code::Blocks 8.02 und den GNU GCC Compiler.

Hier noch kurz die variablen erklärt:

float umsatz[10][4]={0}; sollte ein 2 Dimensionaler Vektor sein
int vnr=-1; soll die Vertreternummer sein
quat=-1; soll die Quartalszahl sein (1-4)
char ende; soll eine Prüfvariable für das Beenden des Programms sein.

Hier der Quellcode: PS: Das Programm ist noch sehr unsauber und Fehlerbehaftet, ich werde es noch verbessern, aber dafür sollte es erst einmal Funktionieren.
Code:
H:\Daten\Projekte\C\Mehrdimensionale Vektoren\eigenuebung.o:eigenuebung.c:(.text+0x8d)||undefined reference to `eingabe(float, int, int)'|
||=== Build finished: 1 errors, 0 warnings ===|

Code:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>


float eingabe(float,int,int);



int main()
{
    float umsatz[10][4]={0};
    int vnr=-1,quat=-1;
    char ende;

    do
    {
        system("cls");

        eingabe(umsatz[10][4],vnr,quat);

        printf("Wollen sie das Einlesen beenden <J>");
        fflush(stdin);scanf("%c",ende);
    }
    while (ende!='j' || ende!='J');

    ende = 'N'

    do
    {
        system("cls");

        printf("\tAusgabe der Umsaetze");
        printf("\nVertreter: ");
        fflush(stdin);scanf("%d",vnr);
        printf("\nQuartal: ");
        fflush(stdin);scanf("%d",&quat);

        if (vnr==-1 || vnr<=0 || vnr >10)
        {
            system("cls");
            printf("Falsche Vertreternummer");

        }
        else if (quat==-1 || quat<=0 || quat>4)
        {
            system("cls");
            printf("Kein gueltiges Quartal");

        }

        else
        {
            printf("\n\nVertreter %d hat im %d. Quartal %1.2f Euro Umsatz erwirtschaftet",vnr,quat,umsatz[vnr][quat]);
        }
        printf("Wollen sie das Ausgeben beenden <J>");
        fflush(stdin);scanf("%c",ende);
    }
    while (ende!='j' || ende!='J');



    return 0;

}




float eingabe (float umsatz[10][4],int vnr, int quat)
{

    float tmp1=0,tmp2=0,tmp3=0;

    system("cls");

    printf("Vertreter: ");
    fflush(stdin);scanf("%d",&vnr);

    printf("\nQuartal: ");
    fflush(stdin);scanf("%d",&quat);

    if (vnr==-1 || vnr<=0 || vnr >10)
    {
        system("cls");
        printf("Falsche Vertreternummer");

    }
    else if (quat==-1 || quat<=0 || quat>4)
    {
        system("cls");
        printf("Kein gueltiges Quartal");

    }

    else
    {

        tmp1=umsatz[vnr][quat];
        scanf("%f",&tmp2);
        tmp3=tmp2+tmp1;
        umsatz[vnr][quat]=tmp3;

        tmp1=0,tmp2=0,tmp3=0;
        vnr=-1,quat=-1;

    }



        return 1;

}
 
Hallo,

die Deklaration der Funktion eingabe unterscheidet sich bezüglich der Signatur von der Definition (float ist nicht dasselbe wie float[10][4]). Du rufst die Funktion auch falsch auf. Das sieht man schon daran, dass umsatz[10][4] vom Typ float ist. Man sollte außerdem nicht auf das 11. Element in einem Array mit nur 10 Einträgen zugreifen. fflush ist nur auf Ausgabeströmen definiert, wenn ein fflush(stdin) den gewünschten Effekt hat, ist das also nur ein Zufall.

Grüße,
Matthias
 
Hallo,

schon mal vielen Dank für die Antwort, ich weiß dennoch noch nicht wie ich die Funktion dann deklarieren, bzw. aufrufen soll.
Könnte mir in der Beziehung vielleich noch jemand weiterhelfen

Vielen Dank
 
Hi.

Du mußt die Funktion eben genau so definieren, wie du sie auch deklariert hast; so das beides zusammenpaßt:
C:
/* Deklaration */
float eingabe(float,int,int);

...

/* Definition */
float eingabe(float umsatz, int vnr, int quat) {
  ...
}
Gruß
 
Zurück