Funktion



  • mcr schrieb:

    Wirt.-Inf.07 schrieb:

    EDIT: void main ... schreibt man nicht mehr.
    int main(void) wäre hier richtiger.

    Schreibt man nicht int main()? Ist das void zwingend erforderlich?

    Soweit ich weiß, ist unter C beides gültig.

    Gruß mcr

    Ok, thx. Dann hab ich heute wieder etwas dazugelernt! 😉



  • Hallo, es es gibt eine Fehlermeldung die sieht so aus:

    1>------ Neues Erstellen gestartet: Projekt: aufgabe2.c, Konfiguration: Debug Win32 ------
    1>Die Zwischen- und Ausgabedateien für das Projekt "aufgabe2.c" mit der Konfiguration "Debug|Win32" werden gelöscht.
    1>Kompilieren...
    1>aufgabezwei.c
    1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(23) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306): Siehe Deklaration von 'scanf'
    1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(58) : error C2143: Syntaxfehler: Es fehlt ';' vor 'Typ'
    1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(66) : error C2143: Syntaxfehler: Es fehlt ';' vor 'Typ'
    1>Das Buildprotokoll wurde unter "file://c:\Users\hasso\Documents\Visual Studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\Debug\BuildLog.htm" gespeichert.
    1>aufgabe2.c - 2 Fehler, 1 Warnung(en)
    ========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========

    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    
    void eingabe(float umsatz_unternehmen[12][2], char monate[12][12]); //übergabeparameter
    void ausgabe(float umsatz_unternehmen[12][2], char monate[12][12]); //übergabeparameter
    
    char first_use = 1;
    
    int pruefung() {
    
       int m;
    
       while(1)
          {
          	printf("Menue 1: Umsaetze\nMenue 2: Ausgabe Umsaetze\nMenue 3: Mittelwert\nMenue 4: Standardarabweichung\nMenue 5: Min/Max\nMenue 0: Beenden\nAuswahl: ");
    
          	fflush(stdin);
          	scanf("%i", &m);
    
                if( m<0 || m>5 ) // nicht innerhalb des auswahlbaren bereich
                   {
                      printf("\nUngueltige Eingabe!\n\n");
                   }
    			else if( m != 0 && m != 1 && first_use  )
                   {
                      printf("\nBitte geben sie erstmal die Umsaetze ein!\n\n");
                   }
                else
                   {
                      printf("\n");
                      return m;
                   }
    
          }
    }
    
    int main(void) {
    
    char monate[12][12] = {"Januar", "Ferbruar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember" }; 
    float umsatz_unternehmen[12][2]; // zweidimensionales Umsatz 
    
        eingabe(umsatz_unternehmen, monate);
        ausgabe(umsatz_unternehmen, monate);
    
       return 0;
    
       while( 1 ) 
          {
             switch( pruefung() )
                {
                   case 1:
    				  void eingabe(float umsatz_unternehmen[12][2], char monate[12][12]); //Es fehlt ';' vor 'Typ'
    
                      fflush(stdin); getc(stdin);
                      printf("Danke fuer den Input!\n\n");
                      first_use = 0; //ok, funktion wurde genutzt, umsaetze sind drin, 2,3,4,5 können benutzt werden!
                      break;
    
                   case 2: 
                      printf("[Ausgabe Umsaetze]\n");
                      void ausgabe(float umsatz_unternehmen[12][2], char monate[12][12]);
                      break;
    
                   case 3: 
                      printf("[Mittelwert]\n");
                      printf("Funktionsaufruf fuer diesen Fall Programm verlassen?\n\n");
                      // <Funktionsaufruf für diesen Fall!>
                      break;
    
                   case 4:
                      printf("[Standardabweichung]\n");
                      printf("Funktionsaufruf fuer diesen Fall\n\n");
                      // <Funktionsaufruf für diesen Fall!>
                      break;
    
                   case 5:
                      printf("[Min/Max]\n");
                      printf("Funktionsaufruf fuer diesen Fall\n\n");
                      // <Funktionsaufruf für diesen Fall!>
                      break;
    
                   case 0:
                      // <Funktionsaufruf zum saubermachen des Programms dann beenden!>
                      printf("[Programm Ende!]");
                      return 0;
    
                   default:
                      // <Funktionsaufruf zum saubermachen des Programms dann beenden!>
                      printf("\n\nFehler im Switch\n\n");
                      return 0;
                }
          }
    
       getchar(); // dient dazu das programm anzuhalten
       return 0;
    
    }
    
    void eingabe(float umsatz_unternehmen[12][2], char monate[12][12])
    { 
    
    int i;
    int j;
    int n = 11;
    printf("\n\nHandelsfirma A & B GmbH\n\n"); 
    
      for(j=1;j<=1;j++)
        {
    printf( "\nBitte geben Sie die Daten fuer das 1. Unternehmen ein:\n" );
    
            for(i=0;i<=n;i++)
          {
    
                printf("Bitte %i -ten Umsatz fuer %s 2007\n",i+1,monate[i]);  // Eingabe 
                printf("Eingabe:"); scanf("%f",&umsatz_unternehmen[i][0]);
    
            }
    
    printf( "\nBitte geben Sie die Daten fuer das 2. Unternehmen ein:\n" );
    
            for(i=0;i<=n;i++)
          {
    
                printf("Bitte %i -ten Umsatz fuer %s 2007\n",i+1,monate[i]);  // Eingabe 
                printf("Eingabe:");scanf("%f",&umsatz_unternehmen[i][1]);
    
          }
    
    }
    
    return;
    
    }
    
    void ausgabe(float umsatz_unternehmen[12][2], char monate[12][12])
    {
    int i;
    
    printf("\n--------------------------------------------------------------------------------"); 
    printf("\n:::::::::::::::::::::Filiale 1:::::::::::::::::::Filiale 2::::::::::::::::::::::");
    printf("\n--------------------------------------------------------------------------------"); 
        for (i=0;i<=11;i++) 
        { 
    
            printf("%5i. %10s 2007 %10.2f",i+1 ,monate[i],umsatz_unternehmen[i][0]);  //Ausgabe Umsatz, Monat
            printf("%5i. %10s 2007 %10.2f",i+1 ,monate[i],umsatz_unternehmen[i][1]);  //Ausgabe Umsatz, Monat 
            printf("\n"); 
        }
    printf("\n---------------------------------------------------------------------------------");
    printf("\n:::::::::::::::::::::-BUSINESS-:::::::::::::::::::-BUSINESS-:::::::::::::::::::::");
    printf("\n---------------------------------------------------------------------------------");
    
    return;
    
    }
    

    Ich hab es doch mit ein Semikolon ( ; ) beendet !?

    Warum dann die Fehlemeldung?

    gruß



  • Lass mich raten, du benutzt den neuen Visual Studio 9.0 Compiler? Wenn ja, dann ist das ein Bug im Compiler. Installier mal die ältere Version oder Mingw.



  • Ja so sieht aus.

    Im Dev-c++ funktionierts einwandfrei.
    Mit Visual Studio programmier ich lieber... Kann man dieses Bug irgendwie deaktivieren ?



  • hasso schrieb:

    Kann man dieses Bug irgendwie deaktieren ?

    Sicher nicht!

    ( 🕶 )



  • Lass mich mal raten:

    unter case 1: willst du die Daten einlesen.
    Also müßte die Zeile 58 doch:

    eingabe(umsatz_unternehmen, monate);
    

    und die Zeile 67:

    ausgabe(umsatz_unternehmen, monate);
    

    lauten.

    Das hattest du aber schon mal besser.

    Übrigens: fflush(stdin); darf so nicht verwendet werden.
    Dies ist ein Fehler. Verwende dafür besser folgende Funktion:

    void ClearBuf() { 
         setvbuf( stdin, NULL, _IONBF, 0 ); 
         setvbuf( stdin, NULL, _IOFBF, BUFSIZ ); 
    }
    

    Gruß mcr



  • hasso schrieb:

    .... "Ferbruar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember" }; ...

    muahuahua !
    ichhabs gewusst 🙄 🙄 🙄 🙄 🙄



  • Eyeroller roundandround schrieb:

    hasso schrieb:

    .... "Ferbruar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember" }; ...

    muahuahua !
    ichhabs gewusst 🙄 🙄 🙄 🙄 🙄

    lol



  • Eyeroller roundandround schrieb:

    hasso schrieb:

    .... "Ferbruar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember" }; ...

    muahuahua !
    ichhabs gewusst

    aber das 'void' vor main hat er wenigstens beseitigt.
    🙂



  • hasso schrieb:

    Ich hab es doch mit ein Semikolon ( ; ) beendet !?
    Warum dann die Fehlemeldung?

    Das hast du fein gemacht Hasso.

    hasso schrieb:

    Warum dann die Fehlemeldung?
    Kann man dieses Bug irgendwie deaktivieren ?

    Der Bug heisst Hasso und deklariert Funktionen im Funktionskörper.
    Das ist in C verboten Bruder !



  • mcr schrieb:

    Wirt.-Inf.07 schrieb:

    EDIT: void main ... schreibt man nicht mehr.
    int main(void) wäre hier richtiger.

    Schreibt man nicht int main()? Ist das void zwingend erforderlich?

    Soweit ich weiß, ist unter C beides gültig.

    int main(void) und int main(int argc, char *argv[]) sind gültig.



  • LordJaxom schrieb:

    int main(void) und int main(int argc, char *argv[]) sind gültig.

    ...in einer sogenannten 'hosted' implementation von C. in anderen fällen kann die startfunktion völlig anders aussehen. sie muss noch nicht mal 'main' heissen. beispiel: WinMain und _tmain, die den meisten windows-codern bekannt sein sollten.
    🙂



  • Jo thanks

    Es ist ein runtime Fehler aufgetaucht:
    Die Variable i wird benutzt die nicht definiert wurde..Im Visual 2005.. außerdem schliest das Programm sofort obwohl ich getchar(); drin stehen hab.

    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    
    void eingabe(float umsatz_unternehmen[12][2], char monate[12][12]); //übergabeparameter
    void ausgabe(float umsatz_unternehmen[12][2], char monate[12][12]); //übergabeparameter
    void mw( float umsatz_unternehmen[12][2]);
    
    char first_use = 1;
    int pruefung() {
    int m;
    
    while(1)
    {
    printf("Menue 1: Umsaetze\nMenue 2: Ausgabe Umsaetze\nMenue 3: Mittelwert\nMenue 4: Standardarabweichung\nMenue 5: Min/Max\nMenue 0: Beenden\nAuswahl: ");
    
    fflush(stdin);
    scanf("%i", &m);
    
    if( m<0 || m>5 ) // nicht innerhalb des auswahlbaren bereich
    {
    printf("\nUngueltige Eingabe!\n\n");
    }
    else if( m != 0 && m != 1 && first_use )
    {
    printf("\nBitte geben sie erstmal die Umsaetze ein!\n\n");
    }
    else
    {
    printf("\n");
    return m;
    }
    
    }
    }
    
    int main(void) {
    
    char monate[12][12] = {"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember" }; 
    float umsatz_unternehmen[12][2]; // zweidimensionales Umsatz 
    pruefung();
    eingabe(umsatz_unternehmen, monate);
    ausgabe(umsatz_unternehmen, monate);
    mw(umsatz_unternehmen);
    return 0;
    
    while( 1 ) 
    {
    switch( pruefung() )
    {
    case 1:
    
    void eingabe(float umsatz_unternehmen[12][2], char monate[12][12]);
    //fflush(stdin); getc(stdin);
    printf("Danke fuer den Input!\n\n");
    first_use = 0; //ok, funktion wurde genutzt, umsaetze sind drin, 2,3,4,5 können benutzt werden!
    break;
    
    case 2:
    void ausgabe(float umsatz_unternehmen[12][2], char monate[12][12]);
    printf("[Ausgabe Umsaetze]\n");
    break;
    
    case 3: 
    printf("[Mittelwert]\n");
    void mw(float umsatz_unternehmen[12][2]);
    
    break;
    
    case 4:
    printf("[Standardabweichung]\n");
    printf("Funktionsaufruf fuer diesen Fall\n\n");
    // <Funktionsaufruf für diesen Fall!>
    break;
    
    case 5:
    printf("[Min/Max]\n");
    printf("Funktionsaufruf fuer diesen Fall\n\n");
    // <Funktionsaufruf für diesen Fall!>
    break;
    
    case 0:
    // <Funktionsaufruf zum saubermachen des Programms dann beenden!>
    printf("[Programm Ende!]");
    return 0;
    
    default:
    // <Funktionsaufruf zum saubermachen des Programms dann beenden!>
    printf("\n\nFehler im Switch\n\n");
    return 0;
    }
    }
    
    getchar(); // dient dazu das programm anzuhalten
    return 0;
    }
    void eingabe(float umsatz_unternehmen[12][2], char monate[12][12])
    { 
    
    int i;
    int j;
    int n = 11;
    printf("\n\nHandelsfirma A & B GmbH\n\n"); 
    
    for(j=1;j<=1;j++)
    {
    printf( "\nBitte geben Sie die Daten fuer das 1. Unternehmen ein:\n" );
    
    for(i=0;i<=n;i++)
    {
    
    printf("Bitte %i -ten Umsatz fuer %s 2007\n",i+1,monate[i]); // Eingabe 
    printf("Eingabe:"); scanf("%f",&umsatz_unternehmen[i][0]);
    
    }
    
    printf( "\nBitte geben Sie die Daten fuer das 2. Unternehmen ein:\n" );
    
    for(i=0;i<=n;i++)
    {
    
    printf("Bitte %i -ten Umsatz fuer %s 2007\n",i+1,monate[i]); // Eingabe 
    printf("Eingabe:");scanf("%f",&umsatz_unternehmen[i][1]);
    
    }
    
    }
    
    return;
    
    }
    
    void ausgabe(float umsatz_unternehmen[12][2], char monate[12][12])
    {
    int i;
    
    printf("\n--------------------------------------------------------------------------------"); 
    printf("\n:::::::::::::::::::::Filiale 1:::::::::::::::::::Filiale 2::::::::::::::::::::::");
    printf("\n--------------------------------------------------------------------------------"); 
    for (i=0;i<=11;i++) 
    { 
    
    printf("%5i. %10s 2007 %10.2f",i+1 ,monate[i],umsatz_unternehmen[i][0]); //Ausgabe Umsatz, Monat
    printf("%5i. %10s 2007 %10.2f",i+1 ,monate[i],umsatz_unternehmen[i][1]); //Ausgabe Umsatz, Monat 
    printf("\n"); 
    }
    printf("\n---------------------------------------------------------------------------------");
    printf("\n:::::::::::::::::::::-BUSINESS-:::::::::::::::::::-BUSINESS-:::::::::::::::::::::");
    printf("\n---------------------------------------------------------------------------------");
    
    return;
    
    }
    void mw(float umsatz_unternehmen[12][2])
    { 
    int i;
    int n = 12;
    float summe;
    float mittelwert;
    float summe_2;
    float mittelwert2;
    
    summe +=umsatz_unternehmen[i][0];
    mittelwert = summe/=n;
    
    summe_2 +=umsatz_unternehmen[i][1];
    mittelwert = summe_2/=n;
    
    printf("Mittelwert Filiale |A|:%f",mittelwert);
    printf("Mittelwert Filiale |B|:%f",mittelwert2);
    }
    

    ps. real_rofler: Schau mal nach Februar nach 😃



  • hasso schrieb:

    außerdem schliest das Programm sofort obwohl ich getchar(); drin stehen hab.

    woher willst du das denn wissen? es compiled ja noch nicht mal.
    🙂



  • Echt .. das ist ja verwunderlich!

    Bei mir klappts... aber auch nur der DEV-C++ compiler..



  • dev-c++ ist *kein* Compiler sondern eine schlechte veraltete IDE 😕



  • hasso schrieb:

    ps. real_rofler: Schau mal nach Februar nach 😃

    ui ! wer hätte das gedacht !

    😡 aber du deklarierst immer noch funktionen in deinem main programm 😡
    😡 siehe zeile 55, 62 uws 😡

    🙄 🙄 🙄 🙄 🙄



  • Eyeroller schrieb:

    aber du deklarierst immer noch funktionen in deinem main programm

    das sind nur prototypen. ich weiss jetzt nicht ob die überall aufrauchen dürfen, aber ich glaub schon.
    🙂



  • Csyntax-freak schrieb:

    Eyeroller schrieb:

    aber du deklarierst immer noch funktionen in deinem main programm

    das sind nur prototypen. ich weiss jetzt nicht ob die überall aufrauchen dürfen, aber ich glaub schon.
    🙂

    😮

    Echt ?
    Hmmm... na dann sind die ja wenigstens gut versteckt, die Typen
    🙄 🙄 🙄 🙄 🙄



  • Dein Dev scheint ja sehr tolerant zu sein.

    int main()
    {
    	int a;
    	switch(a)
    	{
    		case 1:
    			void tarnung1(int xyz);
    		break;
    	}
    	return 0;
    }
    

    VS:

    error C2143: syntax error : missing ';' before 'type'
    

    😡 Kommt dir die Fehlermeldung bekannt vor, Wauwi ??? 😡

    🙄 🙄 🙄 🙄 🙄 🙄 🙄


Anmelden zum Antworten