C++ Problem

  • Hey Leute... ich hab ein kleines C++ problem... mir wird die erste "if-schleife" als fehlerhaft angezeigt... könnt ihr mir helfen?
    Hier ist mein Programmcode:

    #include <iostream>
    #include <conio.h>

    using namespace std;

    int main()
    {

    restart:;

    int firstnumber, twicenumber, endnumber;
    char art[18];

    cout << "Hallo, geben Sie bitte eine Zahl ein: ";
    cin >> firstnumber;

    cout << "\n\nDanke, geben Sie bitte eine weitere Zahl ein: ";
    cin >> twicenumber;

    cout << "\n\n\nDanke... Sollen diese Zahlen:\n\t\t\t\tAddiert werden?\n\t\t\t\tSubtrahiert werden?\n\t\t\t\tMultipliziert werden?\n\t\t\t oder Addiert werden?\n\n";
    cin >> art;

    if (art[0]='a'&&art[1]='d'&&art[2]='d'&&art[3]='i'&&art[4]='e'&&art[5]='r'&&art[6]='t'||art[0]='A'&&art[1]='d'&&art[2]='d'&&art[3]='i'&&art[4]='e'&&art[5]='r'&&art[6]='t')
    {
    endnumber=firstnumber+twicenumber;
    }


    else if (art[1]='s'&&art[2]='u'&&art[3]='b'&&art[4]='t'&&art[5]='r'&&art[6]='a'&&art[7]='h'&&art[8]='i'&&art[9]='e'art[10]='r'art[11]='t'||art[1]='S')
    {
    endnumber=firstnumber-twicenumber;
    }

    else if (art[1]='m'&&art[2]='u'&&art[3]='l'&&art[4]='t'&&art[5]='i'&&art[6]='p'&&art[7]='l'&&art[8]='i'&&art[9]='z'art[10]='i'art[11]='e'&&art[12]='r'&&art[13]='t'||art[1]='M')
    {
    endnumber=firstnumber*twicenumber;
    }

    else if (art[1]='d'&&art[2]='i'&&art[3]='v'&&art[4]='i'&&art[5]='d'&&art[6]='i'&&art[7]='e'&&art[8]='r'&&art[9]='t'||art[1]='D')
    {
    endnumber=firstnumber/twicenumber;
    }

    else
    {
    cout << "\n\n\n\n\nFalsche Eingabe - Neustart!\n\n\n\n\n\n\n";
    goto restart;
    }

    cout << "\n\n\n\n\nDas Ergebnis lautet: " << endnumber << "!";
    getch();
    return 0;
    }

    Thx im Vorraus

  • Ich bin jetzt kein Profi in C++, aber fragst du nicht den nullten Buchstaben im Array ab, den es gar nicht gibt? In allen anderen Schleifen nimmst du den ersten.
    Du könntest dir das ganze mit einer switch-case-Schleife übrigens viel leichter machen. Auch musst du nicht Buchstaben für Buchstaben prüfen, du kannst ja einfach gleich einen String auf seinen Inhalt überprüfen.

  • AAAAAAHHHHHHHHH!!!!!!!
    Es gibt keine if-Schleifen ;D
    Nur if-Abfragen!

    Aber dein Fehler liegt ganz klar daran, dass vergleiche immer mit == gemacht werden, nicht mit =.
    Und gewöhne dir an Abfrageblöcke mit Klammern zu machen:

    Code
    if ((art[0]=='a'||art[0]=='A')&&art[1]=='d'&&art[2]=='d'&&art[3]=='i'&&art[4]=='e'&&art[5]=='r'&&art[6]=='t')

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Ich möchte mal behaupten, dass die ganze if-Abfrage ein dezenter Blödsinn ist. :D

  • Ich möchte mal behaupten, dass die ganze if-Abfrage ein dezenter Blödsinn ist. :D

    jeder hat mal so angefangen. Ich denke nicht, dass der Thread-Ersteller schon lange programmiert.

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Dodo
    Wofür brauchen Anfänger Arrays?
    Das ist doch Schwachsinn, das braucht man nur, wenn Performance richtig wichtig ist. Und selbst dann genügt meistens ein vector mit per resize vorher festgelegter Größe.

  • Dodo
    Wofür brauchen Anfänger Arrays?
    Das ist doch Schwachsinn, das braucht man nur, wenn Performance richtig wichtig ist. Und selbst dann genügt meistens ein vector mit per resize vorher festgelegter Größe.

    Maaaaann, hast du schon mal nen Anfänger mit Vektoren und dynamischer Speicherbelegung herumhantieren sehen?
    Das sind höhere Programmiertechniken. Jeder braucht einmal Arrays. Und man muss sie lernen. Klar gibt es elegantere, effizientere, etc. Methoden. Aber Anfänger sind damit überfordert. Kein Meister fällt vom Himmel. Oder willst du mir erzählen, dass ud Vektoren beherrscht hast, bevor du mit Arrays umgehen konntest?

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Unsinn.
    1. Wer mit Pointern nicht umgehen kann, kann auch mit Arrays nicht umgehen.
    2. Eben weil ein Anfänger nicht mit dynamischen Speicher herumfuchteln möchte und er eher durch new[] und delete[] überfordert wird, ist ein vector geeigneter.
    3. Ich habe erst ein ganz ordentliches Online-Tutorial gemacht, allerdings habe ich da nicht verstanden, wie man richtig mit Pointern und Arrays umgeht, und dazu noch einen falschen Umgang mit namespaces gelernt. Da ist mir doch mein Buch lieber, das erstmal ordentliche, einfach verwendbare Container vor dem ganzen Pointer-Kram einführt.

  • Unsinn.
    1. Wer mit Pointern nicht umgehen kann, kann auch mit Arrays nicht umgehen.


    Doch. Man muss nicht unbedingt mit Pointern hantieren, wenn man mit Arrays umgehen kann. Ich konnte Arrays verwenden, ohne dass ich die Pointer verstanden habe.

    2. Eben weil ein Anfänger nicht mit dynamischen Speicher herumfuchteln möchte und er eher durch new[] und delete[] überfordert wird, ist ein vector geeigneter.


    es geht um arrays. und was glaubst du macht ein vektor? Etwa keine dynamische Speicherverwaltung? Aber Arrays muss man nunmal können um überhaupt zu verstehen wozu ein Vektor da ist. Arrays gehören zu den Grundlagen. Warum sind sie in allen Tutorials und Büchern relativ am Anfang erklrt?

    3. Ich habe erst ein ganz ordentliches Online-Tutorial gemacht, allerdings habe ich da nicht verstanden, wie man richtig mit Pointern und Arrays umgeht, und dazu noch einen falschen Umgang mit namespaces gelernt. Da ist mir doch mein Buch lieber, das erstmal ordentliche, einfach verwendbare Container vor dem ganzen Pointer-Kram einführt.


    Pointer könnte man als programmiertechnische Erweiterung für Arrays sehen. Man muss nicht mit Pointern arbeiten um Arrays zu verwenden. (Ja ich weiß, dass Arrays auf Pointern aufbauen, aber ich spreche vom Zugriff)

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Klar alloziert ein vector dynamisch, aber der Anfänger muss sich nicht damit herum schlagen. Und spätestens beim zweiten Programm, will man doch kein Array mit fester Größe mehr und kann mit new[] und delete[] anfangen.

  • Also ich will nicht wissen, auf welche abartigen Wege du C++ gelernt hast... Jedes gute Tutorial bietet viele Übungsprogramme für Arrays, weil man sie fast immer braucht.

    Something big is coming. And there will be pirates and ninjas and unicorns...

  • Ob man einem Anfänger jetzt erklärt, dass ein vector eine Ansammlung von Objekten ist, oder dass ein Array eine Ansammlung von Objekten ist, ist doch einerlei. Bloß gebraucht ein vector keine komischen (für den Lernenden) neuen Syntax-Elemente, bis auf das "< >", die restliche Syntax sollte von Strings und Streams bekannt sein, die man schon vorher gebrauchen muss. Bei einem Array kommen "[]", "[zahl]", "{ }", "new[]" und "delete[]" völlig neu auf, und dieser Aufwand, obwohl sie so gut wie nie gebraucht werden. Wenn ich mir KDE anschaue, werden sie so gut wie nur in generiertem Quelltext verwendet: Bei Tabellen für Signals, Slots, Properties, Visitors und Bindings, eben da, wo Performance sehr wichtig ist, weil die Tabelle andauernd gebraucht wird und eine dynamische Struktur recht unangebracht wäre. Es spricht auch nichts dagegen, das ab und zu aus einer Laune heraus an Stelle eines vectors an unwichtigen Stellen zu gebrauchen (also an Stellen, bei denen klar ist, dass nur an wenigen Stellen zugegriffen wird, oder bei Ein-Datei-Programmen...), aber das muss man doch nicht gleich zu Beginn lernen, nur weil das irgendwo im Hintergrund an vielen Stellen benutzt wird.

  • Ich habe relativ wenig Ahnung von C++ (heißt, ich kann es gerade mal lesen), aber wäre es nicht sinnvoller, den ganzen Array-Kram schon zu können, wenn man später auf eine C-ähnliche Sprache umsteigen will (PHP, Java, Javascript...)?

    Das Konzept von Arrays fand ich damals (in QBASIC :D) nicht schwer, mit zweidimensionalen Arrays hab ich mir dann etwas schwerer getan. (War ja auch was jünger). Dann bin ich zu PHP gegangen und dort fand ich den Klammerkram auch nicht sonderlich schwer.

    Information will frei verfügbar sein.

    Don't eat unpeeled hedgehogs.

  • Das, was in C und C++ Array heißt, ist ein ziemliches Low-Level-Konstrukt, mit dem man höllisch aufpassen muss und das überdies recht unflexibel ist. Sie benötigen einige spezielle Keywords nur zu ihrer Handhabung.
    Und da gibt es eben ein paar komplexe Datentypen mit mehr Funktionalität, die wesentlich einfacher zu handhaben sind. Bei High-Level-Sachen in C++ werden niemals Arrays verwendet (ich gehe mal von KDE aus). QBasic ist eine billige Sprache, da gibt es zum einen keine große Alternative zu Arrays und zum musst du da mit Sicherheit nicht mit Pointern rumfuchteln. Die Arrays in PHP haben erst recht nichts mit denen in C++ zu tun, natürlich sind es beides per int indizierte Container, aber das versteht man mit einem Vector genau so gut. In Java hat man tatsächlich von der Syntax her C-ähnliche Arrays, ich würde jetzt die aber nicht gerade als genial designed betrachten, sie sind eher ziemlich schlecht, bloß sind in Java auch noch die Alternativen noch schlechter als in C++. In anderen Script-Sprachen wie z.B. Ruby, die zwischen Array und Map unterscheiden, ähneln die Arrays mehr einem vector aus C++.

  • Hey,

    wir haben jezz grade neu c++ in der schule bekommen und jezz würde ich mich gerne bei euch informieren wie ich das am besten lernen kann...

    mfg

  • In der Schule ? FG

    Gibt genug C++ Tutorials im Internet ...

    Viele Leute lernen aber aus Büchern besser als aus dem Internet...

  • FG?? Was ist das?

    Ihr werdet in der Schule schon die wichtigsten Grundlagen lernen, und dann halt mal selber ausprobieren und im Internet informieren, wie man die Probleme löst, die sich halt ergeben…
    Nächstes mal bitte einen neuen Thread aufmachen!