Ergebnis 1 bis 20 von 20

Thema: Bitte schnelle hilfe

  1. #1

    Bitte schnelle hilfe

    hi leutz ich binns noch ma^^


    vileicht könnt ihr mir ma kurz helfen. ich versuch grad zum üben nen prog zu schreiben mit dem ich später mal rechnen kann. aber irgend was mach ich grundlegend falsch, da er schon am anfang ständig fehler meldungen ausspuckt. ich text euch ma was ich bisher geschrieben hab.

    danke schon ma im vorraus, wenn ihr mir sagen könnt wo mein fehler ist.

    CODE:
    Code:
    // letz go
    
    #include <iostream>
    #include <cmath>
    using namespace std;
    
    
    //funtion zur multiplikation
    void Multiplizieren
    {
    	int Zahl1;
            int Zahl2;
    
    	cout <<"Bitte geben sie die erste Zahl ein!"l;
    	cin << Zahl1
    	count << "Bitte geben sie die zweite Zahl ein, die mit der ersten multipliziert werden soll";
    		cin << Zahl2
    		double ergebnis;
    	ergebnis = Zahl1*Zahl2;
    
    	return ergebnis
    		return Zahl1
    		return Zahl2
    }
    
    // haupmenue
    int main()
    {
    	int befehl;
    
    	cout << endl;
    	cout << "Menue" << endl;
    	cout << "Multiplizieren            <1>" << endl;
    	cout << "Dividieren                <2>" << endl;
    	cout << "Addieren                  <3>" << endl;
    	cout << "Subtrahieren              <4>" << endl;
    	cout << "Wurzelziehen              <5>" << endl;
    	cout << "Quadrieren                <6>" << endl;
    	cout << "Programm beenden          <7>" << endl;
    	cout << "Bitte ihre gewünschte Wahl:";
    	cin >> befehl;
    
    // befehl bearbeiten
    
    	switch(befehl)
    
    	case 7: cout << endl;
    		    cout << "Programm beenden" << endl;
    			break;
    
    	case 1: cout << endl;
    		    Multiplizieren;
    
    	return 0;
    }

    und bitte mich nicht gleich umbringen^^ wenn es zu vatal ist. wie gesagt ich binn erst am üben

    Ich liebe den [*code] tag -freezy

    Geändert von Freezy (16.05.2004 um 16:41 Uhr)

  2. #2
    Was kommmt als Fehlermeldung?

    Ansonsten ersetz mal:
    Code:
    #include <iostream>
    #include <cmath>
    mit:

    Code:
    #include <stdio.h> //kA ob du das brauchst, machs einfach rein :)
    #include <iostream.h>
    #include <cmath.h>

  3. #3
    hmmmm.

    hab jetzt deine vorschläge mal eingefügt. nur noch ein fehler. bei <cmath.h> meint er kenne es nicht. als ich das h dann wieder weggenommen hab waren es aber sovort wieder 5 fehler v.v

    da muß noch irgend wo ein anderer fehler sein. ich geb mal kurz hier die fehlermeldungen raus:

    cprogramme\microsoft visual studio\myprojects\nen versuch\letz go.cpp(6) : error C2871: 'std' : Existiert nicht oder ist kein Namespace

    cprogramme\microsoft visual studio\myprojects\nen versuch\letz go.cpp(11) : error C2182: 'Multiplizieren' : Ungueltige Verwendung des Typs 'void'

    cprogramme\microsoft visual studio\myprojects\nen versuch\letz go.cpp(11) : error C2239: Unerwartetes Token '{' nach der Deklaration von 'Multiplizieren'

    cprogramme\microsoft visual studio\myprojects\nen versuch\letz go.cpp(50) : error C2043: Schluesselwort break ungueltig

    cprogramme\microsoft visual studio\myprojects\nen versuch\letz go.cpp(52) : error C2046: Schluesselwort case ungueltig


    und wie gesagt. wenn ich aus <cmath> <cmath.h> mach kommt das:

    cprogramme\microsoft visual studio\myprojects\nen versuch\letz go.cpp(5) : fatal error C1083: Include-Datei kann nicht geoeffnet werden: 'cmath.h': No such file or directory

  4. #4
    Wie schon so oft gesagt kenn ich mich ned in C++ aus... aber eineige sachen fallen mir trotzdem auf:

    + Aus [void Multiplitzieren] musst du Afaik [int Multiplizieren()] machen. Du willst aus der Funktion mit [Return] schlieslich was zurückgeben.

    + Du musst glaub ich die Funktion erst Initzialisieren. Dafür übernehme ich aber überhaupt keine garantie Schreib kurz vor [int Multiplizieren()] nochmal [int Multiplizieren();]

    + Aus
    Code:
    switch(befehl)
    
    case 7: cout << endl;
        cout << "Programm beenden" << endl;
    break;
    
    case 1: cout << endl;
        Multiplizieren;
    mach mal
    Code:
    switch(befehl)
    {
      case 7:
      {
        cout << endl;
        cout << "Programm beenden" << endl;
        break;
      }
      case 1:
      {
        cout << endl;
        Multiplizieren;
      }
    }
    Wenn ich mich noch richtig entsinne sollte das ein Paar fehlermeldungen entfernen

  5. #5
    1.) Funktion "Multiplizieren" ist void, obwohl sie einen Rückgabewert hat. Das ist nicht zulässig. die Funktion sollte besser double sein; du gibst ja sowieso ein double zurück. Was BTW overkill ist, wenn man sowieso ints miteinander multipliziert.
    2.) Funktion "Multiplizieren" hat drei return-Statements - nur das erste wird ausgeführt werden, da bei einem return die Funktion automatisch verlassen wird.
    3.) Der switch hat kein "default"-Ziel. Sollte er aber besser.
    4.) Falls am Ende des Programms keine Leerzeile ist: Die sollte besser.

    Das sind die Probleme, die ich so gefunden habe, mal sehen, was g++ so sagt (ich interpretier's gleich)...

    Zeile 9: void Multiplikation <- Die Argumentliste fehlt; korrekt wäre "void Multiplikation()"
    Zeile 14: cout <<"Bitte geben sie die erste Zahl ein!"l; <- kein Leerzeichen zwischen << und "[...]"
    Zeile 14: cout <<"Bitte geben sie die erste Zahl ein!"l; <- Was hat die 1 da am Ende zu suchen?
    Zeile 15: cin << Zahl1 <- ; fehlt
    Zeile 15: cin << Zahl1 <- cin >> Zahl1; wäre richtig
    Zeile 16: count << "Bitte geben sie die zweite Zahl ein, die mit der ersten multipliziert werden soll"; <- sollte cout heißen
    Zeile 18: cin << Zahl2 <- ; fehlt
    Zeile 18: cin << Zahl1 <- cin >> Zahl2; wäre richtig
    Zeile 22: return ergebnis <- ; fehlt
    Zeile 46: switch() ohne {}. Die korrekte Form wäre:
    Code:
    switch(Bedingung)
    {
     case x:
     // Zeug
     case y:
     // Zeug
     case default:
     // Zeug
     break; //ist besser, wenn der letzte case mit break; aufhört
    }
    Zeile 51: Multiplizieren; <- Funktionen müssen immer mit Parameterliste aufgerufen werden (Multiplizieren();)

    So, das sollte reichen. Keep it up! ;)


    Antwort wäre früher gekommen, der Server wollte nur wieder nicht und dann war ich afk... Falls redundant, bitte nicht beachten.

  6. #6
    danke für eure hilfe!!!!!!

    aber nuhn hab ich dabei nur noch zwei fehler/probs

    hier noch mal die aktuelle version:

    // letz go

    #include <stdio.h>
    #include <iostream.h>
    #include <cmath>
    using namespace std;


    //funtion zur multiplikation
    int Multiplizieren
    {
    int Zahl1;
    int Zahl2;

    cout <<"Bitte geben sie die erste Zahl ein!"l;
    cin << Zahl1
    cout << endl;
    cout << "Bitte geben sie die zweite Zahl ein, die mit der ersten multipliziert werden soll";
    cin << Zahl2
    cout << endl;

    double ergebnis;
    ergebnis = Zahl1*Zahl2;

    cout << "Das Ergebnis von "<< Zahl1 << "mal "<< Zahl2 <<"ist "<< ergebnis <<endl;


    return ergebnis

    }


    // haupmenue
    int main()
    {
    int befehl;

    cout << endl;
    cout << "Menue" << endl;
    cout << "Multiplizieren <1>" << endl;
    cout << "Dividieren <2>" << endl;
    cout << "Addieren <3>" << endl;
    cout << "Subtrahieren <4>" << endl;
    cout << "Wurzelziehen <5>" << endl;
    cout << "Quadrieren <6>" << endl;
    cout << "Programm beenden <7>" << endl;
    cout << "Bitte ihre gewünschte Wahl:";
    cin >> befehl;

    // befehl bearbeiten

    switch(befehl)
    {
    case 7:
    {
    cout << endl;
    cout << "Programm beenden" << endl;
    break;
    }

    case 1:
    {
    cout << endl;
    Multiplizieren;
    break;
    }
    }
    return 0;
    }



    und die dazugehörigen fehler, welche ich absolut nicht verstehen kann. aber schaut selbst:

    CProgramme\Microsoft Visual Studio\MyProjects\nen versuch\letz go.cpp(6) : error C2871: 'std' : Existiert nicht oder ist kein Namespace

    CProgramme\Microsoft Visual Studio\MyProjects\nen versuch\letz go.cpp(11) : error C2239: Unerwartetes Token '{' nach der Deklaration von 'Multiplizieren'


    wenn ihr ir hier weiterhelfen könntet, so das alles funktzt, müsste ich es eigentlich schaffen das ganze konzet später auch auf die anderen funktionen übernehmen zu können.


    @jesus_666
    könnte man nicht auch als einzelner bürger innerhalb der eu auf ein verfahren gegen solch einen beschluß ins rollen bringen??? oder zumindest ne europaweite unterschriften aktion??

    Geändert von Balbero (17.05.2004 um 04:20 Uhr)

  7. #7
    deine Schnittstelle fuer Multiplizieren muss so aussehen:

    Code:
    int Multiplizieren() {
       //hier dein Code
    }
    und so aufgerufen werden:

    Code:
    Multiplizieren();
    Des weiteren gehört nach return ergebnis ein Strichpunkt. und using namespace std läuft nicht, da noch kein Namespace std definiert worden ist. Allerdings ist das auch komplett unnütz, die Zeile kannst du streichen.

  8. #8
    Zitat Zitat
    Original geschrieben von MuadDib
    und using namespace std läuft nicht, da noch kein Namespace std definiert worden ist. Allerdings ist das auch komplett unnütz, die Zeile kannst du streichen. [/B]
    Echt? AFAIK wird exakt das in der <stdio.h> getan... Immerhin kann man ja ohne using namespace std; auch auf std::cin und std::cout nicht ohne das std::-Präfix zugreifen, AFAIK.

    Allerdings weiß ich nicht, ob und wie MSVC++ die STL implementiert; an einigen Stellen scheint es ja vom ISO-C++ abzuweichen...

    Geändert von Jesus_666 (16.05.2004 um 22:09 Uhr)

  9. #9
    Zitat Zitat
    Original geschrieben von Jesus_666
    Echt? AFAIK wird exakt das in der <stdio.h> getan... Immerhin kann man ja ohne using namespace std; auch auf std::cin und std::cout nicht ohne das std::-Präfix zugreifen, AFAIK.

    Allerdings weiß ich nicht, ob und wie MSVC++ die STL implementiert; an einigen Stellen scheint es ja vom ISO-C++ abzuweichen...
    In der stdio.h sicher nicht, die ist noch ein Relikt aus C-Tagen... wenn dann in der iostream. Auf cin und cout kann man sicher ohne namespace und praefix zugreifen, da bin ich sicher --- aber der namespace koennte tatsaechlich dort definiert sein (sagen zumindest einige google-Tools), nur moechte ich dann wissen, warum der Compiler hier einen Fehler schmeisst... (ein Zeilenschritt?)

  10. #10
    1.) Ich hatte erst iostream geschrieben, mich dann falsch korrigiert und bei der Rückkorrektur war der Server down. Go figure.
    2.) Zumindest g++ besteht AFAIK auf dem Namespace; der MS-Compiler scheint die Namespaces für die STL offenbar komplett zu ignorieren.

  11. #11
    den namespace konnt ich wirklich einfach so löschen. dadurch wurden die fehler von 2 auf einen heruntergesenkt.

    @muadib
    nur die wenn ich die beiden klammern hinter die ausdrücke setzt, erhöhen sich die fehler von einem fehler auf 5 fehler und 1 warnung



    wie grad oben gesagt, hab ich nur noch ein fehler. und das ist die geschweifte klammer unter int Multiplizieren ich mach sie gleich im obiegen post mal schnell farbig

  12. #12
    so .. ich habe mich mal erbarmt und alle zich fehler korrigiert *seuftz*
    Das Programm compiliert jetzt fehlerfrei mit Dev-C++, also GNU-C++ konform.
    Wenn MS hier immer noch rumspinnt, liegts an denen und deren standardfremdheit.

    Code:
    //#include <stdio.h> brauchst du nicht, da du kein printf oder so hast
    #include <iostream> // c++ header haben nach neuem Standard KEIN .h
    
    using namespace std; // Diese Zeile ist fuer die STL SEHR SEHR wichtig.
    // Ob MS sich hier mal wieder nicht an den standard haellt, weiss ich auch nicht
    
    
    // Funtion zur Multiplikation
    // Im Hauptprogramm verwendest du den Rueckgabewert sowieso nicht.
    // Daher wird sie definiert, das sie weder nen Wert zurueckgibt, noch verlangt
    void Multiplizieren(void) 
    {
      int Zahl1=0; // =0 <- initialisieren gehoehrt zum guten Ton
      int Zahl2=0;
    
    // cout <<"Bitte geben sie die erste Zahl ein!"l; 
    //<- was das l da zu suchen hat, weiss ich auch nicht.
      cout <<"Bitte geben sie die erste Zahl ein! : ";
    // cin << Zahl1 das ist definitiv falsch. Mit >> liest du aus dem String. 
    // Zudem: Nach jeder Anweisung musst du ein ; machen
      cin >> Zahl1;
      cout << endl;
      cout << "Bitte geben sie die zweite Zahl ein,"<<endl
           <<"mit welcher die erste multipliziert werden soll :";
    // cin << Zahl2 das selbe Problem wie oben
      cin >> Zahl2;
      cout << endl;
    
    // Extradefinition des Ergebnisses ueberfluessig.
    // double ergebnis;
    // ergebnis = Zahl1*Zahl2;
    // durch den Cast in den typ double kannst du groessere zahlen darstellen
      cout << "Das Ergebnis von "<< Zahl1 << " mal "<< Zahl2 <<" ist "<< double(Zahl1)*Zahl2 <<endl;
    
    // return ergebnis; brauchen wir nicht mehr, da kein Wert zurueckgegeben wird
    }
    
    
    // haupmenue
    int main(void) // void in die Klammer schreiben, wenn man keine Parameter haben will
    {
      int befehl;
    
      cout << endl;
      cout << "Menue" << endl;
      cout << "Multiplizieren <1>" << endl;
      cout << "Dividieren <2>" << endl;
      cout << "Addieren <3>" << endl;
      cout << "Subtrahieren <4>" << endl;
      cout << "Wurzelziehen <5>" << endl;
      cout << "Quadrieren <6>" << endl;
      cout << "Programm beenden <7>" << endl;
      cout << "Bitte ihre gewünschte Wahl:";
      cin >> befehl;
    
    // befehl bearbeiten
    
      switch(befehl) 
      { // Beginn Switch
       case 7:
         //{ <- die { } um die Breakbloecke sind ueberfluessig und unueblich, wenn nicht sogar falsch
         cout << endl;
         cout << "Programm beenden" << endl;
        break;   
       // } <- siehe oben
       case 1:
         cout << endl;
         // Multiplizieren; <- Eine Funktion ohne Parameter wird immer mit () aufgerufen
         Multiplizieren();
        break;
      } // End Switch
    // Der folgende Befehl laesst nochmal warten, bis enter gedrueckt wurde. 
    // Sonst siehst du nix, wenn du nicht auf cmdline arbeitest. Funkt i.d.R nur auf WinDos
      system("pause");
      return 0; 
    }
    Ich hab mir erlaubt, deine Fehler auszukommentieren und ranzuschreiben, was du falsch gemacht hattest.

    Gruss Ineluki

  13. #13
    Ich bedanke mich noch einmal herzlich für die fiele hilfe und werde mir mühe geben eure ratschläge zu beachten und mich weiterhin verbessern.

    Balbero

  14. #14
    Original geschrieben von Ineluki
    Code:
    // Der folgende Befehl laesst nochmal warten, bis enter gedrueckt wurde. 
    // Sonst siehst du nix, wenn du nicht auf cmdline arbeitest. Funkt i.d.R nur auf WinDos
      system("pause");
    Das gleiche Ergebnis hättest du auch hinbekommen, indem du einfach...
    Code:
    cout << "Beliebige Taste zum Fortfahren drücken..." << endl;
    cin >> befehl;
    ...hingeschrieben hättest... Systemaufrufe sollte man nach Möglichkeit vermeiden, wenn es eine brauchbare Alternative gibt.


    Weiter oben könnte man noch ein cout einsparen:
    Code:
    cin >> Zahl1;
      cout << endl;
      cout << "Bitte geben sie die zweite Zahl ein,"<<endl
           <<"mit welcher die erste multipliziert werden soll :";
    
    // cout akzeptiert auch Steuerzeichen wie \n (Zeilenende)
    
    cin >> Zahl1;
      cout << "\nBitte geben sie die zweite Zahl ein,\nmit welcher die erste multipliziert werden soll :";
    Ansonsten sieht das gut aus.

  15. #15
    Zitat Zitat
    Original geschrieben von Jesus_666
    Code:
    // Der folgende Befehl laesst nochmal warten, bis enter gedrueckt wurde. 
    // Sonst siehst du nix, wenn du nicht auf cmdline arbeitest. Funkt i.d.R nur auf WinDos
      system("pause");
    Das gleiche Ergebnis hättest du auch hinbekommen, indem du einfach...
    Code:
    cout << "Beliebige Taste zum Fortfahren drücken..." << endl;
    cin >> befehl;
    ...hingeschrieben hättest... Systemaufrufe sollte man nach Möglichkeit vermeiden, wenn es eine brauchbare Alternative gibt.

    Leider hast du dabei nicht recht Jeez, denn cin >> ignoriert fuehrende leerzeichen und zeilenendzeichen. Du kannst also auf Enter rumhaemmern, bis du schwarz wirst, solange du nicht wenigstens ein alphanumerisches zeichen eingeben hast ... habs selbst ausprobiert. Daher der systemaufruf.

    Was ich schon ewig in c suche ist eine moeglichkeit, genau 1 zeichen von der tastatur zu lesen, ohne noch enter druecken zu muessen .. selbst getc will so einen bloedsinn. Sinnvoll waere auch zu wissen, wie ich pruefen kann, ob ueberhaupt ein zeichen im Tastenpuffer ist.

    sprich, wie mache ich das aus dem guten alten pascal bekannte
    repeat until keypressed; c:=readkey;

    Geändert von Ineluki (17.05.2004 um 18:19 Uhr)

  16. #16
    Ich verwende beim Beenden eigentlich immer getch(); Mit getch() liest du immer genau nur ein Zeichen. Für getch() müsstest du allerdings noch conio.h includen.
    Falls du die eingegebene Taste speichern willst musst du a=getch(); und nicht getch(a); schreiben.

    mfg
    Firzen

  17. #17
    @Firzen ..

    Thx fuer die Hilfe, da gibt es aber nur ein Problem ...
    die conio.h ist keine Standard-Include Datei, sondern eine Spezifikation von Borland, das heisstm nicht auf allen Plattformen verfuegbar -__-
    Trotzdem Thx ^__^

  18. #18
    Zitat Zitat
    Original geschrieben von Firzen
    Ich verwende beim Beenden eigentlich immer getch(); Mit getch() liest du immer genau nur ein Zeichen. Für getch() müsstest du allerdings noch conio.h includen.
    Falls du die eingegebene Taste speichern willst musst du a=getch(); und nicht getch(a); schreiben.

    mfg
    Firzen
    Zitat Zitat
    Thx fuer die Hilfe, da gibt es aber nur ein Problem ...
    die conio.h ist keine Standard-Include Datei, sondern eine Spezifikation von Borland, das heisstm nicht auf allen Plattformen verfuegbar -__-
    IIRC gibts in der stdio.h auch getchar(), die eigentlich genau das gleiche machen muesste. Keine Ahnung warum Borland die gleiche Funktion neu implementiert

  19. #19
    Zitat Zitat
    Original geschrieben von MuadDib
    IIRC gibts in der stdio.h auch getchar(), die eigentlich genau das gleiche machen muesste. Keine Ahnung warum Borland die gleiche Funktion neu implementiert
    conio.h ist Microsoft-spezifisch. Die Shell-Methoden sind zwischen DOS/Windows und Unix generell inkompatibel, weil die Shells ganz anders funktionieren. conio.h beinhaltet AFAIK DOS/Win-spezifische Shellfunktionen.

  20. #20
    Zitat Zitat
    IIRC gibts in der stdio.h auch getchar(), die eigentlich genau das gleiche machen muesste. Keine Ahnung warum Borland die gleiche Funktion neu implementiert
    AFAIK ist getchar() doch gleichbedeutend mit fgetc(stdin). getchar() liefert immer ein Zeichen aus stdin als Rückgabewert zurück. Befindet sich kein Zeichen in stdin, so erzeugt getchar eine Eingabe, die du wie bei zb. scanf nur mit Enter beenden kannst.
    getch() liest allerdings immer nur ein Zeichen ein, unabhängig davon ob es Enter oder zb. "a" ist.

    mfg
    Firzen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •