Kurze Frage für Neuling!



  • Zuerst einmal hallo an alle ich werde jetzt des öfteren schreiben!
    Habe mir vor zwei Tagen mal die programmiersprache C angeschaut und bin bei Arrays und Strings angekommen. Schleife und ähnliches ist derweil kein Problem.
    Aber ich habe auf einem PC Dev C++ installiert, da funktioniert ein Programm ohne Probleme, während dasselbe zu Hause nur Mist produziert!

    Wie kann das sein?

    Hier das Programm!

    DANKE IM VORAUS AN ALLE!
    Bitte keine boshaften Kommentare, ich bin wie gesagt ganz neu!
    Jegliche Tips und Hilfe nehme ich gerne an!
    Bin sehr interessiert!

    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <math.h>
    
    float Wurzel(float wurzelzahl)
    {
        double wurzelergebnis;
        wurzelergebnis=sqrt(wurzelzahl); 
        return(wurzelergebnis);
    }
    
    int main(int argc, char *argv[])
    
    {
        float zahl1;
        float zahl2;
        float wurzeleinlesen;
        float wurzelausgeben;
        float ergebnis;
        char op;
        char funktion;
        int durchlauf;
        float gesamt[durchlauf];
    
        system("color 0A");
        printf("Willkommen beim MAS Taschenrechner mit vielen Funktionen\n");
        printf("______________________________________________________\n");
    
    do
    {     
    for(durchlauf=1;funktion!='e';durchlauf++) 
    {
    
        printf("\n<a> Grundrechnungsarten\n");
        printf("<b> Wurzelrechnung\n");
        printf("<c> Gesamtsumme\n");
        printf("<d> Anzahl Rechnungen gesamt\n");
        printf("<e> Beenden\n");
        printf("Was moechten sie tun?\t");
        funktion=getch();
    
        switch(funktion)
    {   
        case 'a' :
        printf("\n\nBitte waehlen Sie ihren Operator: ");
        op=getch();
        printf("%c\n\n",op);
    
        printf("Geben Sie bitte die erste Zahl ein: ");
        scanf("%f",&zahl1);
        printf("\n");
        printf("Geben Sie bitte die zweite Zahl ein: ");
        scanf("%f",&zahl2);
        printf("\n");
    
        switch(op)
        {
        case '+' :  ergebnis= zahl1+zahl2; 
        break;
        case '-' :  ergebnis= zahl1-zahl2;  
        break;
        case '*' :  ergebnis= zahl1*zahl2; 
        break;
        case '/' :  ergebnis= zahl1/zahl2; 
        }
    
        printf("%f %c %f \n\n",zahl1,op,zahl2);
        printf("\n______________________________________________________\n");
        printf("Das Ergebis lautet: %f\n\n",ergebnis); 
    
        //printf("\nGesamt durchgefuehrte Rechnungen: %d\n",durchlauf);
        printf("\n______________________________________________________\n");
    
        gesamt[durchlauf]=ergebnis+gesamt[durchlauf-1];
        //printf("\nGESAMT errechnet: %f \n",gesamt[durchlauf]);
    
        break;
    
        case 'b' : 
        printf("\n\nGeben Sie bitte die Zahl ein: ");
        scanf("%f",&wurzeleinlesen);   
        wurzelausgeben=Wurzel(wurzeleinlesen);
    
        printf("\nDie Wurzel von %f ist %f.",wurzeleinlesen,wurzelausgeben);
        //printf("\nGesamt durchgefuehrte Rechnungen: %d\n",durchlauf);
        printf("\n______________________________________________________\n");
    
        gesamt[durchlauf]=wurzelausgeben+gesamt[durchlauf-1];
        //printf("\nGESAMT errechnet: %f \n",gesamt[durchlauf]);
    
        break;
    
        case 'c' :
        durchlauf--;
        printf("\n\nSumme errechneter Werte: %f \n\n", gesamt[durchlauf]);
        break;
    
        case 'd' :
        durchlauf--;
        printf("\n\nGesamte Rechnungen durchgefuehrt: %d\n",durchlauf);
        break;
    
        case 'e' : break;
    
    }  system("PAUSE"); system("Cls"); 
    } 
    }  while(funktion != 'e');
    
        system("PAUSE");
    
        return 0;    
    }
    


  • Habe vergessen zu sagen, dass ich dieses Programm nur geschrieben habe um alles einzubauen was ich bisher kann! (inkl. Funktion)

    Auch wenn vieles anders besser ginge, ist es einfach ein Testprogramm sozusagen!



  • Und deine Frage war...?
    🙂



  • Kann es daran liegen, dass ich ja noch keinen Wert für durchlauf eingegeben habe und damit das Array im Prinip nicht existiert bzw. keine definierte Größe hat?
    Habe einmal array[100] eingegeben und jetzt geht soweit alles!
    warum ging das wohl auf dem anderen pc mit array[durchlauf] ?



  • MichaelMAS schrieb:

    warum ging das wohl auf dem anderen pc mit array[durchlauf] ?

    Kann sein, dass der C99 spricht und deshalb mit dem zufälligen, erst zur Laufzeit bekannten Wert durchlauf die Grösse festlegt. "Lokale Felder variabler Größe":
    http://de.wikipedia.org/wiki/Varianten_der_Programmiersprache_C#Wichtigste_Neuerungen_von_C99
    🙂



  • Ah,ok, das kann sein!
    Ist ein neuerer PC mit einem älteren Betriebssystem als meinem!

    Bin gerade bei Strings dabei!
    Hab ewig gebraucht um herauszufinden warum mein programm nicht geht!

    Im tutorial ist ein Programm angegeben, doch ich schreibe die nie ab sondern ergänze zum lernen mein eigenes lieber mit allem möglichen, wie man sieht 😉

    Doch im Tutorial steht einfach nicht, dass man auch

    #include <string.h>
    

    braucht!

    Naja, derweil alles geklärt!

    DANKE!



  • Ob du nun einen neueren/älteren PC mit neuerem/älterem BS mit/ohne <string.h> verwendest oder nicht, dein Programmverhalten bei dem o.g. Code bleibt undefiniert.



  • MichaelMAS schrieb:

    Ah,ok, das kann sein!
    Ist ein neuerer PC mit einem älteren Betriebssystem als meinem!

    Das sollte egal sein, wichtig ist, wie alt der Compiler und worauf er voreingestellt ist. Der MS-Compiler versteht (Gott weiss warum) bis heute kein C99.

    MichaelMAS schrieb:

    Im tutorial ist ein Programm angegeben, doch ich schreibe die nie ab sondern ergänze zum lernen mein eigenes lieber mit allem möglichen, wie man sieht 😉

    Anders lernt man ja auch nicht viel.

    MichaelMAS schrieb:

    Doch im Tutorial steht einfach nicht, dass man auch

    #include <string.h>
    

    braucht!

    Hmm, was ist denn das für ein Tutorial? Da könnte man vielleicht ein besseres finden.

    conio.h gehört übrigens nicht zu Standard-C (zu keiner Version). Versuch mal, mit getchar() oder getc() aus stdio.h statt getch() auszukommen. Statt system("PAUSE") (geht nur auf Windows) kannst du auch eine eigene Funktion machen, die eine Meldung schreibt und auf die Eingabe eines Zeilenumbruchs wartet. Wenn du dann noch auf system("CLS") verzichtest, bist du portabel unterwegs.
    🙂



  • Danke für die Tips!

    Besonders das mit der Funktion statt system, da ich das lieber anders schreiben würde!

    lg

    Bis zum nächsten mal!


Anmelden zum Antworten